Buat gambar

Gemini API mendukung pembuatan gambar menggunakan Gemini 2.0 Flash Experimental dan menggunakan Imagen 3. Panduan ini membantu Anda memulai kedua model tersebut.

Membuat gambar menggunakan Gemini

Gemini 2.0 Flash Experimental mendukung kemampuan untuk menghasilkan teks dan gambar inline. Hal ini memungkinkan Anda menggunakan Gemini untuk mengedit gambar secara percakapan atau membuat output dengan teks yang terjalin (misalnya, membuat postingan blog dengan teks dan gambar dalam satu giliran). Semua gambar yang dihasilkan menyertakan watermark SynthID, dan gambar di Google AI Studio juga menyertakan watermark yang terlihat.

Contoh berikut menunjukkan cara menggunakan Gemini 2.0 untuk menghasilkan output teks dan gambar:

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

Contoh kode akan menghasilkan gambar dan mungkin juga menghasilkan teks.

Gambar babi terbang fantastis yang dibuat AI

Bergantung pada perintah dan konteks, Gemini akan membuat konten dalam mode yang berbeda (teks ke gambar, teks ke gambar dan teks, dll.). Berikut beberapa contohnya:

  • Teks ke gambar
    • Contoh perintah: "Buat gambar menara Eiffel dengan kembang api di latar belakang."
  • Teks ke gambar dan teks (disisipkan)
    • Contoh perintah: "Buat resep bergambar untuk paella."
  • Gambar dan teks ke gambar dan teks (disisipkan)
    • Contoh perintah: (Dengan gambar ruangan yang dilengkapi furnitur) "Sofa warna apa lagi yang cocok untuk ruangan saya? Bisakah Anda memperbarui gambarnya?"
  • 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 konversi." "Sekarang ubah warnanya menjadi kuning."

Pengeditan gambar dengan Gemini

Untuk melakukan pengeditan gambar, tambahkan gambar sebagai input. Contoh berikut menunjukkan cara mengupload gambar berenkode base64. Untuk beberapa gambar dan payload yang lebih besar, lihat bagian input gambar.

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

Batasan

  • Untuk performa terbaik, gunakan bahasa berikut: EN, es-MX, ja-JP, zh-CN, hi-IN.
  • Pembuatan gambar tidak mendukung input audio atau video.
  • Pembuatan gambar mungkin tidak selalu memicu:
    • Model hanya dapat menghasilkan teks. Coba minta output gambar secara eksplisit (misalnya, "buat gambar", "berikan gambar saat Anda melakukannya", "perbarui gambar").
    • Model mungkin berhenti menghasilkan di tengah jalan. Coba lagi atau coba perintah lain.
  • Saat membuat teks untuk gambar, Gemini berfungsi paling baik jika Anda membuat teks terlebih dahulu, lalu meminta gambar dengan teks tersebut.

Pilih model

Model mana yang harus Anda gunakan untuk membuat gambar? Hal ini bergantung pada kasus penggunaan Anda.

Gemini 2.0 paling cocok untuk menghasilkan gambar yang relevan secara kontekstual, menggabungkan teks + gambar, menggabungkan pengetahuan dunia, dan bernalar tentang gambar. Anda dapat menggunakannya untuk membuat visual yang akurat dan relevan secara kontekstual yang disematkan dalam urutan teks yang panjang. Anda juga dapat mengedit gambar secara percakapan, menggunakan bahasa natural, sambil mempertahankan konteks selama percakapan.

Jika kualitas gambar adalah prioritas utama Anda, Imagen 3 adalah pilihan yang lebih baik. Imagen 3 unggul dalam fotorealisme, detail artistik, dan gaya artistik tertentu seperti impresionisme atau anime. Imagen 3 juga merupakan pilihan yang tepat untuk tugas pengeditan gambar khusus seperti memperbarui latar belakang produk, meningkatkan kualitas gambar, dan memasukkan branding dan gaya ke dalam visual. Anda dapat menggunakan Imagen 3 untuk membuat logo atau desain produk bermerek lainnya.

Membuat gambar menggunakan Imagen 3

Gemini API memberikan akses ke Imagen 3, model text-to-image berkualitas terbaik Google, yang menampilkan sejumlah kemampuan baru dan yang ditingkatkan. Imagen 3 dapat melakukan hal berikut:

  • Membuat gambar dengan detail yang lebih baik, pencahayaan yang lebih kaya, dan lebih sedikit artefak yang mengganggu dibandingkan model sebelumnya
  • Memahami perintah yang ditulis dalam bahasa alami
  • Membuat gambar dalam berbagai format dan gaya
  • Merender teks secara lebih efektif daripada model sebelumnya

Contoh Imagen

Bagian ini menunjukkan cara membuat instance model Imagen dan membuat gambar.

Setelah menginstal Google Gen AI SDK, Anda dapat menggunakan kode berikut untuk membuat gambar:

PythonREST
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
        }
      }'

Contoh kode akan menghasilkan empat gambar yang mirip dengan gambar ini:

Gambar dua kelinci kabur di dapur yang dibuat AI

Anda juga dapat mencoba notebook Mulai Menggunakan Imagen di Cookbook Gemini.

Parameter model Imagen

Parameter berikut tersedia untuk generate_images():

  • prompt: Perintah teks untuk gambar.
  • number_of_images: Jumlah gambar yang akan dihasilkan, dari 1 hingga 4 (inklusif). Defaultnya adalah 4.
  • aspect_ratio: Mengubah rasio aspek gambar yang dihasilkan. Nilai yang didukung adalah "1:1", "3:4", "4:3", "9:16", dan "16:9". Defaultnya adalah "1:1".
  • safety_filter_level: Menambahkan tingkat filter ke pemfilteran keamanan. Nilai berikut valid:
    • "BLOCK_LOW_AND_ABOVE": Blokir jika skor probabilitas atau skor keparahan adalah LOW, MEDIUM, atau HIGH.
    • "BLOCK_MEDIUM_AND_ABOVE": Blokir jika skor probabilitas atau skor keparahan adalah MEDIUM atau HIGH.
    • "BLOCK_ONLY_HIGH": Blokir jika skor probabilitas atau skor keparahan adalah HIGH.
  • person_generation: Mengizinkan model membuat gambar orang. Nilai berikut didukung:
    • "DONT_ALLOW": Memblokir pembuatan gambar orang.
    • "ALLOW_ADULT": Membuat gambar orang dewasa, tetapi tidak untuk anak-anak. Ini adalah defaultnya.

Watermark SynthID digital yang tidak terlihat selalu ditambahkan ke gambar yang dihasilkan.

Bahasa perintah teks

Bahasa perintah teks input berikut didukung:

  • Inggris (en)

Langkah berikutnya