Gemini może generować i przetwarzać obrazy w formie rozmowy. Możesz używać promptów tekstowych, obrazów lub ich kombinacji, aby wykonywać różne zadania związane z obrazami, takie jak generowanie i edytowanie obrazów. Wszystkie wygenerowane obrazy zawierają znak wodny SynthID.
Generowanie obrazów może nie być dostępne we wszystkich regionach i krajach. Więcej informacji znajdziesz na stronie modele Gemini.
Generowanie obrazów (tekst na obraz)
Poniższy kod pokazuje, jak wygenerować obraz na podstawie opisowego prompta. W konfiguracji musisz uwzględnić responseModalities
: ["TEXT", "IMAGE"]
. Te modele nie obsługują danych wyjściowych zawierających tylko obraz.
Python
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();
Przeczytaj
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)
}
}
}
REST
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

Edytowanie obrazów (tekst i obraz na obraz)
Aby edytować obraz, dodaj go jako dane wejściowe. Poniższy przykład pokazuje przesyłanie obrazów zakodowanych w formacie base64. W przypadku wielu obrazów i większych ładunków sprawdź sekcję Dane wejściowe obrazu.
Python
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();
Przeczytaj
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)
}
}
}
REST
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
Inne tryby generowania obrazów
Gemini obsługuje inne tryby interakcji z obrazami w zależności od struktury promptu i kontekstu, w tym:
- Tekst na obraz(y) i tekst (przeplatany): generuje obrazy z powiązanym tekstem.
- Przykładowy prompt: „Wygeneruj ilustrowany przepis na paellę”.
- Obrazy i tekst na obrazy i tekst (przeplatane): wykorzystuje obrazy i tekst wejściowy do tworzenia nowych powiązanych obrazów i tekstu.
- Przykładowy prompt: (z obrazem umeblowanego pokoju) „Jakie inne kolory sof pasowałyby do tego pomieszczenia? Czy możesz zaktualizować obraz?”.
- Wieloetapowe edytowanie obrazów (czat): kontynuuj generowanie i edytowanie obrazów w formie rozmowy.
- Przykładowe prompty: [prześlij zdjęcie niebieskiego samochodu]. „Przekształć ten samochód w kabriolet”. „Teraz zmień kolor na żółty”.
Ograniczenia
- Aby uzyskać najlepsze wyniki, 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 nie zawsze może się uruchamiać:
- Model może generować tylko tekst. Spróbuj wyraźnie poprosić o wygenerowanie obrazów (np. „wygeneruj obraz”, „przesyłaj obrazy na bieżąco”, „zaktualizuj obraz”).
- Model może przestać generować w trakcie procesu. Spróbuj ponownie lub użyj innego prompta.
- Podczas generowania tekstu do obrazu Gemini działa najlepiej, jeśli najpierw wygenerujesz tekst, a potem poprosisz o obraz z tym tekstem.
- W niektórych regionach i krajach generowanie obrazów jest niedostępne. Więcej informacji znajdziesz w sekcji Modele.
Kiedy używać Imagen
Oprócz korzystania z wbudowanych funkcji generowania obrazów w Gemini możesz też uzyskać dostęp do Imagen, naszego specjalistycznego modelu generowania obrazów, za pomocą interfejsu Gemini API.
Wybierz Gemini, gdy:
- Potrzebujesz obrazów dopasowanych do kontekstu, które wykorzystują wiedzę o świecie i rozumowanie.
- Płynne łączenie tekstu i obrazów jest ważne.
- Chcesz umieścić dokładne wizualizacje w długich sekwencjach tekstu.
- Chcesz edytować obrazy w formie rozmowy, zachowując kontekst.
Wybierz Imagen, gdy:
- Najważniejsza jest jakość obrazu, fotorealizm, szczegóły artystyczne lub określone style (np. impresjonizm, anime).
- wykonywanie specjalistycznych zadań edycyjnych, takich jak aktualizowanie tła produktu lub skalowanie obrazu;
- wzbogacanie treści o elementy marki i stylu lub generowanie logo i projektów produktów;
Imagen 4 to model, którego warto używać do generowania obrazów za pomocą Imagen. Wybierz Imagen 4 Ultra do zaawansowanych zastosowań lub gdy potrzebujesz najlepszej jakości obrazu. Pamiętaj, że Imagen 4 Ultra może generować tylko 1 obraz naraz.
Co dalej?
- Zapoznaj się z przewodnikiem po Veo, aby dowiedzieć się, jak generować filmy za pomocą interfejsu Gemini API.
- Więcej informacji o modelach Gemini znajdziesz w artykułach Modele Gemini i Modele eksperymentalne.