Bilder erstellen

Die Gemini API unterstützt die Bildgenerierung mit Gemini 2.0 Flash Experimental und Imagen 3. Dieser Leitfaden hilft Ihnen beim Einstieg in beide Modelle.

Bilder mit Gemini generieren

Gemini 2.0 Flash Experimental unterstützt die Ausgabe von Text und Inline-Bildern. So können Sie mit Gemini Bilder in einer Unterhaltung bearbeiten oder mit eingewobenem Text generieren, z. B. einen Blogpost mit Text und Bildern in einer einzigen Antwort. Alle generierten Bilder enthalten ein SynthID-Wasserzeichen. Bilder in Google AI Studio sind außerdem mit einem sichtbaren Wasserzeichen versehen.

Im folgenden Beispiel wird gezeigt, wie Sie mit Gemini 2.0 Text- und Bildausgabe generieren:

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()
const { GoogleGenerativeAI } = require("@google/generative-ai");
const fs = require("fs");

const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY);

async function generateImage() {
  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 model = genAI.getGenerativeModel({
    model: "gemini-2.0-flash-exp-image-generation",
    generationConfig: {
        responseModalities: ['Text', 'Image']
    },
  });

  try {
    const response = await model.generateContent(contents);
    for (const part of  response.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');
      }
    }
  } catch (error) {
    console.error("Error generating content:", error);
  }
}

generateImage();
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
KI-generiertes Bild eines fantastischen fliegenden Schweins
KI-generiertes Bild eines fantastischen fliegenden Schweins

Je nach Prompt und Kontext generiert Gemini Inhalte in verschiedenen Modi (Text zu Bild, Text zu Bild und Text usw.). Hier einige Beispiele:

  • Text zu Bild
    • Beispiel: „Generiere ein Bild des Eiffelturms mit Feuerwerk im Hintergrund.“
  • Text in Bilder und Text (interleaved)
    • Beispiel für einen Prompt: „Generiere ein illustriertes Rezept für eine Paella.“
  • Bilder und Text in Bilder und Text (interleaved)
    • Beispiel für einen Prompt: (Mit einem Bild eines möblierten Raums) „Welche Sofas in einer anderen Farbe würden in meinem Raum passen? Können Sie das Bild aktualisieren?“
  • Bildbearbeitung (Text und Bild zu Bild)
    • Beispiel für einen Prompt: „Bearbeiten Sie dieses Bild so, dass es wie ein Cartoon aussieht.“
    • Beispiel für einen Prompt: [Bild einer Katze] + [Bild eines Kissens] + „Erstelle ein Kreuzstichbild meiner Katze auf diesem Kissen.“
  • Bildbearbeitung mit mehreren Antworten (Chat)
    • Beispiele für Prompts: [Lade ein Bild eines blauen Autos hoch.] „Machen Sie dieses Auto zu einem Cabrio.“ „Ändern Sie jetzt die Farbe in Gelb.“

Bildbearbeitung mit Gemini

Wenn Sie ein Bild bearbeiten möchten, fügen Sie es als Eingabe hinzu. Im folgenden Beispiel wird das Hochladen base64-codierter Bilder veranschaulicht. Informationen zu mehreren Bildern und größeren Nutzlasten finden Sie im Abschnitt Bildeingabe.

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()
const { GoogleGenerativeAI } = require("@google/generative-ai");
const fs = require("fs");

const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY);

async function generateImage() {
    // 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: "Hi, This is a picture of me. Can you add a llama next to me?" },
        {
          inlineData: {
            mimeType: 'image/png',
            data: base64Image
          }
        }
      ];

  // Set responseModalities to include "Image" so the model can generate an image
  const model = genAI.getGenerativeModel({
    model: "gemini-2.0-flash-exp-image-generation",
    generationConfig: {
        responseModalities: ['Text', 'Image']
    },
  });

  try {
    const response = await model.generateContent(contents);
    for (const part of  response.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');
      }
    }
  } catch (error) {
    console.error("Error generating content:", error);
  }
}

generateImage();
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

Beschränkungen

  • Die beste Leistung erzielen Sie mit den folgenden Sprachen: DE, es-MX, ja-JP, zh-CN, hi-IN.
  • Für die Bildgenerierung werden keine Audio- oder Videoeingaben unterstützt.
  • Die Bildgenerierung wird möglicherweise nicht immer ausgelöst:
    • Das Modell gibt möglicherweise nur Text aus. Fordern Sie explizit Bildausgaben an (z.B. „Bild generieren“, „Bilder nach und nach bereitstellen“, „Bild aktualisieren“).
    • Möglicherweise wird die Generierung durch das Modell vorzeitig beendet. Versuchen Sie es noch einmal oder verwenden Sie einen anderen Prompt.
  • Wenn Sie Text für ein Bild generieren, funktioniert Gemini am besten, wenn Sie zuerst den Text generieren und dann ein Bild mit dem Text anfordern.

Modell auswählen

Welches Modell sollten Sie zum Generieren von Bildern verwenden? Das hängt von Ihrem Anwendungsfall ab.

Gemini 2.0 eignet sich am besten für die Erstellung kontextbezogener Bilder, das Zusammenführen von Text und Bildern, die Einbeziehung von Weltwissen und die Argumentation über Bilder. So lassen sich präzise, kontextbezogene Visuals erstellen, die in lange Textfolgen eingebettet sind. Sie können Bilder auch in einer Unterhaltung bearbeiten, indem Sie natürliche Sprache verwenden und den Kontext während der Unterhaltung beibehalten.

Wenn die Bildqualität für Sie an erster Stelle steht, ist Imagen 3 die bessere Wahl. Imagen 3 eignet sich besonders für Fotorealismus, künstlerische Details und bestimmte künstlerische Stile wie Impressionismus oder Anime. Imagen 3 eignet sich auch für spezielle Bildbearbeitungsaufgaben wie das Aktualisieren von Produkthintergründen, das Hochskalieren von Bildern und das Einfügen von Branding und Stil in visuelle Elemente. Mit Imagen 3 können Sie Logos oder andere Produktdesigns mit Markenbezug erstellen.

Bilder mit Imagen 3 generieren

Die Gemini API bietet Zugriff auf Imagen 3, das bisher beste Text-zu-Bild-Modell von Google mit einer Reihe neuer und verbesserter Funktionen. Imagen 3 bietet folgende Funktionen:

  • Bilder mit besseren Details, satterer Beleuchtung und weniger störenden Artefakten als bei früheren Modellen
  • Prompts in natürlicher Sprache verstehen
  • Bilder in einer Vielzahl von Formaten und Stilen erstellen
  • Text effizienter als bei früheren Modellen rendern
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='Fuzzy bunnies in my kitchen',
    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()
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": "Fuzzy bunnies in my kitchen"
          }
        ],
        "parameters": {
          "sampleCount": 4
        }
      }'
KI-generiertes Bild von zwei flauschigen Hasen in der Küche
KI-generiertes Bild von zwei flauschigen Kaninchen in der Küche

Derzeit werden von Imagen nur Prompts auf Englisch und die folgenden Parameter unterstützt:

Parameter des Imagen-Modells

  • number_of_images: Die Anzahl der zu generierenden Bilder (1 bis 4). Der Standardwert ist 4.
  • aspect_ratio: Ändert das Seitenverhältnis des generierten Bildes. Unterstützte Werte sind "1:1", "3:4", "4:3", "9:16" und "16:9". Der Standardwert ist "1:1".
  • person_generation: Dem Modell erlauben, Bilder von Personen zu generieren. Folgende Werte werden unterstützt:
    • "DONT_ALLOW": Generierung von Bildern von Personen blockieren.
    • "ALLOW_ADULT": Bilder von Erwachsenen, aber nicht von Kindern generieren. Das ist die Standardeinstellung.

Nächste Schritte