Gemini를 사용한 이미지 생성 (일명 Nano Banana)

Gemini는 대화형으로 이미지를 생성하고 처리할 수 있습니다. 텍스트, 이미지 또는 둘 다를 조합해 Gemini에 프롬프트를 제공하여 전례 없는 제어 기능을 통해 시각적 요소를 만들고, 수정하고, 반복할 수 있습니다.

  • Text-to-Image: 간단하거나 복잡한 텍스트 설명에서 고품질 이미지를 생성합니다.
  • 이미지 + 텍스트-이미지 (수정): 이미지를 제공하고 텍스트 프롬프트를 사용하여 요소를 추가, 삭제 또는 수정하거나, 스타일을 변경하거나, 색상 그레이딩을 조정합니다.
  • 다중 이미지에서 이미지로 (구성 및 스타일 트랜스퍼): 여러 입력 이미지를 사용하여 새 장면을 구성하거나 한 이미지의 스타일을 다른 이미지로 트랜스퍼합니다.
  • 반복적 개선: 대화를 통해 여러 차례에 걸쳐 이미지를 점진적으로 개선하고 완벽해질 때까지 작은 조정을 합니다.
  • 고화질 텍스트 렌더링: 로고, 다이어그램, 포스터에 적합한 가독성 있고 잘 배치된 텍스트가 포함된 이미지를 정확하게 생성합니다.

생성된 모든 이미지에는 SynthID 워터마크가 포함됩니다.

이미지 생성 (텍스트 이미지 변환)

다음 코드는 설명 프롬프트에 따라 이미지를 생성하는 방법을 보여줍니다.

Python

from google import genai
from google.genai import types
from PIL import Image
from io import BytesIO

client = genai.Client()

prompt = (
    "Create a picture of a nano banana dish in a fancy restaurant with a Gemini theme"
)

response = client.models.generate_content(
    model="gemini-2.5-flash-image-preview",
    contents=[prompt],
)

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("generated_image.png")

자바스크립트

import { GoogleGenAI, Modality } from "@google/genai";
import * as fs from "node:fs";

async function main() {

  const ai = new GoogleGenAI({});

  const prompt =
    "Create a picture of a nano banana dish in a fancy restaurant with a Gemini theme";

  const response = await ai.models.generateContent({
    model: "gemini-2.5-flash-image-preview",
    contents: prompt,
  });
  for (const part of response.candidates[0].content.parts) {
    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");
    }
  }
}

main();

Go

package main

import (
  "context"
  "fmt"
  "os"
  "google.golang.org/genai"
)

func main() {

  ctx := context.Background()
  client, err := genai.NewClient(ctx, nil)
  if err != nil {
      log.Fatal(err)
  }

  result, _ := client.Models.GenerateContent(
      ctx,
      "gemini-2.5-flash-image-preview",
      genai.Text("Create a picture of a nano banana dish in a " +
                 " fancy restaurant with a Gemini theme"),
  )

  for _, part := range result.Candidates[0].Content.Parts {
      if part.Text != "" {
          fmt.Println(part.Text)
      } else if part.InlineData != nil {
          imageBytes := part.InlineData.Data
          outputFilename := "gemini_generated_image.png"
          _ = os.WriteFile(outputFilename, imageBytes, 0644)
      }
  }
}

REST

curl -s -X POST
  "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-image-preview:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [{
      "parts": [
        {"text": "Create a picture of a nano banana dish in a fancy restaurant with a Gemini theme"}
      ]
    }]
  }' \
  | grep -o '"data": "[^"]*"' \
  | cut -d'"' -f4 \
  | base64 --decode > gemini-native-image.png
나노 바나나 요리의 AI 생성 이미지
Gemini 테마 레스토랑의 나노 바나나 요리를 AI로 생성한 이미지

이미지 편집 (텍스트 및 이미지 간)

참고: 업로드하는 이미지에 대한 필요한 권리를 보유하고 있는지 확인합니다. 속이거나 괴롭히거나 피해를 입히는 동영상 또는 이미지를 포함하여 타인의 권리를 침해하는 콘텐츠를 생성하지 마세요. 이 생성형 AI 서비스의 사용에는 Google의 금지된 사용 정책이 적용됩니다.

다음 예에서는 base64로 인코딩된 이미지를 업로드하는 방법을 보여줍니다. 여러 이미지, 더 큰 페이로드, 지원되는 MIME 유형은 이미지 이해 페이지를 확인하세요.

Python

from google import genai
from google.genai import types
from PIL import Image
from io import BytesIO

client = genai.Client()

prompt = (
    "Create a picture of my cat eating a nano-banana in a "
    "fancy restaurant under the Gemini constellation",
)

image = Image.open("/path/to/cat_image.png")

response = client.models.generate_content(
    model="gemini-2.5-flash-image-preview",
    contents=[prompt, 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("generated_image.png")

자바스크립트

import { GoogleGenAI, Modality } from "@google/genai";
import * as fs from "node:fs";

async function main() {

  const ai = new GoogleGenAI({});

  const imagePath = "path/to/cat_image.png";
  const imageData = fs.readFileSync(imagePath);
  const base64Image = imageData.toString("base64");

  const prompt = [
    { text: "Create a picture of my cat eating a nano-banana in a" +
            "fancy restaurant under the Gemini constellation" },
    {
      inlineData: {
        mimeType: "image/png",
        data: base64Image,
      },
    },
  ];

  const response = await ai.models.generateContent({
    model: "gemini-2.5-flash-image-preview",
    contents: prompt,
  });
  for (const part of response.candidates[0].content.parts) {
    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");
    }
  }
}

main();

Go

package main

import (
 "context"
 "fmt"
 "os"
 "google.golang.org/genai"
)

func main() {

 ctx := context.Background()
 client, err := genai.NewClient(ctx, nil)
 if err != nil {
     log.Fatal(err)
 }

 imagePath := "/path/to/cat_image.png"
 imgData, _ := os.ReadFile(imagePath)

 parts := []*genai.Part{
   genai.NewPartFromText("Create a picture of my cat eating a nano-banana in a fancy restaurant under the Gemini constellation"),
   &genai.Part{
     InlineData: &genai.Blob{
       MIMEType: "image/png",
       Data:     imgData,
     },
   },
 }

 contents := []*genai.Content{
   genai.NewContentFromParts(parts, genai.RoleUser),
 }

 result, _ := client.Models.GenerateContent(
     ctx,
     "gemini-2.5-flash-image-preview",
     contents,
 )

 for _, part := range result.Candidates[0].Content.Parts {
     if part.Text != "" {
         fmt.Println(part.Text)
     } else if part.InlineData != nil {
         imageBytes := part.InlineData.Data
         outputFilename := "gemini_generated_image.png"
         _ = os.WriteFile(outputFilename, imageBytes, 0644)
     }
 }
}

REST

IMG_PATH=/path/to/cat_image.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.5-flash-image-preview:generateContent" \
    -H "x-goog-api-key: $GEMINI_API_KEY" \
    -H 'Content-Type: application/json' \
    -d "{
      \"contents\": [{
        \"parts\":[
            {\"text\": \"'Create a picture of my cat eating a nano-banana in a fancy restaurant under the Gemini constellation\"},
            {
              \"inline_data\": {
                \"mime_type\":\"image/jpeg\",
                \"data\": \"$IMG_BASE64\"
              }
            }
        ]
      }]
    }"  \
  | grep -o '"data": "[^"]*"' \
  | cut -d'"' -f4 \
  | base64 --decode > gemini-edited-image.png
바나나를 먹는 고양이의 AI 생성 이미지
나노 바나나를 먹는 고양이의 AI 생성 이미지

기타 이미지 생성 모드

Gemini는 프롬프트 구조와 컨텍스트에 따라 다음과 같은 다른 이미지 상호작용 모드를 지원합니다.

  • 텍스트 이미지 변환 및 텍스트(인터리브 처리): 관련 텍스트와 함께 이미지를 출력합니다.
    • 프롬프트 예시: '파에야에 관한 그림이 있는 레시피를 생성해 줘.'
  • 이미지 및 텍스트 이미지 변환 및 텍스트(인터리브 처리): 입력 이미지와 텍스트를 사용하여 새로운 관련 이미지와 텍스트를 만듭니다.
    • 프롬프트 예시: (가구가 완비된 방의 이미지 포함) "내 공간에 어떤 색상의 소파가 어울릴까? 이미지를 업데이트해 줘."
  • 멀티턴 이미지 편집 (채팅): 대화형으로 이미지를 계속 생성하고 편집합니다.
    • 프롬프트 예시: [파란색 자동차 이미지를 업로드하세요.] , '이 차를 컨버터블로 바꿔 줘.', '이제 색상을 노란색으로 바꿔 줘.'

프롬프트 가이드 및 전략

Gemini 2.5 Flash 이미지 생성의 기본 원칙은 다음과 같습니다.

장면을 설명하고 키워드만 나열하지 마세요. 이 모델의 핵심 강점은 깊이 있는 언어 이해입니다. 설명적인 단락은 연결되지 않은 단어 목록보다 더 나은 이미지를 생성할 가능성이 거의 항상 높습니다.

이미지 생성 프롬프트

다음 전략을 사용하면 원하는 이미지를 정확하게 생성하는 효과적인 프롬프트를 만들 수 있습니다.

1. 실사형 장면

사실적인 이미지를 만들려면 사진 용어를 사용하세요. 카메라 각도, 렌즈 유형, 조명, 세부사항을 언급하여 모델이 실사형 결과를 생성하도록 안내하세요.

템플릿

A photorealistic [shot type] of [subject], [action or expression], set in
[environment]. The scene is illuminated by [lighting description], creating
a [mood] atmosphere. Captured with a [camera/lens details], emphasizing
[key textures and details]. The image should be in a [aspect ratio] format.

프롬프트

A photorealistic close-up portrait of an elderly Japanese ceramicist with
deep, sun-etched wrinkles and a warm, knowing smile. He is carefully
inspecting a freshly glazed tea bowl. The setting is his rustic,
sun-drenched workshop. The scene is illuminated by soft, golden hour light
streaming through a window, highlighting the fine texture of the clay.
Captured with an 85mm portrait lens, resulting in a soft, blurred background
(bokeh). The overall mood is serene and masterful. Vertical portrait
orientation.

Python

from google import genai
from google.genai import types
from PIL import Image
from io import BytesIO

client = genai.Client()

# Generate an image from a text prompt
response = client.models.generate_content(
    model="gemini-2.5-flash-image-preview",
    contents="A photorealistic close-up portrait of an elderly Japanese ceramicist with deep, sun-etched wrinkles and a warm, knowing smile. He is carefully inspecting a freshly glazed tea bowl. The setting is his rustic, sun-drenched workshop with pottery wheels and shelves of clay pots in the background. The scene is illuminated by soft, golden hour light streaming through a window, highlighting the fine texture of the clay and the fabric of his apron. Captured with an 85mm portrait lens, resulting in a soft, blurred background (bokeh). The overall mood is serene and masterful.",
)

image_parts = [
    part.inline_data.data
    for part in response.candidates[0].content.parts
    if part.inline_data
]

if image_parts:
    image = Image.open(BytesIO(image_parts[0]))
    image.save('photorealistic_example.png')
    image.show()
일본의 노년 도예가의 사실적인 클로즈업 인물 사진...
일본의 노년 도예가의 사실적인 클로즈업 인물 사진...

2. 세련된 삽화 및 스티커

스티커, 아이콘 또는 애셋을 만들려면 스타일을 명시하고 투명한 배경을 요청하세요.

템플릿

A [style] sticker of a [subject], featuring [key characteristics] and a
[color palette]. The design should have [line style] and [shading style].
The background must be transparent.

프롬프트

A kawaii-style sticker of a happy red panda wearing a tiny bamboo hat. It's
munching on a green bamboo leaf. The design features bold, clean outlines,
simple cel-shading, and a vibrant color palette. The background must be white.

Python

from google import genai
from google.genai import types
from PIL import Image
from io import BytesIO

client = genai.Client()

# Generate an image from a text prompt
response = client.models.generate_content(
    model="gemini-2.5-flash-image-preview",
    contents="A kawaii-style sticker of a happy red panda wearing a tiny bamboo hat. It's munching on a green bamboo leaf. The design features bold, clean outlines, simple cel-shading, and a vibrant color palette. The background must be white.",
)

image_parts = [
    part.inline_data.data
    for part in response.candidates[0].content.parts
    if part.inline_data
]

if image_parts:
    image = Image.open(BytesIO(image_parts[0]))
    image.save('red_panda_sticker.png')
    image.show()
행복한 빨간색...
행복한 레서판다의 귀여운 스타일 스티커...

3. 이미지의 정확한 텍스트

Gemini는 텍스트 렌더링에 탁월합니다. 텍스트, 글꼴 스타일(설명), 전체 디자인을 명확하게 설명하세요.

템플릿

Create a [image type] for [brand/concept] with the text "[text to render]"
in a [font style]. The design should be [style description], with a
[color scheme].

프롬프트

Create a modern, minimalist logo for a coffee shop called 'The Daily Grind'.
The text should be in a clean, bold, sans-serif font. The design should
feature a simple, stylized icon of a a coffee bean seamlessly integrated
with the text. The color scheme is black and white.

Python

from google import genai
from google.genai import types
from PIL import Image
from io import BytesIO

client = genai.Client()

# Generate an image from a text prompt
response = client.models.generate_content(
    model="gemini-2.5-flash-image-preview",
    contents="Create a modern, minimalist logo for a coffee shop called 'The Daily Grind'. The text should be in a clean, bold, sans-serif font. The design should feature a simple, stylized icon of a a coffee bean seamlessly integrated with the text. The color scheme is black and white.",
)

image_parts = [
    part.inline_data.data
    for part in response.candidates[0].content.parts
    if part.inline_data
]

if image_parts:
    image = Image.open(BytesIO(image_parts[0]))
    image.save('logo_example.png')
    image.show()
'The Daily Grind'라는 커피숍의 현대적이고 미니멀한 로고를 만들어 줘.
'The Daily Grind'라는 커피숍의 현대적이고 미니멀한 로고를 만들어 줘...

4. 제품 모형 및 상업용 사진

전자상거래, 광고 또는 브랜딩을 위한 깔끔하고 전문적인 제품 사진을 만드는 데 적합합니다.

템플릿

A high-resolution, studio-lit product photograph of a [product description]
on a [background surface/description]. The lighting is a [lighting setup,
e.g., three-point softbox setup] to [lighting purpose]. The camera angle is
a [angle type] to showcase [specific feature]. Ultra-realistic, with sharp
focus on [key detail]. [Aspect ratio].

프롬프트

A high-resolution, studio-lit product photograph of a minimalist ceramic
coffee mug in matte black, presented on a polished concrete surface. The
lighting is a three-point softbox setup designed to create soft, diffused
highlights and eliminate harsh shadows. The camera angle is a slightly
elevated 45-degree shot to showcase its clean lines. Ultra-realistic, with
sharp focus on the steam rising from the coffee. Square image.

Python

from google import genai
from google.genai import types
from PIL import Image
from io import BytesIO

client = genai.Client()

# Generate an image from a text prompt
response = client.models.generate_content(
    model="gemini-2.5-flash-image-preview",
    contents="A high-resolution, studio-lit product photograph of a minimalist ceramic coffee mug in matte black, presented on a polished concrete surface. The lighting is a three-point softbox setup designed to create soft, diffused highlights and eliminate harsh shadows. The camera angle is a slightly elevated 45-degree shot to showcase its clean lines. Ultra-realistic, with sharp focus on the steam rising from the coffee. Square image.",
)

image_parts = [
    part.inline_data.data
    for part in response.candidates[0].content.parts
    if part.inline_data
]

if image_parts:
    image = Image.open(BytesIO(image_parts[0]))
    image.save('product_mockup.png')
    image.show()
미니멀한 세라믹 커피 머그잔의 고해상도 스튜디오 조명 제품 사진입니다.
미니멀한 세라믹 커피 머그의 고해상도 스튜디오 조명 제품 사진...

5. 미니멀리스트 및 네거티브 스페이스 디자인

텍스트가 오버레이되는 웹사이트, 프레젠테이션 또는 마케팅 자료의 배경을 만드는 데 적합합니다.

템플릿

A minimalist composition featuring a single [subject] positioned in the
[bottom-right/top-left/etc.] of the frame. The background is a vast, empty
[color] canvas, creating significant negative space. Soft, subtle lighting.
[Aspect ratio].

프롬프트

A minimalist composition featuring a single, delicate red maple leaf
positioned in the bottom-right of the frame. The background is a vast, empty
off-white canvas, creating significant negative space for text. Soft,
diffused lighting from the top left. Square image.

Python

from google import genai
from google.genai import types
from PIL import Image
from io import BytesIO

client = genai.Client()

# Generate an image from a text prompt
response = client.models.generate_content(
    model="gemini-2.5-flash-image-preview",
    contents="A minimalist composition featuring a single, delicate red maple leaf positioned in the bottom-right of the frame. The background is a vast, empty off-white canvas, creating significant negative space for text. Soft, diffused lighting from the top left. Square image.",
)

image_parts = [
    part.inline_data.data
    for part in response.candidates[0].content.parts
    if part.inline_data
]

if image_parts:
    image = Image.open(BytesIO(image_parts[0]))
    image.save('minimalist_design.png')
    image.show()
섬세한 단풍잎 하나가 특징인 미니멀한 구성...
섬세한 단풍잎 하나가 돋보이는 미니멀한 구성...

6. 연속적인 아트 (만화 패널 / 스토리보드)

캐릭터 일관성 및 장면 설명을 기반으로 시각적 스토리텔링을 위한 패널을 만듭니다.

템플릿

A single comic book panel in a [art style] style. In the foreground,
[character description and action]. In the background, [setting details].
The panel has a [dialogue/caption box] with the text "[Text]". The lighting
creates a [mood] mood. [Aspect ratio].

프롬프트

A single comic book panel in a gritty, noir art style with high-contrast
black and white inks. In the foreground, a detective in a trench coat stands
under a flickering streetlamp, rain soaking his shoulders. In the
background, the neon sign of a desolate bar reflects in a puddle. A caption
box at the top reads "The city was a tough place to keep secrets." The
lighting is harsh, creating a dramatic, somber mood. Landscape.

Python

from google import genai
from google.genai import types
from PIL import Image
from io import BytesIO

client = genai.Client()

# Generate an image from a text prompt
response = client.models.generate_content(
    model="gemini-2.5-flash-image-preview",
    contents="A single comic book panel in a gritty, noir art style with high-contrast black and white inks. In the foreground, a detective in a trench coat stands under a flickering streetlamp, rain soaking his shoulders. In the background, the neon sign of a desolate bar reflects in a puddle. A caption box at the top reads \"The city was a tough place to keep secrets.\" The lighting is harsh, creating a dramatic, somber mood. Landscape.",
)

image_parts = [
    part.inline_data.data
    for part in response.candidates[0].content.parts
    if part.inline_data
]

if image_parts:
    image = Image.open(BytesIO(image_parts[0]))
    image.save('comic_panel.png')
    image.show()
거친 느와르 아트 스타일의 단일 만화 패널...
어둡고 느와르적인 아트 스타일의 단일 만화 패널...

이미지 수정 프롬프트

이 예시에서는 수정, 구성, 스타일 전송을 위해 텍스트 프롬프트와 함께 이미지를 제공하는 방법을 보여줍니다.

1. 요소 추가 및 삭제

이미지를 제공하고 변경사항을 설명합니다. 모델은 원본 이미지의 스타일, 조명, 원근법과 일치합니다.

템플릿

Using the provided image of [subject], please [add/remove/modify] [element]
to/from the scene. Ensure the change is [description of how the change should
integrate].

프롬프트

"Using the provided image of my cat, please add a small, knitted wizard hat
on its head. Make it look like it's sitting comfortably and matches the soft
lighting of the photo."

Python

from google import genai
from google.genai import types
from PIL import Image
from io import BytesIO

client = genai.Client()

# Base image prompt: "A photorealistic picture of a fluffy ginger cat sitting on a wooden floor, looking directly at the camera. Soft, natural light from a window."
image_input = Image.open('/path/to/your/cat_photo.png')
text_input = """Using the provided image of my cat, please add a small, knitted wizard hat on its head. Make it look like it's sitting comfortably and not falling off."""

# Generate an image from a text prompt
response = client.models.generate_content(
    model="gemini-2.5-flash-image-preview",
    contents=[text_input, image_input],
)

image_parts = [
    part.inline_data.data
    for part in response.candidates[0].content.parts
    if part.inline_data
]

if image_parts:
    image = Image.open(BytesIO(image_parts[0]))
    image.save('cat_with_hat.png')
    image.show()

입력

출력

솜털이 보송보송한 생강색 고양이의 사실적인 사진
푹신한 생강색 고양이의 사실적인 사진...
제공된 고양이 이미지를 사용하여 작고 털실로 뜬 마법사 모자를 추가해 줘.
제공된 고양이 이미지를 사용하여 작고 털실로 뜬 마법사 모자를 추가해 줘...

2. 인페인팅 (시맨틱 마스킹)

대화형으로 '마스크'를 정의하여 이미지의 특정 부분을 수정하고 나머지는 그대로 둡니다.

템플릿

Using the provided image, change only the [specific element] to [new
element/description]. Keep everything else in the image exactly the same,
preserving the original style, lighting, and composition.

프롬프트

"Using the provided image of a living room, change only the blue sofa to be
a vintage, brown leather chesterfield sofa. Keep the rest of the room,
including the pillows on the sofa and the lighting, unchanged."

Python

from google import genai
from google.genai import types
from PIL import Image
from io import BytesIO

client = genai.Client()

# Base image prompt: "A wide shot of a modern, well-lit living room with a prominent blue sofa in the center. A coffee table is in front of it and a large window is in the background."
living_room_image = Image.open('/path/to/your/living_room.png')
text_input = """Using the provided image of a living room, change only the blue sofa to be a vintage, brown leather chesterfield sofa. Keep the rest of the room, including the pillows on the sofa and the lighting, unchanged."""

# Generate an image from a text prompt
response = client.models.generate_content(
    model="gemini-2.5-flash-image-preview",
    contents=[living_room_image, text_input],
)

image_parts = [
    part.inline_data.data
    for part in response.candidates[0].content.parts
    if part.inline_data
]

if image_parts:
    image = Image.open(BytesIO(image_parts[0]))
    image.save('living_room_edited.png')
    image.show()

입력

출력

조명이 잘 들어오는 현대적인 거실을 넓게 촬영한 장면...
조명이 잘 들어오는 현대적인 거실의 와이드 샷...
제공된 거실 이미지를 사용하여 파란색 소파만 빈티지한 갈색 가죽 체스터필드 소파로 변경해 줘.
제공된 거실 이미지를 사용하여 파란색 소파만 빈티지한 갈색 가죽 체스터필드 소파로 변경해 줘...

3. 스타일 전이

이미지를 제공하고 모델에 다른 예술적 스타일로 콘텐츠를 재현해 달라고 요청합니다.

템플릿

Transform the provided photograph of [subject] into the artistic style of [artist/art style]. Preserve the original composition but render it with [description of stylistic elements].

프롬프트

"Transform the provided photograph of a modern city street at night into the artistic style of Vincent van Gogh's 'Starry Night'. Preserve the original composition of buildings and cars, but render all elements with swirling, impasto brushstrokes and a dramatic palette of deep blues and bright yellows."

Python

from google import genai
from google.genai import types
from PIL import Image
from io import BytesIO

client = genai.Client()

# Base image prompt: "A photorealistic, high-resolution photograph of a busy city street in New York at night, with bright neon signs, yellow taxis, and tall skyscrapers."
city_image = Image.open('/path/to/your/city.png')
text_input = """Transform the provided photograph of a modern city street at night into the artistic style of Vincent van Gogh's 'Starry Night'. Preserve the original composition of buildings and cars, but render all elements with swirling, impasto brushstrokes and a dramatic palette of deep blues and bright yellows."""

# Generate an image from a text prompt
response = client.models.generate_content(
    model="gemini-2.5-flash-image-preview",
    contents=[city_image, text_input],
)

image_parts = [
    part.inline_data.data
    for part in response.candidates[0].content.parts
    if part.inline_data
]

if image_parts:
    image = Image.open(BytesIO(image_parts[0]))
    image.save('city_style_transfer.png')
    image.show()

입력

출력

번화한 도시 거리의 포토리얼리스틱 고해상도 사진...
분주한 도시 거리의 고해상도 실사형 사진...
제공된 야간 현대 도시 거리 사진을 다음과 같이 변환해 줘.
제공된 야간 현대 도시 거리 사진을 변환해 줘...

4. 고급 합성: 여러 이미지 결합

여러 이미지를 컨텍스트로 제공하여 새로운 합성 장면을 만듭니다. 제품 모형이나 창의적인 콜라주에 적합합니다.

템플릿

Create a new image by combining the elements from the provided images. Take
the [element from image 1] and place it with/on the [element from image 2].
The final image should be a [description of the final scene].

프롬프트

"Create a professional e-commerce fashion photo. Take the blue floral dress
from the first image and let the woman from the second image wear it.
Generate a realistic, full-body shot of the woman wearing the dress, with
the lighting and shadows adjusted to match the outdoor environment."

Python

from google import genai
from google.genai import types
from PIL import Image
from io import BytesIO

client = genai.Client()

# Base image prompts:
# 1. Dress: "A professionally shot photo of a blue floral summer dress on a plain white background, ghost mannequin style."
# 2. Model: "Full-body shot of a woman with her hair in a bun, smiling, standing against a neutral grey studio background."
dress_image = Image.open('/path/to/your/dress.png')
model_image = Image.open('/path/to/your/model.png')

text_input = """Create a professional e-commerce fashion photo. Take the blue floral dress from the first image and let the woman from the second image wear it. Generate a realistic, full-body shot of the woman wearing the dress, with the lighting and shadows adjusted to match the outdoor environment."""

# Generate an image from a text prompt
response = client.models.generate_content(
    model="gemini-2.5-flash-image-preview",
    contents=[dress_image, model_image, text_input],
)

image_parts = [
    part.inline_data.data
    for part in response.candidates[0].content.parts
    if part.inline_data
]

if image_parts:
    image = Image.open(BytesIO(image_parts[0]))
    image.save('fashion_ecommerce_shot.png')
    image.show()

입력 1

입력 2

출력

파란색 꽃무늬 여름 드레스를 전문적으로 촬영한 사진...
파란색 플로럴 여름 드레스의 전문적인 사진...
머리를 묶은 여성의 전신 사진...
머리를 번으로 묶은 여성의 전신 샷...
전문적인 전자상거래 패션 사진을 만들어 줘.
전문적인 전자상거래 패션 사진을 만들어 줘...

5. 충실도 높은 세부정보 보존

편집 중에 얼굴이나 로고와 같은 중요한 세부정보가 보존되도록 하려면 편집 요청과 함께 세부정보를 자세히 설명하세요.

템플릿

Using the provided images, place [element from image 2] onto [element from
image 1]. Ensure that the features of [element from image 1] remain
completely unchanged. The added element should [description of how the
element should integrate].

프롬프트

"Take the first image of the woman with brown hair, blue eyes, and a neutral
expression. Add the logo from the second image onto her black t-shirt.
Ensure the woman's face and features remain completely unchanged. The logo
should look like it's naturally printed on the fabric, following the folds
of the shirt."

Python

from google import genai
from google.genai import types
from PIL import Image
from io import BytesIO

client = genai.Client()

# Base image prompts:
# 1. Woman: "A professional headshot of a woman with brown hair and blue eyes, wearing a plain black t-shirt, against a neutral studio background."
# 2. Logo: "A simple, modern logo with the letters 'G' and 'A' in a white circle."
woman_image = Image.open('/path/to/your/woman.png')
logo_image = Image.open('/path/to/your/logo.png')
text_input = """Take the first image of the woman with brown hair, blue eyes, and a neutral expression. Add the logo from the second image onto her black t-shirt. Ensure the woman's face and features remain completely unchanged. The logo should look like it's naturally printed on the fabric, following the folds of the shirt."""

# Generate an image from a text prompt
response = client.models.generate_content(
    model="gemini-2.5-flash-image-preview",
    contents=[woman_image, logo_image, text_input],
)

image_parts = [
    part.inline_data.data
    for part in response.candidates[0].content.parts
    if part.inline_data
]

if image_parts:
    image = Image.open(BytesIO(image_parts[0]))
    image.save('woman_with_logo.png')
    image.show()

입력 1

입력 2

출력

갈색 머리에 파란 눈을 가진 여성의 전문적인 증명사진...
갈색 머리에 파란 눈을 가진 여성을 보여주는 전문적인 얼굴 사진...
'G'와 'A' 글자가 있는 심플하고 모던한 로고
'G'와 'A' 글자가 있는 간단하고 현대적인 로고...
갈색 머리, 파란 눈, 무표정한 여자의 첫 번째 이미지를 가져와 줘.
갈색 머리, 파란 눈, 무표정한 여자의 첫 번째 이미지를 가져와...

권장사항

결과를 좋음에서 우수함으로 끌어올리려면 이러한 전문적인 전략을 워크플로에 통합하세요.

  • 매우 구체적: 세부정보를 많이 제공할수록 더 많은 제어 권한을 갖게 됩니다. '판타지 갑옷' 대신 '은박 무늬가 새겨진 화려한 엘프 판금 갑옷, 매의 날개 모양의 높은 칼라와 견갑'이라고 설명합니다.
  • 맥락과 의도 제공: 이미지의 목적을 설명합니다. 컨텍스트에 대한 모델의 이해가 최종 출력에 영향을 미칩니다. 예를 들어 '고급 미니멀리즘 스킨케어 브랜드의 로고를 만들어 줘'라고 말하면 '로고를 만들어 줘'라고 말하는 것보다 더 나은 결과를 얻을 수 있습니다.
  • 반복 및 미세 조정: 첫 번째 시도에서 완벽한 이미지를 기대하지 마세요. 모델의 대화형 특성을 사용하여 작은 변경사항을 적용합니다. '좋은데 조명을 좀 더 따뜻하게 해 줄 수 있어?' 또는 '다른 건 그대로 두고 캐릭터의 표정을 좀 더 심각하게 바꿔 줘'와 같은 프롬프트로 후속 조치를 취합니다.
  • 단계별 안내 사용: 요소가 많은 복잡한 장면의 경우 프롬프트를 단계로 나눕니다. "먼저 새벽의 고요하고 안개 낀 숲의 배경을 만듭니다. 그런 다음 포그라운드에 이끼로 덮인 고대 돌 제단을 추가합니다. 마지막으로 제단 위에 빛나는 검 하나를 놓아줘."
  • '의미론적 부정 프롬프트' 사용: '자동차가 없음'이라고 말하는 대신 원하는 장면을 긍정적으로 설명합니다.'교통의 흔적이 없는 텅 빈 버려진 거리'
  • 카메라 제어: 사진 및 영화 촬영 언어를 사용하여 구도를 제어합니다. wide-angle shot, macro shot, low-angle perspective와 같은 용어

제한사항

  • 최상의 성능을 위해 다음 언어를 사용하세요. EN, es-MX, ja-JP, zh-CN, hi-IN
  • 이미지 생성은 오디오 또는 동영상 입력을 지원하지 않습니다.
  • 모델이 사용자가 명시적으로 요청한 이미지 출력 수를 정확하게 따르지 않을 수 있습니다.
  • 모델은 최대 3개의 이미지를 입력으로 사용할 때 가장 잘 작동합니다.
  • 이미지에 대한 텍스트를 생성할 때 먼저 텍스트를 생성한 다음 텍스트와 함께 이미지를 요청하면 Gemini가 가장 잘 작동합니다.
  • 현재 EEA, 스위스, 영국에서는 아동 이미지를 업로드할 수 없습니다.
  • 생성된 모든 이미지에는 SynthID 워터마크가 포함됩니다.

Imagen을 사용해야 하는 경우

Gemini의 내장 이미지 생성 기능을 사용하는 것 외에도 Gemini API를 통해 Google의 전문 이미지 생성 모델인 Imagen에 액세스할 수 있습니다.

속성 Imagen Gemini 네이티브 이미지
강점 현재까지 가장 강력한 이미지 생성 모델 실사형 이미지, 선명도 향상, 맞춤법 및 서체 개선에 권장됩니다. 기본 추천.
비교할 수 없는 유연성, 맥락 이해, 간단한 마스크 없는 수정. 멀티턴 대화형 편집이 가능합니다.
가용성 정식 버전 미리보기 (프로덕션 사용 허용)
지연 시간 낮음 거의 실시간 성능에 최적화되어 있습니다. 상대적으로 많이 걸림. 고급 기능을 사용하려면 더 많은 계산이 필요합니다.
비용 특수 작업에 비용 효율적입니다. $0.02/이미지~ $0.12/이미지 토큰 기반 가격 책정 이미지 출력의 경우 토큰 100만 개당 30달러 (이미지당 1,290개 토큰으로 토큰화된 이미지 출력, 최대 1024x1024px)
추천 작업
  • 이미지 품질, 사실성, 예술적 디테일 또는 특정 스타일 (예: 인상주의, 애니메이션)이 최우선입니다.
  • 브랜딩, 스타일을 주입하거나 로고 및 제품 디자인을 생성합니다.
  • 고급 맞춤법 또는 서체 생성
  • 텍스트와 이미지를 매끄럽게 혼합하기 위한 인터리브 처리된 텍스트 및 이미지 생성
  • 단일 프롬프트로 여러 이미지의 광고 소재 요소를 결합합니다.
  • 이미지를 매우 구체적으로 수정하고, 간단한 언어 명령으로 개별 요소를 수정하고, 이미지를 반복적으로 작업할 수 있습니다.
  • 원본 피사체의 형태와 세부정보를 유지하면서 한 이미지의 특정 디자인이나 텍스처를 다른 이미지에 적용합니다.

Imagen 4는 Imagen으로 이미지를 생성할 때 기본 모델로 사용해야 합니다. 고급 사용 사례에 사용하거나 최고의 이미지 품질이 필요한 경우 Imagen 4 Ultra를 선택하세요 (한 번에 하나의 이미지만 생성할 수 있음).

다음 단계

  • 쿡북 가이드에서 더 많은 예와 코드 샘플을 확인하세요.
  • Veo 가이드에서 Gemini API로 동영상을 생성하는 방법을 알아보세요.
  • Gemini 모델에 대해 자세히 알아보려면 Gemini 모델을 참고하세요.