Mengedit gambar dengan Gemini

Gemini 2.5 Flash Image mendukung beberapa jenis pengeditan gambar.

Pengeditan gambar

Gemini 2.5 Flash Image untuk pembuatan gambar (gemini-2.5-flash-image) mendukung kemampuan untuk mengedit gambar selain membuatnya. Gemini 2.5 Flash Image mendukung pengeditan gambar yang lebih baik dan pengeditan multi-turn, serta berisi filter keamanan yang diperbarui yang memberikan pengalaman pengguna yang lebih fleksibel dan tidak terlalu ketat.

API ini mendukung modalitas dan kemampuan berikut:

  • Pengeditan gambar (teks dan gambar ke gambar)

    • Contoh perintah: "Edit gambar ini agar terlihat seperti kartun"
    • Contoh perintah: [gambar kucing] + [gambar bantal] + "Buat sulaman silang kucing saya di bantal ini."
  • Pengeditan gambar multi-giliran (chat)

    • Contoh perintah: [upload gambar mobil biru.] "Ubah mobil ini menjadi mobil convertible." "Sekarang ubah warnanya menjadi kuning." "Tambahkan spoiler".

Mengedit gambar

Konsol

Untuk mengedit gambar:

  1. Buka Vertex AI Studio > Create prompt.
  2. Klik Ganti model, lalu pilih gemini-2.5-flash-image dari menu.
  3. Di panel Output, pilih Gambar dan teks dari menu drop-down.
  4. Klik Sisipkan media () dan pilih sumber dari menu, lalu ikuti petunjuk dialog.
  5. Tulis pengeditan yang ingin Anda lakukan pada gambar di area teks Tulis perintah.
  6. Klik tombol Perintah ().

Gemini akan membuat versi yang diedit dari gambar yang diberikan berdasarkan deskripsi Anda. Proses ini akan memakan waktu beberapa detik, tetapi mungkin lebih lambat bergantung pada kapasitasnya.

Python

Instal

pip install --upgrade google-genai

Untuk mempelajari lebih lanjut, lihat dokumentasi referensi SDK.

Tetapkan variabel lingkungan untuk menggunakan Gen AI SDK dengan 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-2.5-flash-image",
    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")
# Example response:
#  Here's the cartoon-style edit of the image:
#  Cartoon-style edit:
#  - Simplified the Eiffel Tower with bolder lines and slightly exaggerated proportions.
#  - Brightened and saturated the colors of the sky, fireworks, and foliage for a more vibrant, cartoonish look.
#  ....

Java

Pelajari cara menginstal atau mengupdate Java.

Untuk mempelajari lebih lanjut, lihat dokumentasi referensi SDK.

Tetapkan variabel lingkungan untuk menggunakan Gen AI SDK dengan 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

Jalankan perintah berikut di terminal untuk membuat atau menimpa file ini di direktori saat ini:

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": [
        {"file_data": {
          "mime_type": "image/jpg",
          "file_uri": "<var>FILE_NAME</var>"
          }
        },
        {"text": "Convert this photo to black and white, in a cartoonish style."},
      ]

    },
    "generation_config": {
      "response_modalities": ["TEXT", "IMAGE"],
      "image_config": {
        "aspect_ratio": "16:9",
      },
    },
    "safetySettings": {
      "method": "PROBABILITY",
      "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
      "threshold": "BLOCK_MEDIUM_AND_ABOVE"
    },
  }' 2>/dev/null >response.json

Gemini akan membuat gambar berdasarkan deskripsi Anda. Proses ini akan memakan waktu beberapa detik, tetapi mungkin lebih lambat bergantung pada kapasitas.

Pengeditan gambar multi-giliran

Gambar Gemini 2.5 Flash juga mendukung pengeditan multi-turn yang lebih baik, sehingga Anda dapat merespons model dengan perubahan setelah menerima respons gambar yang telah diedit. Dengan begitu, Anda dapat terus mengedit gambar secara percakapan.

Perhatikan bahwa sebaiknya batasi ukuran file permintaan secara keseluruhan hingga maksimum 50 MB.

Untuk menguji pengeditan gambar multi-turn, coba notebook Gemini 2.5 Flash Image kami.