Interfejs Gemini API obsługuje generowanie obrazów za pomocą Gemini 2.0 Flash Experimental i Imagen 3. Z tego przewodnika dowiesz się, jak zacząć korzystać z obu modeli.
Generowanie obrazów za pomocą Gemini
Gemini 2.0 Flash Experimental obsługuje generowanie tekstu i obrazów wstawianych. Dzięki temu możesz używać Gemini do konwersacyjnego edytowania obrazów lub generowania wyników z przeplatanym tekstem (np. do generowania wpisu na blogu z tekstem i obrazami w jednym obrocie). Wszystkie wygenerowane obrazy zawierają znak wodny SynthID, a obrazy w Google AI Studio – także widoczny znak wodny.
Ten przykład pokazuje, jak za pomocą Gemini 2.0 wygenerować dane wyjściowe zawierające tekst i obraz:
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

W zależności od promptu i kontekstu Gemini będzie generować treści w różnych trybach (tekst na obraz, tekst na obraz i tekst itp.). Oto przykłady:
- Tekst na obrazie
- Przykładowy prompt: „Wygeneruj obraz wieży Eiffla z fajerwerkami w tle”.
- Tekst na obraz(obrazy) i tekst (przeplatany)
- Przykładowy prompt: „Wygeneruj ilustrowany przepis na paellę”.
- Obrazy i tekst na obrazy i tekst (przeplatane)
- Przykład promptu: (z obrazem umeblowanego pokoju) „Jakie inne kolory sof pasowałyby do mojego pokoju? Czy możesz zaktualizować obraz?”
- Edytowanie obrazu (tekst i obraz na obraz)
- Przykładowy prompt: „Edytuj to zdjęcie, aby wyglądało jak rysunek”
- Przykładowy prompt: [obraz kota] + [obraz poduszki] + „Wyhaftuj ściegiem krzyżykowym mojego kota na tej poduszce”.
- Edytowanie obrazu w wielu krokach (czat)
- Przykładowe prompty: [prześlij zdjęcie niebieskiego samochodu]. „Zamień ten samochód na kabriolet”. „Zamień teraz kolor na żółty”.
Edytowanie obrazów za pomocą Gemini
Aby edytować obraz, dodaj obraz jako dane wejściowe. W tym przykładzie pokazano przesyłanie obrazów zakodowanych w formacie Base64. W przypadku większej liczby obrazów i większych zasobów danych zapoznaj się z sekcją przekazywanie obrazów.
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
Ograniczenia
- Aby zapewnić najlepszą skuteczność, używaj tych języków: EN, es-MX, ja-JP, zh-CN, hi-IN.
- Generowanie obrazów nie obsługuje danych wejściowych audio ani wideo.
- Generowanie obrazów może nie zostać uruchomione, jeśli:
- Model może generować tylko tekst. Spróbuj wyraźnie poprosić o wygenerowanie obrazu (np. „wygeneruj obraz”, „prześlij obrazy”, „zaktualizuj obraz”).
- Model może przestać generować dane w połowie procesu. Spróbuj ponownie lub użyj innego prompta.
- Podczas generowania tekstu na potrzeby obrazu najlepiej jest najpierw wygenerować tekst, a potem poprosić o obraz z tekstem.
Wybierz model
Którego modelu użyć do generowania obrazów? To zależy od przypadku użycia.
Gemini 2.0 najlepiej nadaje się do tworzenia obrazów kontekstowych, łączenia tekstu i obrazów, uwzględniania wiedzy o świecie oraz wnioskowania na podstawie obrazów. Możesz go używać do tworzenia dokładnych, kontekstowo trafnych wizualizacji w długich sekwencjach tekstowych. Możesz też edytować obrazy w ramach konwersacji, używając języka naturalnego i utrzymywając kontekst podczas rozmowy.
Jeśli jakość obrazu jest dla Ciebie najważniejsza, wybierz model Imagen 3. Imagen 3 świetnie radzi sobie z realizmem fotograficznym, szczegółami artystycznymi i konkretnymi stylami artystycznymi, takimi jak impresjonizm czy anime. Imagen 3 to też dobry wybór do specjalistycznych zadań związanych z edycją obrazów, takich jak aktualizowanie tła produktów, skalowanie obrazów i dodawanie elementów marki oraz stylu do wizualizacji. Za pomocą Imagen 3 możesz tworzyć logo oraz inne projekty produktów z logo.
Generowanie obrazów za pomocą Imagen 3
Interfejs Gemini API zapewnia dostęp do Imagen 3, najwyższej jakości modelu Google do zamiany tekstu na obraz, który oferuje wiele nowych i ulepszonych funkcji. Urządzenie Imagen 3 umożliwia:
- generować obrazy o większej szczegółowości, bogatszym oświetleniu i mniejszej liczbie rozpraszających artefaktów niż w przypadku poprzednich modeli.
- Rozumienie promptów w języku naturalnym
- generować obrazy w wielu formatach i stylach;
- Renderowanie tekstu jest bardziej efektywne niż w przypadku poprzednich modeli.
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
}
}'

Obecnie Imagen obsługuje tylko prompty w języku angielskim i te parametry:
Parametry modelu Imagen
(konwencje nazewnictwa różnią się w zależności od języka programowania).
numberOfImages
: liczba obrazów do wygenerowania, od 1 do 4 (włącznie). Wartość domyślna to 4.aspectRatio
: zmienia format obrazu wygenerowanego przez AI. Obsługiwane wartości to"1:1"
,"3:4"
,"4:3"
,"9:16"
i"16:9"
. Wartość domyślna to"1:1"
.personGeneration
: zezwalaj modelowi na generowanie obrazów przedstawiających ludzi. Obsługiwane wartości:"DONT_ALLOW"
: blokowanie generowania obrazów przedstawiających ludzi."ALLOW_ADULT"
: generowanie obrazów przedstawiających dorosłych, ale nie dzieci. To jest ustawienie domyślne.
Co dalej?
- Więcej informacji o tworzeniu promptów dla Imagen znajdziesz w przewodniku po promptach w Imagen.
- Więcej informacji o modelach Gemini 2.0 znajdziesz w artykułach Modele Gemini i Modele eksperymentalne.