Генерация изображений с помощью Gemini

Gemini может генерировать и обрабатывать изображения в диалоговом режиме. Вы можете задавать Gemini текстовые запросы, изображения или их комбинацию для выполнения различных задач, связанных с изображениями, таких как создание и редактирование. Все сгенерированные изображения содержат водяной знак SynthID .

Генерация изображений может быть недоступна во всех регионах и странах. Для получения дополнительной информации посетите нашу страницу моделей Gemini .

Генерация изображений (текст в изображение)

Следующий код демонстрирует, как создать изображение на основе описательного запроса. Необходимо включить responseModalities : ["TEXT", "IMAGE"] в конфигурацию. Вывод только изображений не поддерживается этими моделями.

Питон

from google import genai
from google.genai import types
from PIL import Image
from io import BytesIO
import base64

client = genai.Client()

contents = ('Hi, can you create a 3d rendered image of a pig '
            'with wings and a top hat flying over a happy '
            'futuristic scifi city with lots of greenery?')

response = client.models.generate_content(
    model="gemini-2.0-flash-preview-image-generation",
    contents=contents,
    config=types.GenerateContentConfig(
      response_modalities=['TEXT', 'IMAGE']
    )
)

for part in response.candidates[0].content.parts:
  if part.text is not None:
    print(part.text)
  elif part.inline_data is not None:
    image = Image.open(BytesIO((part.inline_data.data)))
    image.save('gemini-native-image.png')
    image.show()

JavaScript

import { GoogleGenAI, Modality } from "@google/genai";
import * as fs from "node:fs";

async function main() {

  const ai = new GoogleGenAI({});

  const contents =
    "Hi, can you create a 3d rendered image of a pig " +
    "with wings and a top hat flying over a happy " +
    "futuristic scifi city with lots of greenery?";

  // Set responseModalities to include "Image" so the model can generate  an image
  const response = await ai.models.generateContent({
    model: "gemini-2.0-flash-preview-image-generation",
    contents: contents,
    config: {
      responseModalities: [Modality.TEXT, Modality.IMAGE],
    },
  });
  for (const part of response.candidates[0].content.parts) {
    // Based on the part type, either show the text or save the image
    if (part.text) {
      console.log(part.text);
    } else if (part.inlineData) {
      const imageData = part.inlineData.data;
      const buffer = Buffer.from(imageData, "base64");
      fs.writeFileSync("gemini-native-image.png", buffer);
      console.log("Image saved as gemini-native-image.png");
    }
  }
}

main();

Идти

package main

import (
  "context"
  "fmt"
  "os"
  "google.golang.org/genai"
)

func main() {

  ctx := context.Background()
  client, err := genai.NewClient(ctx, nil)
  if err != nil {
      log.Fatal(err)
  }

  config := &genai.GenerateContentConfig{
      ResponseModalities: []string{"TEXT", "IMAGE"},
  }

  result, _ := client.Models.GenerateContent(
      ctx,
      "gemini-2.0-flash-preview-image-generation",
      genai.Text("Hi, can you create a 3d rendered image of a pig " +
                 "with wings and a top hat flying over a happy " +
                 "futuristic scifi city with lots of greenery?"),
      config,
  )

  for _, part := range result.Candidates[0].Content.Parts {
      if part.Text != "" {
          fmt.Println(part.Text)
      } else if part.InlineData != nil {
          imageBytes := part.InlineData.Data
          outputFilename := "gemini_generated_image.png"
          _ = os.WriteFile(outputFilename, imageBytes, 0644)
      }
  }
}

ОТДЫХ

curl -s -X POST
  "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash-preview-image-generation:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [{
      "parts": [
        {"text": "Hi, can you create a 3d rendered image of a pig with wings and a top hat flying over a happy futuristic scifi city with lots of greenery?"}
      ]
    }],
    "generationConfig":{"responseModalities":["TEXT","IMAGE"]}
  }' \
  | grep -o '"data": "[^"]*"' \
  | cut -d'"' -f4 \
  | base64 --decode > gemini-native-image.png
Изображение фантастической летающей свиньи, созданное искусственным интеллектом
Изображение фантастической летающей свиньи, созданное искусственным интеллектом

Редактирование изображений (текст и изображение в изображение)

Для редактирования изображения добавьте изображение в качестве входных данных. В следующем примере показана загрузка изображений в кодировке Base64. Для загрузки нескольких изображений и большего объёма данных см. раздел «Входные данные изображения» .

Питон

from google import genai
from google.genai import types
from PIL import Image
from io import BytesIO

import PIL.Image

image = PIL.Image.open('/path/to/image.png')

client = genai.Client()

text_input = ('Hi, This is a picture of me.'
            'Can you add a llama next to me?',)

response = client.models.generate_content(
    model="gemini-2.0-flash-preview-image-generation",
    contents=[text_input, image],
    config=types.GenerateContentConfig(
      response_modalities=['TEXT', 'IMAGE']
    )
)

for part in response.candidates[0].content.parts:
  if part.text is not None:
    print(part.text)
  elif part.inline_data is not None:
    image = Image.open(BytesIO((part.inline_data.data)))
    image.show()

JavaScript

import { GoogleGenAI, Modality } from "@google/genai";
import * as fs from "node:fs";

async function main() {

  const ai = new GoogleGenAI({});

  // Load the image from the local file system
  const imagePath = "path/to/image.png";
  const imageData = fs.readFileSync(imagePath);
  const base64Image = imageData.toString("base64");

  // Prepare the content parts
  const contents = [
    { text: "Can you add a llama next to the image?" },
    {
      inlineData: {
        mimeType: "image/png",
        data: base64Image,
      },
    },
  ];

  // Set responseModalities to include "Image" so the model can generate an image
  const response = await ai.models.generateContent({
    model: "gemini-2.0-flash-preview-image-generation",
    contents: contents,
    config: {
      responseModalities: [Modality.TEXT, Modality.IMAGE],
    },
  });
  for (const part of response.candidates[0].content.parts) {
    // Based on the part type, either show the text or save the image
    if (part.text) {
      console.log(part.text);
    } else if (part.inlineData) {
      const imageData = part.inlineData.data;
      const buffer = Buffer.from(imageData, "base64");
      fs.writeFileSync("gemini-native-image.png", buffer);
      console.log("Image saved as gemini-native-image.png");
    }
  }
}

main();

Идти

package main

import (
 "context"
 "fmt"
 "os"
 "google.golang.org/genai"
)

func main() {

 ctx := context.Background()
 client, err := genai.NewClient(ctx, nil)
 if err != nil {
     log.Fatal(err)
 }

 imagePath := "/path/to/image.png"
 imgData, _ := os.ReadFile(imagePath)

 parts := []*genai.Part{
   genai.NewPartFromText("Hi, This is a picture of me. Can you add a llama next to me?"),
   &genai.Part{
     InlineData: &genai.Blob{
       MIMEType: "image/png",
       Data:     imgData,
     },
   },
 }

 contents := []*genai.Content{
   genai.NewContentFromParts(parts, genai.RoleUser),
 }

 config := &genai.GenerateContentConfig{
     ResponseModalities: []string{"TEXT", "IMAGE"},
 }

 result, _ := client.Models.GenerateContent(
     ctx,
     "gemini-2.0-flash-preview-image-generation",
     contents,
     config,
 )

 for _, part := range result.Candidates[0].Content.Parts {
     if part.Text != "" {
         fmt.Println(part.Text)
     } else if part.InlineData != nil {
         imageBytes := part.InlineData.Data
         outputFilename := "gemini_generated_image.png"
         _ = os.WriteFile(outputFilename, imageBytes, 0644)
     }
 }
}

ОТДЫХ

IMG_PATH=/path/to/your/image1.jpeg

if [[ "$(base64 --version 2>&1)" = *"FreeBSD"* ]]; then
  B64FLAGS="--input"
else
  B64FLAGS="-w0"
fi

IMG_BASE64=$(base64 "$B64FLAGS" "$IMG_PATH" 2>&1)

curl -X POST \
  "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash-preview-image-generation:generateContent" \
    -H "x-goog-api-key: $GEMINI_API_KEY" \
    -H 'Content-Type: application/json' \
    -d "{
      \"contents\": [{
        \"parts\":[
            {\"text\": \"'Hi, This is a picture of me. Can you add a llama next to me\"},
            {
              \"inline_data\": {
                \"mime_type\":\"image/jpeg\",
                \"data\": \"$IMG_BASE64\"
              }
            }
        ]
      }],
      \"generationConfig\": {\"responseModalities\": [\"TEXT\", \"IMAGE\"]}
    }"  \
  | grep -o '"data": "[^"]*"' \
  | cut -d'"' -f4 \
  | base64 --decode > gemini-edited-image.png

Другие режимы генерации изображений

Gemini поддерживает другие режимы взаимодействия с изображениями на основе структуры подсказки и контекста, включая:

  • Текст с изображением(ями) и текстом (чередование): выводит изображения с соответствующим текстом.
    • Пример задания: «Создайте иллюстрированный рецепт паэльи».
  • Изображение(я) и текст в изображение(я) и текст (чередование) : использует входные изображения и текст для создания новых связанных изображений и текста.
    • Пример вопроса: (На изображении меблированной комнаты) «Какие еще цвета диванов подойдут для моего помещения? Можете ли вы обновить изображение?»
  • Многооконное редактирование изображений (чат): продолжайте создавать и редактировать изображения в режиме разговора.
    • Примеры подсказок: [загрузите изображение синего автомобиля.] , «Преврати эту машину в кабриолет.», «Теперь измени цвет на желтый».

Ограничения

  • Для наилучшей производительности используйте следующие языки: EN, es-MX, ja-JP, zh-CN, hi-IN.
  • Генерация изображений не поддерживает аудио- и видеовходы.
  • Генерация изображения не всегда может инициировать:
    • Модель может выводить только текст. Попробуйте явно запросить вывод изображений (например, «сгенерировать изображение», «предоставлять изображения по ходу работы», «обновить изображение»).
    • Модель может перестать генерироваться в процессе. Попробуйте ещё раз или попробуйте другую подсказку.
  • При генерации текста для изображения Gemini работает лучше всего, если вы сначала генерируете текст, а затем запрашиваете изображение с текстом.
  • В некоторых регионах/странах генерация изображений недоступна. Подробнее см. в разделе «Модели» .

Когда использовать Imagen

Помимо использования встроенных возможностей генерации изображений Gemini, вы также можете получить доступ к Imagen , нашей специализированной модели генерации изображений, через API Gemini.

Выбирайте Близнецов, когда:

  • Вам нужны контекстно-релевантные изображения, которые задействуют знания и мышление мира.
  • Важно обеспечить плавное сочетание текста и изображений.
  • Вам нужны точные визуальные образы, встроенные в длинные текстовые последовательности.
  • Вы хотите редактировать изображения в диалоговом режиме, сохраняя при этом контекст.

Выбирайте Imagen , когда:

  • Главными приоритетами являются качество изображения, фотореализм, художественная детализация или определенные стили (например, импрессионизм, аниме).
  • Выполнение специализированных задач по редактированию, таких как обновление фона продукта или масштабирование изображений.
  • Внедрение брендинга, стиля или создание логотипов и дизайнов продукции.

Imagen 4 — ваш выбор, если вы начинаете создавать изображения с помощью Imagen. Выбирайте Imagen 4 Ultra для сложных задач или когда вам требуется наилучшее качество изображения. Обратите внимание, что Imagen 4 Ultra может генерировать только одно изображение за раз.

Что дальше?