A API Gemini oferece suporte à geração de imagens usando o Gemini 2.0 Flash Experimental e o Imagen 3. Este guia ajuda você a começar a usar os dois modelos.
Gerar imagens usando o Gemini
O Gemini 2.0 Flash Experimental oferece suporte à capacidade de gerar texto e imagens inline. Isso permite que você use o Gemini para editar imagens em uma conversa ou gerar saídas com texto entrelaçado (por exemplo, gerar uma postagem de blog com texto e imagens em uma única vez). Todas as imagens geradas incluem uma marca-d'água SynthID, e as imagens no Google AI Studio também incluem uma marca-d'água visível.
O exemplo a seguir mostra como usar o Gemini 2.0 para gerar saída de texto e imagem:
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-exp-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()
import { GoogleGenAI } from "@google/genai";
import * as fs from "node:fs";
async function main() {
const ai = new GoogleGenAI({ apiKey: "GEMINI_API_KEY" });
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-exp-image-generation",
contents: contents,
config: {
responseModalities: ["Text", "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();
curl -s -X POST \
"https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash-exp-image-generation:generateContent?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

Dependendo do comando e do contexto, o Gemini vai gerar conteúdo em diferentes modos (texto para imagem, texto para imagem e texto, etc.). Veja alguns exemplos:
- Texto para imagem
- Exemplo de comando: "Gere uma imagem da Torre Eiffel com fogos de artifício no segundo plano".
- Texto para imagens e texto (intercalado)
- Exemplo de comando: "Gerencie uma receita ilustrada de paella."
- Imagens e texto para imagens e texto (intercalados)
- Exemplo de comando: (com uma imagem de um cômodo mobiliado) "Que outras cores de sofás funcionariam no meu espaço? Você pode atualizar a imagem?"
- Edição de imagens (texto e imagem para imagem)
- Exemplo de instrução: "Edite esta imagem para que ela pareça um desenho animado"
- Exemplo de comando: [imagem de um gato] + [imagem de um travesseiro] + "Crie um ponto cruz do meu gato neste travesseiro".
- Edição de imagens com vários turnos (chat)
- Exemplos de comandos: [faça upload de uma imagem de um carro azul.] "Transforme este carro em um conversível." "Agora mude a cor para amarelo."
Edição de imagens com o Gemini
Para fazer a edição, adicione uma imagem como entrada. O exemplo a seguir demonstra o envio de imagens codificadas em base64. Para várias imagens e payloads maiores, consulte a seção Entrada de imagem.
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-exp-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()
import { GoogleGenAI } from "@google/genai";
import * as fs from "node:fs";
async function main() {
const ai = new GoogleGenAI({ apiKey: "GEMINI_API_KEY" });
// 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-exp-image-generation",
contents: contents,
config: {
responseModalities: ["Text", "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();
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-exp-image-generation:generateContent?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
Limitações
- Para ter o melhor desempenho, use os seguintes idiomas: EN, es-MX, ja-JP, zh-CN, hi-IN.
- A geração de imagens não tem suporte para entradas de áudio ou vídeo.
- A geração de imagens nem sempre aciona:
- O modelo pode gerar apenas texto. Tente pedir as saídas de imagem explicitamente, por exemplo, "gerar uma imagem", "fornecer imagens conforme você avança", "atualizar a imagem".
- O modelo pode parar de gerar no meio do processo. Tente de novo ou use outro comando.
- Ao gerar texto para uma imagem, o Gemini funciona melhor se você gerar primeiro o texto e depois pedir uma imagem com o texto.
Escolher um modelo
Qual modelo você deve usar para gerar imagens? Depende do seu caso de uso.
O Gemini 2.0 é o melhor para produzir imagens relevantes do ponto de vista contextual, combinando texto e imagens, incorporando conhecimento geral e raciocinando sobre imagens. Você pode usá-lo para criar recursos visuais precisos e relevantes para o contexto incorporados em longas sequências de texto. Você também pode editar imagens de forma conversacional, usando linguagem natural, mantendo o contexto durante a conversa.
Se a qualidade da imagem for sua prioridade, o Imagen 3 é a melhor escolha. O Imagen 3 se destaca em fotorrealismo, detalhes artísticos e estilos artísticos específicos, como impressionismo ou anime. O Imagen 3 também é uma boa escolha para tarefas especializadas de edição de imagens, como atualizar planos de fundo de produtos, aumentar o tamanho de imagens e infundir branding e estilo nos recursos visuais. Você pode usar o Imagen 3 para criar logotipos ou outros designs de produtos de marca.
Gerar imagens usando o Imagen 3
A API Gemini oferece acesso ao Imagen 3, o modelo de conversão de texto em imagem de maior qualidade do Google, com vários recursos novos e aprimorados. O Imagen 3 pode fazer o seguinte:
- Gerar imagens com mais detalhes, iluminação mais rica e menos artefatos distrativos do que os modelos anteriores
- Entender comandos escritos em linguagem natural
- Gerar imagens em vários formatos e estilos
- Renderizar texto de maneira mais eficaz do que os modelos anteriores
from google import genai
from google.genai import types
from PIL import Image
from io import BytesIO
client = genai.Client(api_key='GEMINI_API_KEY')
response = client.models.generate_images(
model='imagen-3.0-generate-002',
prompt='Robot holding a red skateboard',
config=types.GenerateImagesConfig(
number_of_images= 4,
)
)
for generated_image in response.generated_images:
image = Image.open(BytesIO(generated_image.image.image_bytes))
image.show()
import { GoogleGenAI } from "@google/genai";
import * as fs from "node:fs";
async function main() {
const ai = new GoogleGenAI({ apiKey: "GEMINI_API_KEY" });
const response = await ai.models.generateImages({
model: 'imagen-3.0-generate-002',
prompt: 'Robot holding a red skateboard',
config: {
numberOfImages: 4,
},
});
let idx = 1;
for (const generatedImage of response.generatedImages) {
let imgBytes = generatedImage.image.imageBytes;
const buffer = Buffer.from(imgBytes, "base64");
fs.writeFileSync(`imagen-${idx}.png`, buffer);
idx++;
}
}
main();
curl -X POST \
"https://generativelanguage.googleapis.com/v1beta/models/imagen-3.0-generate-002:predict?key=GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"instances": [
{
"prompt": "Robot holding a red skateboard"
}
],
"parameters": {
"sampleCount": 4
}
}'

No momento, o Imagen só oferece suporte a comandos em inglês e aos seguintes parâmetros:
Parâmetros do modelo do Imagen
(As convenções de nomenclatura variam de acordo com a linguagem de programação.)
numberOfImages
: o número de imagens a serem geradas, de 1 a 4. O padrão é 4.aspectRatio
: muda a proporção da imagem gerada. Os valores aceitos são"1:1"
,"3:4"
,"4:3"
,"9:16"
e"16:9"
. O padrão é"1:1"
.personGeneration
: permite que o modelo gere imagens de pessoas. Os seguintes valores são aceitos:"DONT_ALLOW"
: bloqueia a geração de imagens de pessoas."ALLOW_ADULT"
: gera imagens de adultos, mas não de crianças. Esse é o padrão.
A seguir
- Para saber mais sobre como escrever solicitações para o Imagen, consulte o guia de solicitações do Imagen.
- Para saber mais sobre os modelos do Gemini 2.0, consulte Modelos do Gemini e Modelos experimentais.