Bilder mit Gemini generieren und bearbeiten

Die folgenden Gemini-Modelle unterstützen die Generierung von Bildern zusätzlich zu Text:

  • Gemini 2.5 Flash Image (auch bekannt als Gemini 2.5 Flash mit Nano Banana)

  • Gemini 3 Pro Image (Vorabversion), auch bekannt als Gemini 3 Pro (mit Nano Banana)

Dadurch werden die Funktionen von Gemini um Folgendes erweitert:

  • Bilder iterativ durch Unterhaltungen in natürlicher Sprache generieren, Bilder anpassen und dabei Konsistenz und Kontext beibehalten.
  • Bilder mit hochwertiger Darstellung von langem Text generieren
  • Verschachtelte Text-Bild-Ausgabe generieren Zum Beispiel ein Blogbeitrag mit Text und Bildern in einem einzigen Turn. Bisher war es dazu erforderlich, mehrere Modelle zu kombinieren.
  • Mit Gemini können Sie Bilder generieren, die auf dem Wissen und den Logikfunktionen von Gemini basieren.

Gemini 2.5 Flash Image (gemini-2.5-flash-image) und Gemini 3 Pro Image (Vorabversion) (gemini-3-pro-image-preview) unterstützen die Generierung von Bildern von Personen und enthalten aktualisierte Sicherheitsfilter, die eine flexiblere und weniger restriktive Nutzung ermöglichen. Mit Gemini 2.5 Flash Image können Bilder mit einer Auflösung von 1.024 Pixeln generiert werden. Mit Gemini 3 Pro Image können Bilder mit einer Größe von bis zu 4.096 Pixeln generiert werden.

Beide Modelle unterstützen die folgenden Modalitäten und Funktionen:

  • Text zu Bild

    • Beispiel-Prompt: „Erstelle ein Bild des Eiffelturms mit Feuerwerk im Hintergrund.“
  • Text zu Bild (Textrendering)

    • Beispiel-Prompt: „Erstelle ein kinoreifes Foto eines großen Gebäudes mit dieser riesigen Textprojektion an der Vorderseite des Gebäudes: ‚Gemini 3 kann jetzt Langformtext generieren‘.“
  • Text zu Bild(ern) und Text (verschachtelt)

    • Beispiel-Prompt: „Generiere ein illustriertes Rezept für eine Paella. Erstelle Bilder neben dem Text, während du das Rezept generierst.“
    • Beispiel-Prompt: „Erstelle eine Geschichte über einen Hund im Stil einer 3D-Cartoon-Animation. Generiere für jede Szene ein Bild.“
  • Bild(er) und Text zu Bild(ern) und Text (verschachtelt)

    • Beispiel-Prompt (mit einem Bild eines möblierten Raums): „Welche anderen Sofafarben würden in meinen Raum passen? Kannst du das Bild aktualisieren?“

Best Practices

Mit diesen Best Practices können Sie die Ergebnisse der Bildgenerierung verbessern:

  • Konkret sein:Je mehr Details Sie angeben, desto mehr Kontrolle haben Sie. Anstelle von „Fantasy-Rüstung“ können Sie beispielsweise „aufwendige Elfen-Plattenrüstung mit eingravierten Silberblattmustern, hohem Kragen und Schulterstücken in Form von Falkenflügeln“ eingeben.

  • Kontext und Intention angeben:Erläutern Sie den Zweck des Bildes, damit das Modell den Kontext besser versteht. „Erstelle ein Logo für eine hochwertige, minimalistische Hautpflege-Marke“ ist besser als „Erstelle ein Logo“.

  • Wiederholen und verfeinern:Erwarten Sie nicht, dass Sie beim ersten Versuch ein perfektes Bild erhalten. Verwenden Sie Folgeprompts, um kleine Änderungen vorzunehmen, z. B. „Mach die Beleuchtung wärmer“ oder „Ändere den Gesichtsausdruck der Figur, sodass sie ernster wirkt“.

  • Schritt-für-Schritt-Anleitung verwenden:Bei komplexen Szenen sollten Sie Ihre Anfrage in Schritte unterteilen. Zum Beispiel: „Erstelle zuerst einen Hintergrund mit einem ruhigen, nebligen Wald bei Sonnenaufgang. Fügen Sie dann im Vordergrund einen moosbewachsenen alten Steinaltar hinzu. Stelle schließlich ein einzelnes, leuchtendes Schwert auf den Altar.“

  • Beschreiben Sie, was Sie möchten, nicht, was Sie nicht möchten:Sagen Sie nicht „keine Autos“, sondern beschreiben Sie die Szene positiv, z. B. „eine leere, verlassene Straße ohne Anzeichen von Verkehr“.

  • Kamera steuern:Sie können die Kameraansicht anpassen. Verwenden Sie fotografische und filmische Begriffe, um die Komposition zu beschreiben, z. B. „Weitwinkelaufnahme“, „Makroaufnahme“ oder „Froschperspektive“.

  • Prompts für Bilder:Beschreiben Sie die Absicht mit Formulierungen wie „Erstelle ein Bild von“ oder „Generiere ein Bild von“. Andernfalls antwortet das multimodale Modell möglicherweise mit Text anstelle des Bildes.

  • Gedankensignaturen übergeben:Wenn Sie Gemini 3 Pro Image verwenden, empfehlen wir, Gedankensignaturen bei der Erstellung und Bearbeitung von Bildern in mehreren Schritten an das Modell zurückzugeben. So können Sie den Kontext der Argumentation über mehrere Interaktionen hinweg beibehalten. Codebeispiele für die Multi-Turn-Bildbearbeitung mit Gemini 3 Pro Image finden Sie unter Beispiel für die Multi-Turn-Bildbearbeitung mit Gedanken-Signaturen.

Beschränkungen:

  • Für eine optimale Leistung mit Gemini 2.5 Flash Image empfehlen wir die Verwendung der folgenden Sprachen: EN, es-MX, ja-JP, zh-CN oder hi-IN. Die beste Leistung mit Gemini 3 Pro Image erzielen Sie mit den folgenden Sprachen: 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 und zh-CN.

  • Bei der Bildgenerierung werden keine Audio- oder Videoeingaben unterstützt.

  • Das Modell erstellt möglicherweise nicht genau die Anzahl der Bilder, die Sie anfordern.

  • Für optimale Ergebnisse mit Gemini 2.5 Flash Image sollten Sie maximal drei Bilder in eine Eingabe einfügen. Für optimale Ergebnisse mit Gemini 3 Pro Image sollten Sie maximal 14 Bilder in eine Eingabe einfügen.

  • Wenn Sie ein Bild mit Text generieren, erstellen Sie zuerst den Text und dann ein Bild mit diesem Text.

  • Die Bild- oder Texterstellung funktioniert in den folgenden Situationen möglicherweise nicht wie erwartet:

    • Wenn der Prompt nicht eindeutig ist, generiert das Modell möglicherweise nur Text und kein Bild. Wenn Sie Bilder wünschen, müssen Sie dies in Ihrem Prompt deutlich angeben. Beispiel: „Stelle Bilder zur Verfügung.“

    • Das Modell kann Text als Bild erstellen. Wenn Sie Text generieren möchten, müssen Sie explizit nach einer Textausgabe fragen. Beispiel: „Erstelle einen narrativen Text mit Illustrationen.“

    • Das Modell beendet die Generierung von Inhalten möglicherweise, bevor es fertig ist. Wenn das passiert, versuchen Sie es noch einmal oder verwenden Sie einen anderen Prompt.

    • Wenn ein Prompt potenziell unsicher ist, verarbeitet das Modell die Anfrage möglicherweise nicht und gibt eine Antwort zurück, die darauf hinweist, dass es keine unsicheren Bilder erstellen kann. In diesem Fall ist FinishReason STOP.

Bilder erstellen

In den folgenden Abschnitten wird beschrieben, wie Sie Bilder mit Vertex AI Studio oder der API generieren.

Anleitungen und Best Practices für Prompts finden Sie unter Multimodale Prompts entwerfen.

Console

So verwenden Sie die Bildgenerierung:

  1. Öffnen Sie Vertex AI Studio > Prompt erstellen.
  2. Klicken Sie auf Modell wechseln und wählen Sie eines der folgenden Modelle aus dem Menü aus:
    • gemini-2.5-flash-image
    • gemini-3-pro-image-preview
  3. Wählen Sie im Bereich Ausgaben im Drop-down-Menü die Option Bild und Text aus.
  4. Geben Sie im Textbereich Prompt schreiben eine Beschreibung des Bildes ein, das Sie generieren möchten.
  5. Klicken Sie auf die Schaltfläche Prompt ().

Gemini generiert ein Bild basierend auf Ihrer Beschreibung. Dieser Vorgang dauert einige Sekunden, kann aber je nach Kapazität vergleichsweise langsam sein.

Python

Installieren

pip install --upgrade google-genai

Weitere Informationen finden Sie in der SDK-Referenzdokumentation.

Umgebungsvariablen für die Verwendung des Gen AI SDK mit Vertex AI festlegen:

# 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

Installieren

npm install @google/genai

Weitere Informationen finden Sie in der SDK-Referenzdokumentation.

Umgebungsvariablen für die Verwendung des Gen AI SDK mit Vertex AI festlegen:

# 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

Informationen zum Installieren oder Aktualisieren von Java

Weitere Informationen finden Sie in der SDK-Referenzdokumentation.

Umgebungsvariablen für die Verwendung des Gen AI SDK mit Vertex AI festlegen:

# 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

Führen Sie den folgenden Befehl im Terminal aus, um diese Datei im aktuellen Verzeichnis zu erstellen oder zu überschreiben:

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

Gemini generiert ein Bild basierend auf Ihrer Beschreibung. Dieser Vorgang dauert einige Sekunden, kann aber je nach Kapazität vergleichsweise langsam sein.

Verschachtelte Bilder und Texte erstellen

Gemini 2.5 Flash Image kann in seine Textantworten Bilder einfügen. So können Sie beispielsweise Bilder davon generieren lassen, wie die einzelnen Schritte eines generierten Rezepts aussehen könnten, ohne dass Sie dafür separate Anfragen an das Modell stellen müssen.

Console

So erstellen Sie verschachtelte Bilder mit Textantworten:

  1. Öffnen Sie Vertex AI Studio > Prompt erstellen.
  2. Klicken Sie auf Modell wechseln und wählen Sie eines der folgenden Modelle aus dem Menü aus:
    • gemini-2.5-flash-image
    • gemini-3-pro-image-preview
  3. Wählen Sie im Bereich Ausgaben im Drop-down-Menü die Option Bild und Text aus.
  4. Geben Sie im Textbereich Prompt schreiben eine Beschreibung des Bildes ein, das Sie generieren möchten. Beispiel: „Erstelle eine Anleitung, in der erklärt wird, wie man in drei einfachen Schritten ein Erdnussbutter- und Marmeladenbrot zubereitet. Gib für jeden Schritt einen Titel mit der Nummer des Schritts und eine Erklärung an und generiere auch ein Bild. Generiere jedes Bild im Seitenverhältnis 1:1.“
  5. Klicken Sie auf die Schaltfläche Prompt ().

Gemini generiert eine Antwort basierend auf Ihrer Beschreibung. Dieser Vorgang dauert einige Sekunden, kann aber je nach Kapazität vergleichsweise langsam sein.

Python

Installieren

pip install --upgrade google-genai

Weitere Informationen finden Sie in der SDK-Referenzdokumentation.

Umgebungsvariablen für die Verwendung des Gen AI SDK mit Vertex AI festlegen:

# 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

Informationen zum Installieren oder Aktualisieren von Java

Weitere Informationen finden Sie in der SDK-Referenzdokumentation.

Umgebungsvariablen für die Verwendung des Gen AI SDK mit Vertex AI festlegen:

# 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

Führen Sie den folgenden Befehl im Terminal aus, um diese Datei im aktuellen Verzeichnis zu erstellen oder zu überschreiben:

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

Gemini generiert ein Bild basierend auf Ihrer Beschreibung. Dieser Vorgang dauert einige Sekunden, kann aber je nach Kapazität vergleichsweise langsam sein.

Bilder bearbeiten

Gemini 2.5 Flash Image für die Bildgenerierung (gemini-2.5-flash-image) unterstützt die Bearbeitung von Bildern zusätzlich zur Generierung. Gemini 2.5 Flash Image unterstützt die verbesserte Bearbeitung von Bildern und die Bearbeitung in mehreren Schritten. Außerdem enthält es aktualisierte Sicherheitsfilter, die eine flexiblere und weniger restriktive Nutzung ermöglichen.

Er unterstützt die folgenden Modalitäten und Funktionen:

  • Bildbearbeitung (Text-zu-Bild und Bild-zu-Bild)

    • Beispiel-Prompt: „Bearbeite dieses Bild so, dass es wie ein Cartoon aussieht.“
    • Beispiel-Prompt: [Bild einer Katze] + [Bild eines Kissens] + „Erstelle ein Kreuzstichmuster meiner Katze auf diesem Kissen.“
  • Multi-Turn-Bildbearbeitung (Chat)

    • Beispiel-Prompts: [Lade ein Bild eines blauen Autos hoch.] „Mach aus diesem Auto ein Cabrio.“

      • [Das Modell gibt ein Bild eines Cabrios in derselben Szene zurück] „Ändere die Farbe jetzt in Gelb.“
      • [Das Modell gibt ein Bild mit einem gelben Cabrio zurück] „Füge einen Spoiler hinzu.“
      • [Das Modell gibt ein Bild des Cabrios mit einem Spoiler zurück.]

Bild bearbeiten

Console

So bearbeiten Sie Bilder:

  1. Öffnen Sie Vertex AI Studio > Prompt erstellen.
  2. Klicken Sie auf Modell wechseln und wählen Sie eines der folgenden Modelle aus dem Menü aus:
    • gemini-2.5-flash-image
    • gemini-3-pro-image-preview
  3. Wählen Sie im Bereich Ausgaben im Drop-down-Menü die Option Bild und Text aus.
  4. Klicken Sie auf Medien einfügen () und wählen Sie eine Quelle aus dem Menü aus. Folgen Sie dann der Anleitung im Dialogfeld.
  5. Geben Sie im Textbereich Prompt schreiben ein, welche Änderungen Sie am Bild vornehmen möchten.
  6. Klicken Sie auf die Schaltfläche Prompt ().

Gemini generiert anhand Ihrer Beschreibung eine bearbeitete Version des bereitgestellten Bildes. Dieser Vorgang dauert einige Sekunden, kann aber je nach Kapazität vergleichsweise langsam sein.

Python

Installieren

pip install --upgrade google-genai

Weitere Informationen finden Sie in der SDK-Referenzdokumentation.

Umgebungsvariablen für die Verwendung des Gen AI SDK mit Vertex AI festlegen:

# 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

Informationen zum Installieren oder Aktualisieren von Java

Weitere Informationen finden Sie in der SDK-Referenzdokumentation.

Umgebungsvariablen für die Verwendung des Gen AI SDK mit Vertex AI festlegen:

# 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

Führen Sie den folgenden Befehl im Terminal aus, um diese Datei im aktuellen Verzeichnis zu erstellen oder zu überschreiben:

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

Gemini generiert ein Bild basierend auf Ihrer Beschreibung. Dieser Vorgang dauert einige Sekunden, kann aber je nach Kapazität vergleichsweise langsam sein.

Multi-Turn-Bildbearbeitung

Gemini 2.5 Flash Image und Gemini 3 Pro Image unterstützen eine verbesserte Multi-Turn-Bearbeitung. Sie können also auf die Antwort des Modells mit Änderungen reagieren, nachdem Sie ein bearbeitetes Bild erhalten haben. So können Sie das Bild weiterhin im Chat bearbeiten.

Die Gesamtgröße der Anfragedatei sollte maximal 50 MB betragen.

Wenn Sie die Bildbearbeitung in mehreren Schritten ausprobieren möchten, können Sie die folgenden Notebooks verwenden:

Codebeispiele für die Multi-Turn-Bildbearbeitung mit Gemini 3 Pro Image finden Sie unter Beispiel für die Multi-Turn-Bildbearbeitung mit Gedanken-Signaturen.

Verantwortungsbewusste Anwendung von KI

Um eine sichere und verantwortungsbewusste Nutzung zu gewährleisten, sind die Funktionen zur Bilderstellung von Vertex AI mit einem mehrschichtigen Sicherheitskonzept ausgestattet. So soll die Erstellung unangemessener Inhalte verhindert werden, darunter sexuell explizite, gefährliche, gewalttätige, hasserfüllte oder schädliche Inhalte.

Alle Nutzer müssen die Richtlinie zur unzulässigen Nutzung von generativer KI einhalten. Gemäß dieser Richtlinie ist es streng verboten, Inhalte zu generieren, die:

  • Inhalte, die mit sexuellem Missbrauch oder Ausbeutung von Kindern in Zusammenhang stehen.
  • Inhalte, die gewalttätigen Extremismus oder Terrorismus ermöglichen.
  • Inhalte, die nicht einvernehmlich aufgenommene oder veröffentlichte intime Bilder ermöglichen. Inhalte, die selbstverletzendes Verhalten ermöglichen.
  • Sexuell explizite Inhalte.
  • Hassrede darstellen.
  • Inhalte, die Belästigung oder Mobbing fördern.

Wenn das Modell einen unsicheren Prompt erhält, kann es sich weigern, ein Bild zu generieren. Der Prompt oder die generierte Antwort kann auch von unseren Sicherheitsfiltern blockiert werden.

  • Modell lehnt ab: Wenn ein Prompt potenziell unsicher ist, kann das Modell die Verarbeitung der Anfrage ablehnen. In diesem Fall gibt das Modell in der Regel eine Textantwort aus, in der es heißt, dass es keine unsicheren Bilder generieren kann. Der FinishReason wird STOP sein.
  • Blockierung durch Sicherheitsfilter:
    • Wenn der Prompt von einem Sicherheitsfilter als potenziell schädlich eingestuft wird, gibt die API BlockedReason in PromptFeedback zurück.
    • Wenn die Antwort von einem Sicherheitsfilter als potenziell schädlich eingestuft wird, enthält die API-Antwort einen FinishReason von IMAGE_SAFETY, IMAGE_PROHIBITED_CONTENT oder Ähnlichem.

Kategorien von Sicherheitsfiltercodes

Je nachdem, welche Sicherheitsfilter Sie konfigurieren, kann Ihre Ausgabe einen Sicherheitsgrundcode wie den folgenden enthalten:

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

Der angegebene Code entspricht einer bestimmten schädlichen Kategorie. Die Zuordnungen von Codes zu Kategorien sind:

Fehlercode Sicherheitskategorie Beschreibung Gefilterte Inhalte: Prompt-Eingabe oder Bildausgabe
58061214
17301594
Untergeordnet Er erkennt Inhalte für Kinder, die aufgrund der API-Anfrageeinstellungen oder der Zulassungsliste nicht zulässig sind. Eingabe (Prompt): 58061214
Ausgabe (Bild): 17301594
29310472
15236754
Celebrity Erkennt eine fotorealistische Darstellung einer berühmten Person in der Anfrage. Eingabe (Prompt): 29310472
Ausgabe (Bild): 15236754
62263041 Gefährliche Inhalte Erkennt potenziell gefährliche Inhalte. Eingabe (Prompt)
57734940
22137204
Hass Erkennt hasserfüllte Themen oder Inhalte. Eingabe (Prompt): 57734940
Ausgabe (Bild): 22137204
74803281
29578790
42876398
Sonstiges Erkennt andere verschiedene Sicherheitsprobleme mit der Anfrage. Eingabe (Prompt): 42876398
Ausgabe (Bild): 29578790, 74803281
39322892 Personen/Gesicht Erkennt eine Person oder ein Gesicht, wenn dies aufgrund der Sicherheitseinstellungen für Anfragen nicht zugelassen ist. Ausgabe (Bild)
92201652 Personenbezogene Daten Erkennt personenidentifizierbare Informationen im Text, z. B. die Erwähnung einer Kreditkartennummer, Privatadressen oder anderer solcher Informationen. Eingabe (Prompt)
89371032
49114662
72817394
Unzulässige Inhalte Erkennt die Anfrage unzulässiger Inhalte in der Anfrage. Eingabe (Prompt): 89371032
Ausgabe (Bild): 49114662, 72817394
90789179
63429089
43188360
Sexuelle Inhalte Er erkennt Inhalte sexueller Natur. Eingabe (Prompt): 90789179
Ausgabe (Bild): 63429089, 43188360
78610348 Schädlich Erkennt schädliche Themen oder Inhalte im Text. Eingabe (Prompt)
61493863
56562880
Gewalt Erkennt gewaltverherrlichende Inhalte in Bildern oder Text. Eingabe (Prompt): 61493863
Ausgabe (Bild): 56562880
32635315 Ordinär Erkennt vulgäre Themen oder Inhalte aus dem Text. Eingabe (Prompt)
64151117 Prominente oder Kinder Erkennt fotorealistische Darstellungen von Prominenten oder Kindern, die gegen die Sicherheitsrichtlinien von Google verstoßen. Eingabe (Prompt)
Ausgabe (Bild)