Gere e edite imagens com o Gemini

Os seguintes modelos do Gemini suportam a capacidade de gerar imagens, além de texto:

  • Imagem do Gemini 2.5 Flash, também conhecido como Gemini 2.5 Flash (com o Nano Banana)

  • Imagem do Gemini 3 Pro (pré-visualização), também conhecido como Gemini 3 Pro (com Nano Banana)

Isto expande as capacidades do Gemini para incluir o seguinte:

  • Gerar imagens iterativamente através de conversas com linguagem natural, ajustando as imagens e mantendo a consistência e o contexto.
  • Gere imagens com renderização de texto longo de alta qualidade.
  • Gerar resultados de texto e imagem intercalados. Por exemplo, uma publicação no blogue com texto e imagens num único comando. Anteriormente, isto exigia a combinação de vários modelos.
  • Gere imagens com o conhecimento do mundo e as capacidades de raciocínio do Gemini.

O Gemini 2.5 Flash Image (gemini-2.5-flash-image) e a pré-visualização do Gemini 3 Pro Image (gemini-3-pro-image-preview) suportam a geração de imagens de pessoas e contêm filtros de segurança atualizados que proporcionam uma experiência do utilizador mais flexível e menos restritiva. O Gemini 2.5 Flash Image pode gerar imagens em 1024 px. O Gemini 3 Pro Image pode gerar imagens até 4096 px.

Ambos os modelos suportam as seguintes modalidades e capacidades:

  • Texto para imagem

    • Exemplo de comando: "Gera uma imagem da Torre Eiffel com fogos de artifício no fundo."
  • Text to Image (renderização de texto)

    • Exemplo de comando: "gera uma foto cinematográfica de um grande edifício com esta projeção de texto gigante mapeada na parte frontal do edifício: "O Gemini 3 já pode gerar texto de formato longo""
  • Texto para imagens e texto (intercalado)

    • Exemplo de comando: "Gera uma receita ilustrada de uma paelha. Cria imagens juntamente com o texto à medida que gera a receita."
    • Exemplo de comando: "Gera uma história sobre um cão num estilo de animação de desenho animado 3D. Para cada cena, gera uma imagem"
  • Imagens e texto para imagens e texto (intercalados)

    • Comando de exemplo: (com uma imagem de uma sala mobilada) "Que outras cores de sofás ficariam bem no meu espaço? Pode atualizar a imagem?"

Práticas recomendadas

Para melhorar os resultados da geração de imagens, siga estas práticas recomendadas:

  • Seja específico: mais detalhes dão-lhe mais controlo. Por exemplo, em vez de "armadura de fantasia", experimente "armadura de placas élfica ornamentada, gravada com padrões de folhas de prata, com uma gola alta e ombreiras em forma de asas de falcão".

  • Forneça contexto e intenção: explique a finalidade da imagem para ajudar o modelo a compreender o contexto. Por exemplo, "Cria um logótipo para uma marca de cuidados de pele minimalista e de alta qualidade" funciona melhor do que "Cria um logótipo".

  • Itere e refine: não espere uma imagem perfeita à primeira tentativa. Use comandos de seguimento para fazer pequenas alterações, por exemplo, "Torna a iluminação mais quente" ou "Altera a expressão do personagem para ser mais séria".

  • Use instruções passo a passo: para cenas complexas, divida o seu pedido em passos. Por exemplo, "Primeiro, cria um fundo de uma floresta serena e enevoada ao amanhecer. Em seguida, no primeiro plano, adicione um altar de pedra antigo coberto de musgo. Por fim, coloca uma única espada brilhante em cima do altar."

  • Descreva o que quer, não o que não quer: em vez de dizer "sem carros", descreva a cena de forma positiva dizendo "uma rua vazia e deserta sem sinais de trânsito".

  • Controlar a câmara: orientar a vista da câmara. Use termos fotográficos e cinematográficos para descrever a composição, por exemplo, "grande angular", "macro" ou "perspetiva de ângulo baixo".

  • Comandos para imagens: descreva a intenção com expressões como "criar uma imagem de" ou "gerar uma imagem de". Caso contrário, o modelo multimodal pode responder com texto em vez da imagem.

  • Transmitir assinaturas de pensamento: quando usar o Gemini 3 Pro Image, recomendamos que transmita assinaturas de pensamento de volta para o modelo durante a criação e edição de imagens com várias interações. Isto permite-lhe preservar o contexto de raciocínio em todas as interações. Para ver exemplos de código relacionados com a edição de imagens com várias interações usando o Gemini 3 Pro Image, consulte o Exemplo de edição de imagens com várias interações usando assinaturas de reflexão.

Limitações:

  • Para o melhor desempenho com o Gemini 2.5 Flash Image, use os seguintes idiomas: EN, es-MX, ja-JP, zh-CN ou hi-IN. Para um melhor desempenho com a imagem do Gemini 3 Pro, use os seguintes idiomas: ar-EG, de-DE, EN, es-MX, fr-FR, hi-IN, id-ID, it-IT, ja-JP, ko-KR, pt-BR, ru-RU, ua-UA, vi-VN, e zh-CN

  • A geração de imagens não suporta entradas de áudio nem de vídeo.

  • O modelo pode não criar o número exato de imagens que pedir.

  • Para obter os melhores resultados com a imagem do Gemini 2.5 Flash, inclua um máximo de três imagens numa entrada. Para obter os melhores resultados com o Gemini 3 Pro Image, inclua um máximo de 14 imagens numa entrada.

  • Quando gera uma imagem com texto, primeiro gera o texto e, em seguida, gera uma imagem com esse texto.

  • A geração de imagens ou texto pode não funcionar conforme esperado nestas situações:

    • O modelo pode criar apenas texto e nenhuma imagem se o comando for ambíguo. Se quiser imagens, peça-as claramente na sua solicitação. Por exemplo, "fornece imagens à medida que avança".

    • O modelo pode criar texto como uma imagem. Para gerar texto, peça especificamente saída de texto. Por exemplo, "gera texto narrativo juntamente com ilustrações".

    • O modelo pode parar de gerar conteúdo, mesmo quando não tiver terminado. Se isto ocorrer, tente novamente ou use um comando diferente.

    • Se um comando for potencialmente inseguro, o modelo pode não processar o pedido e devolve uma resposta a indicar que não consegue criar imagens inseguras. Neste caso, o FinishReason é STOP.

Gerar imagens

As secções seguintes abordam como gerar imagens através do Vertex AI Studio ou da API.

Para ver orientações e práticas recomendadas para a criação de comandos, consulte o artigo Crie comandos multimodais.

Consola

Para usar a geração de imagens:

  1. Abra o Vertex AI Studio > Criar comando.
  2. Clique em Mudar modelo e selecione um dos seguintes modelos no menu:
    • gemini-2.5-flash-image
    • gemini-3-pro-image-preview
  3. No painel Resultados, selecione Imagem e texto no menu pendente.
  4. Escreva uma descrição da imagem que quer gerar na área de texto de Escreva um comando.
  5. Clique no botão Comando ().

O Gemini gera uma imagem com base na sua descrição. Este processo demora alguns segundos, mas pode ser comparativamente mais lento consoante a capacidade.

Python

Instalação

pip install --upgrade google-genai

Para saber mais, consulte a documentação de referência do SDK.

Defina variáveis de ambiente para usar o SDK de IA gen com o Vertex AI:

# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values
# with appropriate values for your project.
export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT
export GOOGLE_CLOUD_LOCATION=global
export GOOGLE_GENAI_USE_VERTEXAI=True

from google import genai
from google.genai.types import GenerateContentConfig, Modality
from PIL import Image
from io import BytesIO

client = genai.Client()

response = client.models.generate_content(
    model="gemini-3-pro-image-preview",
    contents=("Generate an image of the Eiffel tower with fireworks in the background."),
    config=GenerateContentConfig(
        response_modalities=[Modality.TEXT, Modality.IMAGE],
    ),
)
for part in response.candidates[0].content.parts:
    if part.text:
        print(part.text)
    elif part.inline_data:
        image = Image.open(BytesIO((part.inline_data.data)))
        image.save("output_folder/example-image-eiffel-tower.png")

Node.js

Instalação

npm install @google/genai

Para saber mais, consulte a documentação de referência do SDK.

Defina variáveis de ambiente para usar o SDK de IA gen com o Vertex AI:

# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values
# with appropriate values for your project.
export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT
export GOOGLE_CLOUD_LOCATION=global
export GOOGLE_GENAI_USE_VERTEXAI=True

const fs = require('fs');
const {GoogleGenAI, Modality} = require('@google/genai');

const GOOGLE_CLOUD_PROJECT = process.env.GOOGLE_CLOUD_PROJECT;
const GOOGLE_CLOUD_LOCATION =
  process.env.GOOGLE_CLOUD_LOCATION || 'us-central1';

async function generateImage(
  projectId = GOOGLE_CLOUD_PROJECT,
  location = GOOGLE_CLOUD_LOCATION
) {
  const client = new GoogleGenAI({
    vertexai: true,
    project: projectId,
    location: location,
  });

  const response = await client.models.generateContentStream({
    model: 'gemini-2.5-flash-image',
    contents:
      'Generate an image of the Eiffel tower with fireworks in the background.',
    config: {
      responseModalities: [Modality.TEXT, Modality.IMAGE],
    },
  });

  const generatedFileNames = [];
  let imageIndex = 0;

  for await (const chunk of response) {
    const text = chunk.text;
    const data = chunk.data;
    if (text) {
      console.debug(text);
    } else if (data) {
      const outputDir = 'output-folder';
      if (!fs.existsSync(outputDir)) {
        fs.mkdirSync(outputDir, {recursive: true});
      }
      const fileName = `${outputDir}/generate_content_streaming_image_${imageIndex++}.png`;
      console.debug(`Writing response image to file: ${fileName}.`);
      try {
        fs.writeFileSync(fileName, data);
        generatedFileNames.push(fileName);
      } catch (error) {
        console.error(`Failed to write image file ${fileName}:`, error);
      }
    }
  }

  // Example response:
  //  I will generate an image of the Eiffel Tower at night, with a vibrant display of
  //  colorful fireworks exploding in the dark sky behind it. The tower will be
  //  illuminated, standing tall as the focal point of the scene, with the bursts of
  //  light from the fireworks creating a festive atmosphere.

  return generatedFileNames;
}

Java

Saiba como instalar ou atualizar o Java.

Para saber mais, consulte a documentação de referência do SDK.

Defina variáveis de ambiente para usar o SDK de IA gen com o Vertex AI:

# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values
# with appropriate values for your project.
export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT
export GOOGLE_CLOUD_LOCATION=global
export GOOGLE_GENAI_USE_VERTEXAI=True


import com.google.genai.Client;
import com.google.genai.types.Blob;
import com.google.genai.types.Candidate;
import com.google.genai.types.Content;
import com.google.genai.types.GenerateContentConfig;
import com.google.genai.types.GenerateContentResponse;
import com.google.genai.types.Part;
import com.google.genai.types.SafetySetting;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.imageio.ImageIO;

public class ImageGenMmFlashWithText {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String modelId = "gemini-2.5-flash-image";
    String outputFile = "resources/output/example-image-eiffel-tower.png";
    generateContent(modelId, outputFile);
  }

  // Generates an image with text input
  public static void generateContent(String modelId, String outputFile) throws IOException {
    // Client Initialization. Once created, it can be reused for multiple requests.
    try (Client client = Client.builder().location("global").vertexAI(true).build()) {

      GenerateContentConfig contentConfig =
          GenerateContentConfig.builder()
              .responseModalities("TEXT", "IMAGE")
              .candidateCount(1)
              .safetySettings(
                  SafetySetting.builder()
                      .method("PROBABILITY")
                      .category("HARM_CATEGORY_DANGEROUS_CONTENT")
                      .threshold("BLOCK_MEDIUM_AND_ABOVE")
                      .build())
              .build();

      GenerateContentResponse response =
          client.models.generateContent(
              modelId,
              "Generate an image of the Eiffel tower with fireworks in the background.",
              contentConfig);

      // Get parts of the response
      List<Part> parts =
          response
              .candidates()
              .flatMap(candidates -> candidates.stream().findFirst())
              .flatMap(Candidate::content)
              .flatMap(Content::parts)
              .orElse(new ArrayList<>());

      // For each part print text if present, otherwise read image data if present and
      // write it to the output file
      for (Part part : parts) {
        if (part.text().isPresent()) {
          System.out.println(part.text().get());
        } else if (part.inlineData().flatMap(Blob::data).isPresent()) {
          BufferedImage image =
              ImageIO.read(new ByteArrayInputStream(part.inlineData().flatMap(Blob::data).get()));
          ImageIO.write(image, "png", new File(outputFile));
        }
      }

      System.out.println("Content written to: " + outputFile);
      // Example response:
      // Here is the Eiffel Tower with fireworks in the background...
      //
      // Content written to: resources/output/example-image-eiffel-tower.png
    }
  }
}

REST

Execute o seguinte comando no terminal para criar ou substituir este ficheiro no diretório atual:

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  https://${API_ENDPOINT}:generateContent \
  -d '{
    "contents": {
      "role": "USER",
      "parts": [
        {
          "text": "Create a tutorial explaining how to make a peanut butter and jelly sandwich in three easy steps."
        }
      ]
    },
    "generationConfig": {
      "responseModalities": ["TEXT", "IMAGE"],
      "imageConfig": {
        "aspectRatio": "16:9",
      },
     },
     "safetySettings": {
      "method": "PROBABILITY",
      "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
      "threshold": "BLOCK_MEDIUM_AND_ABOVE"
    },
  }' 2>/dev/null >response.json

O Gemini gera uma imagem com base na sua descrição. Este processo demora alguns segundos, mas pode ser comparativamente mais lento consoante a capacidade.

Gere imagens e texto intercalados

O Gemini 2.5 Flash Image pode gerar imagens intercaladas com as respetivas respostas de texto. Por exemplo, pode gerar imagens do aspeto de cada passo de uma receita gerada para acompanhar o texto desse passo, sem ter de fazer pedidos separados ao modelo para o fazer.

Consola

Para gerar imagens intercaladas com respostas de texto:

  1. Abra o Vertex AI Studio > Criar comando.
  2. Clique em Mudar modelo e selecione um dos seguintes modelos no menu:
    • gemini-2.5-flash-image
    • gemini-3-pro-image-preview
  3. No painel Resultados, selecione Imagem e texto no menu pendente.
  4. Escreva uma descrição da imagem que quer gerar na área de texto de Escreva um comando. Por exemplo, "Cria um tutorial a explicar como fazer uma sanduíche de manteiga de amendoim e geleia em três passos simples. Para cada passo, fornece um título com o número do passo, uma explicação e também gera uma imagem. Gera cada imagem num formato 1:1."
  5. Clique no botão Comando ().

O Gemini gera uma resposta com base na sua descrição. Este processo demora alguns segundos, mas pode ser comparativamente mais lento consoante a capacidade.

Python

Instalação

pip install --upgrade google-genai

Para saber mais, consulte a documentação de referência do SDK.

Defina variáveis de ambiente para usar o SDK de IA gen com o Vertex AI:

# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values
# with appropriate values for your project.
export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT
export GOOGLE_CLOUD_LOCATION=global
export GOOGLE_GENAI_USE_VERTEXAI=True

from google import genai
from google.genai.types import GenerateContentConfig, Modality
from PIL import Image
from io import BytesIO

client = genai.Client()

response = client.models.generate_content(
    model="gemini-3-pro-image-preview",
    contents=(
        "Generate an illustrated recipe for a paella."
        "Create images to go alongside the text as you generate the recipe"
    ),
    config=GenerateContentConfig(response_modalities=[Modality.TEXT, Modality.IMAGE]),
)
with open("output_folder/paella-recipe.md", "w") as fp:
    for i, part in enumerate(response.candidates[0].content.parts):
        if part.text is not None:
            fp.write(part.text)
        elif part.inline_data is not None:
            image = Image.open(BytesIO((part.inline_data.data)))
            image.save(f"output_folder/example-image-{i+1}.png")
            fp.write(f"![image](example-image-{i+1}.png)")

Java

Saiba como instalar ou atualizar o Java.

Para saber mais, consulte a documentação de referência do SDK.

Defina variáveis de ambiente para usar o SDK de IA gen com o Vertex AI:

# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values
# with appropriate values for your project.
export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT
export GOOGLE_CLOUD_LOCATION=global
export GOOGLE_GENAI_USE_VERTEXAI=True


import com.google.genai.Client;
import com.google.genai.types.Blob;
import com.google.genai.types.Candidate;
import com.google.genai.types.Content;
import com.google.genai.types.GenerateContentConfig;
import com.google.genai.types.GenerateContentResponse;
import com.google.genai.types.Part;
import java.awt.image.BufferedImage;
import java.io.BufferedWriter;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.imageio.ImageIO;

public class ImageGenMmFlashTextAndImageWithText {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String modelId = "gemini-2.5-flash-image";
    String outputFile = "resources/output/paella-recipe.md";
    generateContent(modelId, outputFile);
  }

  // Generates text and image with text input
  public static void generateContent(String modelId, String outputFile) throws IOException {
    // Client Initialization. Once created, it can be reused for multiple requests.
    try (Client client = Client.builder().location("global").vertexAI(true).build()) {

      GenerateContentResponse response =
          client.models.generateContent(
              modelId,
              Content.fromParts(
                  Part.fromText("Generate an illustrated recipe for a paella."),
                  Part.fromText(
                      "Create images to go alongside the text as you generate the recipe.")),
              GenerateContentConfig.builder().responseModalities("TEXT", "IMAGE").build());

      try (BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile))) {

        // Get parts of the response
        List<Part> parts =
            response
                .candidates()
                .flatMap(candidates -> candidates.stream().findFirst())
                .flatMap(Candidate::content)
                .flatMap(Content::parts)
                .orElse(new ArrayList<>());

        int index = 1;
        // For each part print text if present, otherwise read image data if present and
        // write it to the output file
        for (Part part : parts) {
          if (part.text().isPresent()) {
            writer.write(part.text().get());
          } else if (part.inlineData().flatMap(Blob::data).isPresent()) {
            BufferedImage image =
                ImageIO.read(new ByteArrayInputStream(part.inlineData().flatMap(Blob::data).get()));
            ImageIO.write(
                image, "png", new File("resources/output/example-image-" + index + ".png"));
            writer.write("![image](example-image-" + index + ".png)");
          }
          index++;
        }

        System.out.println("Content written to: " + outputFile);

        // Example response:
        // A markdown page for a Paella recipe(`paella-recipe.md`) has been generated.
        // It includes detailed steps and several images illustrating the cooking process.
        //
        // Content written to:  resources/output/paella-recipe.md
      }
    }
  }
}

REST

Execute o seguinte comando no terminal para criar ou substituir este ficheiro no diretório atual:

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  https://${API_ENDPOINT}:generateContent \
  -d '{
    "contents": {
      "role": "USER",
      "parts": [
        {
          "text": "Create a tutorial explaining how to make a peanut butter and jelly sandwich in three easy steps. For each step, provide a title with the number of the step, an explanation, and also generate an image, generate each image in a 1:1 aspect ratio."
        }
      ]
    },
    "generationConfig": {
      "responseModalities": ["TEXT", "IMAGE"],
      "imageConfig": {
        "aspectRatio": "16:9",
      },
    },
    "safetySettings": {
      "method": "PROBABILITY",
      "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
      "threshold": "BLOCK_MEDIUM_AND_ABOVE"
    },
  }' 2>/dev/null >response.json

O Gemini gera uma imagem com base na sua descrição. Este processo demora alguns segundos, mas pode ser comparativamente mais lento consoante a capacidade.

Edite imagens

O Gemini 2.5 Flash Image para geração de imagens (gemini-2.5-flash-image) suporta a capacidade de editar imagens, além de as gerar. A imagem do Gemini 2.5 Flash suporta a edição melhorada de imagens e a edição em várias interações, e contém filtros de segurança atualizados que oferecem uma experiência do utilizador mais flexível e menos restritiva.

Suporta as seguintes modalidades e capacidades:

  • Edição de imagens (texto e imagem para imagem)

    • Exemplo de comando: "Edita esta imagem para que pareça um desenho animado"
    • Exemplo de comando: [imagem de um gato] + [imagem de uma almofada] + "Cria um ponto de cruz do meu gato nesta almofada."
  • Edição de imagens em várias etapas (chat)

    • Exemplos de comandos: [carrega uma imagem de um carro azul.] "Transforma este carro num descapotável."

      • [O modelo devolve uma imagem de um descapotável na mesma cena] "Agora, muda a cor para amarelo."
      • [O modelo devolve uma imagem com um descapotável amarelo] "Adiciona um spoiler."
      • [O modelo devolve uma imagem do descapotável com um spoiler]

Edite uma imagem

Consola

Para editar imagens:

  1. Abra o Vertex AI Studio > Criar comando.
  2. Clique em Mudar modelo e selecione um dos seguintes modelos no menu:
    • gemini-2.5-flash-image
    • gemini-3-pro-image-preview
  3. No painel Resultados, selecione Imagem e texto no menu pendente.
  4. Clique em Inserir multimédia () e selecione uma origem no menu e, de seguida, siga as instruções da caixa de diálogo.
  5. Escreva as edições que quer fazer à imagem na área de texto Escreva um comando.
  6. Clique no botão Comando ().

O Gemini gera uma versão editada da imagem fornecida com base na sua descrição. Este processo demora alguns segundos, mas pode ser comparativamente mais lento, dependendo da capacidade.

Python

Instalação

pip install --upgrade google-genai

Para saber mais, consulte a documentação de referência do SDK.

Defina variáveis de ambiente para usar o SDK de IA gen com o Vertex AI:

# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values
# with appropriate values for your project.
export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT
export GOOGLE_CLOUD_LOCATION=global
export GOOGLE_GENAI_USE_VERTEXAI=True

from google import genai
from google.genai.types import GenerateContentConfig, Modality
from PIL import Image
from io import BytesIO

client = genai.Client()

# Using an image of Eiffel tower, with fireworks in the background.
image = Image.open("test_resources/example-image-eiffel-tower.png")

response = client.models.generate_content(
    model="gemini-3-pro-image-preview",
    contents=[image, "Edit this image to make it look like a cartoon."],
    config=GenerateContentConfig(response_modalities=[Modality.TEXT, Modality.IMAGE]),
)
for part in response.candidates[0].content.parts:
    if part.text:
        print(part.text)
    elif part.inline_data:
        image = Image.open(BytesIO((part.inline_data.data)))
        image.save("output_folder/bw-example-image.png")

Java

Saiba como instalar ou atualizar o Java.

Para saber mais, consulte a documentação de referência do SDK.

Defina variáveis de ambiente para usar o SDK de IA gen com o Vertex AI:

# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values
# with appropriate values for your project.
export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT
export GOOGLE_CLOUD_LOCATION=global
export GOOGLE_GENAI_USE_VERTEXAI=True


import com.google.genai.Client;
import com.google.genai.types.Blob;
import com.google.genai.types.Candidate;
import com.google.genai.types.Content;
import com.google.genai.types.GenerateContentConfig;
import com.google.genai.types.GenerateContentResponse;
import com.google.genai.types.Part;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import javax.imageio.ImageIO;

public class ImageGenMmFlashEditImageWithTextAndImage {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String modelId = "gemini-2.5-flash-image";
    String outputFile = "resources/output/bw-example-image.png";
    generateContent(modelId, outputFile);
  }

  // Edits an image with image and text input
  public static void generateContent(String modelId, String outputFile) throws IOException {
    // Client Initialization. Once created, it can be reused for multiple requests.
    try (Client client = Client.builder().location("global").vertexAI(true).build()) {

      byte[] localImageBytes =
          Files.readAllBytes(Paths.get("resources/example-image-eiffel-tower.png"));

      GenerateContentResponse response =
          client.models.generateContent(
              modelId,
              Content.fromParts(
                  Part.fromBytes(localImageBytes, "image/png"),
                  Part.fromText("Edit this image to make it look like a cartoon.")),
              GenerateContentConfig.builder().responseModalities("TEXT", "IMAGE").build());

      // Get parts of the response
      List<Part> parts =
          response
              .candidates()
              .flatMap(candidates -> candidates.stream().findFirst())
              .flatMap(Candidate::content)
              .flatMap(Content::parts)
              .orElse(new ArrayList<>());

      // For each part print text if present, otherwise read image data if present and
      // write it to the output file
      for (Part part : parts) {
        if (part.text().isPresent()) {
          System.out.println(part.text().get());
        } else if (part.inlineData().flatMap(Blob::data).isPresent()) {
          BufferedImage image =
              ImageIO.read(new ByteArrayInputStream(part.inlineData().flatMap(Blob::data).get()));
          ImageIO.write(image, "png", new File(outputFile));
        }
      }

      System.out.println("Content written to: " + outputFile);

      // Example response:
      // No problem! Here's the image in a cartoon style...
      //
      // Content written to: resources/output/bw-example-image.png
    }
  }
}

REST

Execute o seguinte comando no terminal para criar ou substituir este ficheiro no diretório atual:

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  https://${API_ENDPOINT}:generateContent \
  -d '{
    "contents": {
      "role": "USER",
      "parts": [
        {"fileData": {
          "mimeType": "image/jpg",
          "fileUri": "FILE_NAME"
          }
        },
        {"text": "Convert this photo to black and white, in a cartoonish style."},
      ]

    },
    "generationConfig": {
      "responseModalities": ["TEXT", "IMAGE"],
      "imageConfig": {
        "aspectRatio": "16:9",
      },
    },
    "safetySettings": {
      "method": "PROBABILITY",
      "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
      "threshold": "BLOCK_MEDIUM_AND_ABOVE"
    },
  }' 2>/dev/null >response.json

O Gemini gera uma imagem com base na sua descrição. Este processo demora alguns segundos, mas pode ser comparativamente mais lento consoante a capacidade.

Edição de imagens com várias interações

O Gemini 2.5 Flash Image e o Gemini 3 Pro Image suportam a edição de várias interações melhorada, o que lhe permite responder ao modelo com alterações depois de receber uma resposta de imagem editada. Isto permite-lhe continuar a fazer edições na imagem através de comandos de voz.

Tenha em atenção que recomendamos que limite o tamanho do ficheiro de pedido completo a um máximo de 50 MB.

Para experimentar a edição de imagens com várias interações, experimente os seguintes blocos de notas:

Para ver exemplos de código relacionados com a criação e edição de imagens com várias interações usando o Gemini 3 Pro Image, consulte o exemplo de edição de imagens com várias interações usando assinaturas de reflexão.

IA responsável

Para garantir uma experiência segura e responsável, as capacidades de geração de imagens do Vertex AI estão equipadas com uma abordagem de segurança de várias camadas. Isto destina-se a impedir a criação de conteúdo impróprio, incluindo material sexualmente explícito, perigoso, violento, de incitamento ao ódio ou tóxico.

Todos os utilizadores têm de agir em conformidade com a Política de Utilização Proibida da IA Generativa. Esta política proíbe estritamente a geração de conteúdo que:

  • Esteja relacionado com exploração ou abuso sexual infantil.
  • Facilite o terrorismo ou o extremismo violento.
  • Facilite imagens íntimas não consentidas. Facilite a automutilação.
  • Seja sexualmente explícito.
  • Constitui incitamento ao ódio.
  • Promove assédio ou bullying.

Quando recebe um comando inseguro, o modelo pode recusar-se a gerar uma imagem ou o comando ou a resposta gerada podem ser bloqueados pelos nossos filtros de segurança.

  • Recusa do modelo: se um comando for potencialmente inseguro, o modelo pode recusar o processamento do pedido. Se isto acontecer, o modelo normalmente dá uma resposta de texto a indicar que não consegue gerar imagens inseguras. O FinishReason vai ser STOP.
  • Bloqueio do filtro de segurança:
    • Se o comando for identificado como potencialmente prejudicial por um filtro de segurança, a API devolve BlockedReason em PromptFeedback.
    • Se a resposta for identificada como potencialmente prejudicial por um filtro de segurança, a resposta da API inclui um FinishReason de IMAGE_SAFETY, IMAGE_PROHIBITED_CONTENT ou semelhante.

Categorias de códigos de filtros de segurança

Consoante os filtros de segurança que configurar, a saída pode conter um código de motivo de segurança semelhante ao seguinte:

    {
      "raiFilteredReason": "ERROR_MESSAGE. Support codes: 56562880"
    }

O código indicado corresponde a uma categoria prejudicial específica. Estas associações de códigos a categorias são as seguintes:

Código de erro Categoria de segurança Descrição Conteúdo filtrado: entrada de comando ou saída de imagem
58061214
17301594
Filho Deteta conteúdo infantil onde não é permitido devido às definições de solicitação da API ou à lista de autorizações. input (prompt): 58061214
output (image): 17301594
29310472
15236754
Celebridade Deteta uma representação fotorrealista de uma celebridade na solicitação. input (prompt): 29310472
output (image): 15236754
62263041 Conteúdo perigoso Deteta conteúdo potencialmente perigoso por natureza. entrada (comando)
57734940
22137204
Ódio Deteta tópicos ou conteúdo relacionados com incitamento ao ódio. input (comando): 57734940
output (imagem): 22137204
74803281
29578790
42876398
Outro Deteta outros problemas de segurança diversos com o pedido. input (prompt): 42876398
output (image): 29578790, 74803281
39322892 Pessoas/Cara Deteta uma pessoa ou uma cara quando não é permitido devido às definições de segurança do pedido. output (image)
92201652 Informações pessoais Deteta informações de identificação pessoal (IIP) no texto, como a menção de um número de cartão de crédito, moradas de casa ou outras informações semelhantes. entrada (comando)
89371032
49114662
72817394
Conteúdo proibido Deteta o pedido de conteúdo proibido no pedido. input (prompt): 89371032
output (image): 49114662, 72817394
90789179
63429089
43188360
Sexual Deteta conteúdo de natureza sexual. input (comando): 90789179
output (imagem): 63429089, 43188360
78610348 Tóxico Deteta tópicos ou conteúdo tóxicos no texto. entrada (comando)
61493863
56562880
Violência Deteta conteúdo relacionado com violência na imagem ou no texto. input (prompt): 61493863
output (image): 56562880
32635315 Vulgar Deteta tópicos ou conteúdo vulgar no texto. entrada (comando)
64151117 Celebridade ou criança Deteta representações fotorrealistas de uma celebridade ou de uma criança que violam as políticas de segurança da Google. entrada (comando)
saída (imagem)