Generare e modificare immagini con Gemini

I seguenti modelli Gemini supportano la possibilità di generare immagini oltre al testo:

  • Gemini 2.5 Flash Image, noto anche come Gemini 2.5 Flash (con Nano Banana)

  • Gemini 3 Pro Image (anteprima), altrimenti noto come Gemini 3 Pro (con Nano Banana)

In questo modo, le funzionalità di Gemini vengono ampliate per includere:

  • Genera immagini in modo iterativo tramite conversazioni in linguaggio naturale, modificando le immagini mantenendo coerenza e contesto.
  • Genera immagini con rendering di testo lungo di alta qualità.
  • Genera output di testo e immagini interleaving. Ad esempio, un post del blog con testo e immagini in un unico turno. In precedenza, ciò richiedeva di concatenare più modelli.
  • Genera immagini utilizzando le capacità di ragionamento e la conoscenza del mondo di Gemini.

Gemini 2.5 Flash Image (gemini-2.5-flash-image) e anteprima di Gemini 3 Pro Image (gemini-3-pro-image-preview) supportano la generazione di immagini di persone e contengono filtri di sicurezza aggiornati che offrono un'esperienza utente più flessibile e meno restrittiva. Gemini 2.5 Flash Image può generare immagini a 1024 px. Gemini 3 Pro Image può generare immagini fino a 4096 px.

Entrambi i modelli supportano le seguenti modalità e funzionalità:

  • Da testo a immagine

    • Prompt di esempio: "Genera un'immagine della Torre Eiffel con fuochi d'artificio sullo sfondo".
  • Da testo a immagine (rendering del testo)

    • Esempio di prompt: "genera una foto cinematografica di un grande edificio con questa proiezione di testo gigante mappata sulla parte anteriore dell'edificio: "Gemini 3 ora può generare testo in formato lungo""
  • Da testo a immagine/i e testo (interleaving)

    • Prompt di esempio: "Genera una ricetta illustrata per una paella. Crea immagini insieme al testo mentre generi la ricetta."
    • Prompt di esempio: "Genera una storia su un cane in stile di animazione di cartoni animati 3D. Per ogni scena, genera un'immagine"
  • Immagine/i e testo in immagine/i e testo (interleaving)

    • Prompt di esempio: (con l'immagine di una stanza arredata) "Quali altri colori di divani si abbinerebbero al mio spazio? Puoi aggiornare l'immagine?"

Best practice

Per migliorare i risultati della generazione di immagini, segui queste best practice:

  • Fornisci dettagli specifici:più dettagli fornisci, maggiore sarà il controllo. Ad esempio, invece di "armatura fantasy", prova "armatura a piastre elfica riccamente decorata, incisa con motivi a foglia d'argento, con un colletto alto e spallacci a forma di ali di falco".

  • Fornisci contesto e intenzione: spiega lo scopo dell'immagine per aiutare il modello a comprendere il contesto. Ad esempio, "Crea un logo per un brand di prodotti per la cura della pelle di fascia alta e minimalista" funziona meglio di "Crea un logo".

  • Esegui l'iterazione e perfeziona:non aspettarti un'immagine perfetta al primo tentativo. Utilizza prompt di follow-up per apportare piccole modifiche, ad esempio "Rendi l'illuminazione più calda" o "Rendi l'espressione del personaggio più seria".

  • Utilizza istruzioni passo passo: per le scene complesse, dividi la richiesta in passaggi. Ad esempio, "Per prima cosa, crea uno sfondo di una foresta serena e nebbiosa all'alba. Poi, in primo piano, aggiungi un antico altare in pietra ricoperto di muschio. Infine, posiziona una spada singola e luminosa sopra l'altare".

  • Descrivi ciò che vuoi, non ciò che non vuoi:invece di dire "nessuna auto", descrivi la scena in modo positivo dicendo "una strada vuota e deserta senza segni di traffico".

  • Controllare la videocamera:guida la visuale della videocamera. Utilizza termini fotografici e cinematografici per descrivere la composizione, ad esempio "inquadratura grandangolare", "macro" o "prospettiva dal basso".

  • Prompt per le immagini:descrivi l'intento utilizzando frasi come "crea un'immagine di" o "genera un'immagine di". In caso contrario, il modello multimodale potrebbe rispondere con testo anziché con l'immagine.

  • Passaggio delle signature del pensiero: Quando utilizzi Gemini 3 Pro Image, ti consigliamo di passare le signature del pensiero al modello durante la creazione e la modifica di immagini in più turni. In questo modo puoi preservare il contesto del ragionamento tra le interazioni. Per esempi di codice relativi alla modifica di immagini in più passaggi utilizzando Gemini 3 Pro Image, vedi Esempio di modifica di immagini in più passaggi utilizzando le firme di pensiero.

Limitazioni:

  • Per ottenere prestazioni ottimali con Gemini 2.5 Flash Image, utilizza le seguenti lingue: EN, es-MX, ja-JP, zh-CN o hi-IN. Per ottenere le migliori prestazioni con Gemini 3 Pro Image, utilizza le seguenti lingue: 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, e zh-CN

  • La generazione di immagini non supporta input audio o video.

  • Il modello potrebbe non creare il numero esatto di immagini che hai richiesto.

  • Per risultati ottimali con Gemini 2.5 Flash Image, includi un massimo di tre immagini in un input. Per ottenere risultati ottimali con Gemini 3 Pro Image, includi un massimo di 14 immagini in un input.

  • Quando generi un'immagine contenente testo, prima genera il testo e poi genera un'immagine con quel testo.

  • La generazione di immagini o testo potrebbe non funzionare come previsto nelle seguenti situazioni:

    • Il modello potrebbe creare solo testo e nessuna immagine se il prompt è ambiguo. Se vuoi immagini, chiedile chiaramente nella tua richiesta. Ad esempio, "fornisci immagini man mano che procedi".

    • Il modello potrebbe creare testo come immagine. Per generare testo, chiedi specificamente un output di testo. Ad esempio, "genera un testo narrativo insieme alle illustrazioni".

    • Il modello potrebbe interrompere la generazione di contenuti anche se non è terminata. Se si verifica questo problema, riprova o utilizza un prompt diverso.

    • Se un prompt è potenzialmente non sicuro, il modello potrebbe non elaborare la richiesta e restituisce una risposta che indica che non può creare immagini non sicure. In questo caso, FinishReason è STOP.

Genera immagini

Le sezioni seguenti descrivono come generare immagini utilizzando Vertex AI Studio o l'API.

Per indicazioni e best practice per i prompt, consulta Progettare prompt multimodali.

Console

Per utilizzare la generazione di immagini:

  1. Apri Vertex AI Studio > Crea prompt.
  2. Fai clic su Cambia modello e seleziona uno dei seguenti modelli dal menu:
    • gemini-2.5-flash-image
    • gemini-3-pro-image-preview
  3. Nel riquadro Output, seleziona Immagine e testo dal menu a discesa.
  4. Scrivi una descrizione dell'immagine che vuoi generare nell'area di testo dell'area di testo Scrivi un prompt.
  5. Fai clic sul pulsante Prompt ().

Gemini genererà un'immagine in base alla tua descrizione. Questa operazione richiede alcuni secondi, ma può essere relativamente più lenta a seconda della capacità.

Python

Installa

pip install --upgrade google-genai

Per saperne di più, consulta la documentazione di riferimento dell'SDK.

Imposta le variabili di ambiente per utilizzare l'SDK Gen AI con Vertex AI:

# 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

Installa

npm install @google/genai

Per saperne di più, consulta la documentazione di riferimento dell'SDK.

Imposta le variabili di ambiente per utilizzare l'SDK Gen AI con Vertex AI:

# 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

Scopri come installare o aggiornare Java.

Per saperne di più, consulta la documentazione di riferimento dell'SDK.

Imposta le variabili di ambiente per utilizzare l'SDK Gen AI con Vertex AI:

# 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

Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory corrente:

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 genererà un'immagine in base alla tua descrizione. Questa operazione richiede alcuni secondi, ma può essere relativamente più lenta a seconda della capacità.

Genera testo e immagini interleaving

Gemini 2.5 Flash Image può generare immagini alternate con le sue risposte di testo. Ad esempio, puoi generare immagini di come potrebbe apparire ogni passaggio di una ricetta generata per accompagnare il testo del passaggio, senza dover fare richieste separate al modello.

Console

Per generare immagini interleaving con risposte di testo:

  1. Apri Vertex AI Studio > Crea prompt.
  2. Fai clic su Cambia modello e seleziona uno dei seguenti modelli dal menu:
    • gemini-2.5-flash-image
    • gemini-3-pro-image-preview
  3. Nel riquadro Output, seleziona Immagine e testo dal menu a discesa.
  4. Scrivi una descrizione dell'immagine che vuoi generare nell'area di testo di Scrivi un prompt. Ad esempio, "Crea un tutorial che spieghi come preparare un panino con burro di arachidi e marmellata in tre semplici passaggi. Per ogni passaggio, fornisci un titolo con il numero del passaggio, una spiegazione e genera anche un'immagine, genera ogni immagine con un formato 1:1".
  5. Fai clic sul pulsante Prompt ().

Gemini genererà una risposta in base alla tua descrizione. Questa operazione richiede alcuni secondi, ma può essere relativamente più lenta a seconda della capacità.

Python

Installa

pip install --upgrade google-genai

Per saperne di più, consulta la documentazione di riferimento dell'SDK.

Imposta le variabili di ambiente per utilizzare l'SDK Gen AI con Vertex AI:

# 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

Scopri come installare o aggiornare Java.

Per saperne di più, consulta la documentazione di riferimento dell'SDK.

Imposta le variabili di ambiente per utilizzare l'SDK Gen AI con Vertex AI:

# 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

Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory corrente:

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 genererà un'immagine in base alla tua descrizione. Questa procedura richiede alcuni secondi, ma può essere relativamente più lenta a seconda della capacità.

Modifica immagini

Gemini 2.5 Flash Image per la generazione di immagini (gemini-2.5-flash-image) supporta la possibilità di modificare le immagini oltre a generarle. Gemini 2.5 Flash Image supporta l'editing migliorato delle immagini e l'editing multi-turn e contiene filtri di sicurezza aggiornati che offrono un'esperienza utente più flessibile e meno restrittiva.

Supporta le seguenti modalità e funzionalità:

  • Modifica delle immagini (da testo e da immagine a immagine)

    • Prompt di esempio: "Modifica questa immagine per farla sembrare un cartone animato"
    • Prompt di esempio: [immagine di un gatto] + [immagine di un cuscino] + "Crea un punto croce del mio gatto su questo cuscino".
  • Modifica di immagini in più passaggi (chat)

    • Prompt di esempio: [carica un'immagine di un'auto blu.] "Trasforma questa auto in una cabriolet".

      • [Il modello restituisce un'immagine di una decappottabile nella stessa scena] "Ora cambia il colore in giallo."
      • [Il modello restituisce un'immagine di una decappottabile gialla] "Aggiungi uno spoiler."
      • [Il modello restituisce un'immagine della decappottabile con uno spoiler]

Modificare un'immagine

Console

Per modificare le immagini:

  1. Apri Vertex AI Studio > Crea prompt.
  2. Fai clic su Cambia modello e seleziona uno dei seguenti modelli dal menu:
    • gemini-2.5-flash-image
    • gemini-3-pro-image-preview
  3. Nel riquadro Output, seleziona Immagine e testo dal menu a discesa.
  4. Fai clic su Inserisci contenuti multimediali () e seleziona un'origine dal menu, poi segui le istruzioni della finestra di dialogo.
  5. Scrivi le modifiche che vuoi apportare all'immagine nell'area di testo Scrivi un prompt.
  6. Fai clic sul pulsante Prompt ().

Gemini genererà una versione modificata dell'immagine fornita in base alla tua descrizione. Questa procedura richiede alcuni secondi, ma può essere relativamente più lenta a seconda della capacità.

Python

Installa

pip install --upgrade google-genai

Per saperne di più, consulta la documentazione di riferimento dell'SDK.

Imposta le variabili di ambiente per utilizzare l'SDK Gen AI con Vertex AI:

# 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

Scopri come installare o aggiornare Java.

Per saperne di più, consulta la documentazione di riferimento dell'SDK.

Imposta le variabili di ambiente per utilizzare l'SDK Gen AI con Vertex AI:

# 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

Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory corrente:

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 genererà un'immagine in base alla tua descrizione. Questa procedura richiede alcuni secondi, ma può essere relativamente più lenta a seconda della capacità.

Modifica di immagini in più passaggi

Il supporto di Gemini 2.5 Flash Image e Gemini 3 Pro Image migliora la modifica in più passaggi, consentendoti di rispondere al modello con le modifiche dopo aver ricevuto una risposta con un'immagine modificata. In questo modo puoi continuare ad apportare modifiche all'immagine in modo conversazionale.

Tieni presente che è consigliabile limitare la dimensione totale del file di richiesta a un massimo di 50 MB.

Per provare la modifica delle immagini in più passaggi, prova i seguenti blocchi note:

Per esempi di codice relativi alla creazione e alla modifica di immagini in più passaggi utilizzando Gemini 3 Pro Image, vedi Esempio di modifica di immagini in più passaggi utilizzando le firme di pensiero.

AI responsabile

Per garantire un'esperienza sicura e responsabile, le funzionalità di generazione di immagini di Vertex AI sono dotate di un approccio alla sicurezza a più livelli. Lo scopo è impedire la creazione di contenuti inappropriati, inclusi materiali sessualmente espliciti, pericolosi, violenti, che incitano all'odio o tossici.

Tutti gli utenti devono rispettare le Norme relative all'uso vietato dell'IA generativa. Queste norme vietano rigorosamente la generazione di contenuti che:

  • Riguardano lo sfruttamento o abusi sessuali su minori.
  • Promuovono l'estremismo violento o il terrorismo.
  • Promuovono immagini intime non consensuali. Promuovono l'autolesionismo.
  • Contenuti sessualmente espliciti.
  • Costituisce incitamento all'odio.
  • Promuove molestie o bullismo.

Se viene fornito un prompt non sicuro, il modello potrebbe rifiutarsi di generare un'immagine oppure il prompt o la risposta generata potrebbero essere bloccati dai nostri filtri di sicurezza.

  • Rifiuto del modello: se un prompt è potenzialmente non sicuro, il modello potrebbe rifiutarsi di elaborare la richiesta. In questo caso, il modello di solito fornisce una risposta di testo che indica che non può generare immagini non sicure. Il FinishReason sarà STOP.
  • Blocco del filtro di sicurezza:
    • Se il prompt viene identificato come potenzialmente dannoso da un filtro di sicurezza, l'API restituisce BlockedReason in PromptFeedback.
    • Se la risposta viene identificata come potenzialmente dannosa da un filtro di sicurezza, la risposta API includerà un FinishReason di IMAGE_SAFETY, IMAGE_PROHIBITED_CONTENT o simile.

Categorie di codici del filtro di sicurezza

A seconda dei filtri di sicurezza che configuri, l'output potrebbe contenere un codice motivo di sicurezza simile al seguente:

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

Il codice elencato corrisponde a una categoria dannosa specifica. Queste mappature codice-categoria sono le seguenti:

Codice di errore Categoria di sicurezza Descrizione Contenuti filtrati: input del prompt o output dell'immagine
58061214
17301594
Figlio Rileva i contenuti per bambini nei casi in cui non sono consentiti a causa delle impostazioni o dell'inserimento nella lista consentita della richiesta API. input (prompt): 58061214
output (immagine): 17301594
29310472
15236754
Celebrity Rileva una rappresentazione fotorealistica di una celebrità nella richiesta. input (prompt): 29310472
output (immagine): 15236754
62263041 Contenuti pericolosi Rileva contenuti potenzialmente pericolosi. input (prompt)
57734940
22137204
Incitamento all'odio Rileva argomenti o contenuti correlati all'odio. input (prompt): 57734940
output (immagine): 22137204
74803281
29578790
42876398
Altro Rileva altri problemi di sicurezza vari relativi alla richiesta. input (prompt): 42876398
output (immagine): 29578790, 74803281
39322892 Persone/Volto Rileva una persona o un volto quando non è consentito a causa delle impostazioni di sicurezza delle richieste. output (immagine)
92201652 Informazioni personali Rileva informazioni che consentono l'identificazione personale (PII) nel testo, ad esempio la menzione di un numero di carta di credito, indirizzi di casa o altre informazioni di questo tipo. input (prompt)
89371032
49114662
72817394
Contenuti vietati Rileva la richiesta di contenuti vietati nella richiesta. input (prompt): 89371032
output (immagine): 49114662, 72817394
90789179
63429089
43188360
Contenuti di natura sessuale Rileva contenuti di natura sessuale. input (prompt): 90789179
output (immagine): 63429089, 43188360
78610348 Contenuti tossici Rileva argomenti o contenuti tossici nel testo. input (prompt)
61493863
56562880
Violenza Rileva contenuti correlati alla violenza dall'immagine o dal testo. input (prompt): 61493863
output (immagine): 56562880
32635315 Volgare Rileva argomenti o contenuti volgari dal testo. input (prompt)
64151117 Celebrità o bambino Rileva la rappresentazione fotorealistica di una celebrità o di un bambino che viola le norme di Google sulla sicurezza. input (prompt)
output (immagine)