|

Nano Banana Pro PNG 형식 강제 출력 방법: 이미지 형식 문제를 해결하는 3가지 방법

저자 주: Nano Banana Pro API 이미지 출력 형식 제어 방법을 상세히 설명합니다. base64 디코딩을 통해 PNG로 저장하는 방법과 전체 코드 예제를 포함하고 있습니다.

Nano Banana Pro API로 이미지를 생성할 때 많은 개발자분들이 겪는 고민이 있죠. "어떻게 하면 JPG가 아닌 PNG 형식을 강제할 수 있을까?" 하는 점인데요. 본 포스팅에서는 이 질문에 대한 상세한 답변과 함께 다양한 구현 솔루션을 제공해 드립니다.

핵심 가치: 이 글을 다 읽고 나면 Nano Banana Pro 이미지 형식의 제어 원리를 파악하고, base64 디코딩을 통해 원하는 형식으로 이미지를 저장하는 방법을 마스터하게 됩니다.

nano-banana-pro-image-output-format-png-jpg-control-ko 图示


Nano Banana Pro 이미지 형식 출력 핵심 요점

요점 설명 가치
API base64 반환 inlineData에 이미지의 base64 인코딩이 포함됨 원본 데이터의 형식 중립성
저장 시 형식 지정 가능 base64 디코딩 후 PNG/JPG/WebP로 저장 가능 개발자가 출력을 완벽하게 제어
공식 매개변수 미제공 Nano Banana Pro에는 output_mime_type 매개변수가 없음 클라이언트 측 처리 필수
PNG 투명 채널 유지 투명 배경이 필요한 디자인 작업에 적합 품질 저하 없는 무손실 압축
JPG 작은 파일 용량 사진류 이미지 및 네트워크 전송에 적합 높은 압축률

왜 공식적으로 형식 제어 매개변수를 제공하지 않을까요?

Google AI 공식 문서 ai.google.dev/gemini-api/docs/image-generation를 확인해 보면, Nano Banana Pro(Gemini 기반의 네이티브 이미지 생성)는 Imagen 3와 달리 output_mime_type 매개변수를 제공하지 않는다는 것을 알 수 있습니다.

이는 Nano Banana Pro의 API 응답 설계가 기존의 이미지 생성 API와 다르기 때문입니다.

  • Imagen 3: 전용 이미지 생성 모델로, output_mime_type='image/jpeg' 또는 'image/png' 매개변수를 지원합니다.
  • Nano Banana Pro: 멀티모달 모델의 이미지 생성 능력으로, base64로 인코딩된 원본 이미지 데이터를 반환합니다.

따라서 Nano Banana Pro의 이미지 형식 제어는 API 요청 시 지정하는 것이 아니라, 클라이언트 측(저장 단계)에서 처리해야 합니다.

inlineData 응답 구조 분석

Nano Banana Pro API의 응답 구조는 다음과 같습니다.

{
  "candidates": [{
    "content": {
      "parts": [
        {
          "inlineData": {
            "mimeType": "image/png",
            "data": "iVBORw0K..."
          }
        }
      ]
    }
  }]
}

주요 필드 설명:

필드 설명
inlineData.mimeType 이미지의 MIME 유형, 보통 image/png로 표시됩니다.
inlineData.data 이미지의 base64 인코딩 문자열입니다.

data 필드는 base64로 인코딩된 원본 이미지 데이터이므로, 이를 디코딩한 후 어떤 형식으로든 저장할 수 있습니다.

nano-banana-pro-image-output-format-png-jpg-control-ko 图示


Nano Banana Pro 이미지 형식 컨트롤 퀵 스타트

방법 1: PNG로 직접 저장하기 (권장)

가장 간단한 방법은 저장할 때 파일 확장자를 .png로 직접 지정하는 거예요.

import google.generativeai as genai
import base64

# APIYI 접속 설정
genai.configure(
    api_key="YOUR_API_KEY",
    transport="rest",
    client_options={"api_endpoint": "https://vip.apiyi.com"}
)

# 이미지 생성
model = genai.GenerativeModel("nano-banana-pro")
response = model.generate_content("하얀 배경에 귀여운 치즈 고양이 한 마리")

# base64 데이터 추출 및 PNG로 저장
for part in response.candidates[0].content.parts:
    if hasattr(part, 'inline_data') and part.inline_data:
        image_data = base64.b64decode(part.inline_data.data)
        with open("output.png", "wb") as f:
            f.write(image_data)
        print("이미지가 PNG 형식으로 저장되었습니다.")

전체 다중 형식 저장 코드 보기
import google.generativeai as genai
import base64
from PIL import Image
import io
from typing import Literal

class NanoBananaImageSaver:
    """
    Nano Banana Pro 이미지 형식 변환 도구
    PNG, JPG, WebP 등 다양한 형식 지원
    """

    def __init__(self, api_key: str):
        genai.configure(
            api_key=api_key,
            transport="rest",
            client_options={"api_endpoint": "https://vip.apiyi.com"}
        )
        self.model = genai.GenerativeModel("nano-banana-pro")

    def generate_and_save(
        self,
        prompt: str,
        output_path: str,
        format: Literal["PNG", "JPEG", "WEBP"] = "PNG",
        quality: int = 95
    ) -> bool:
        """
        이미지를 생성하고 지정된 형식으로 저장

        Args:
            prompt: 생성 프롬프트
            output_path: 출력 파일 경로
            format: 출력 형식 (PNG/JPEG/WEBP)
            quality: 압축 품질 (JPEG/WEBP에만 유효, 1-100)
        """
        try:
            response = self.model.generate_content(prompt)

            for part in response.candidates[0].content.parts:
                if hasattr(part, 'inline_data') and part.inline_data:
                    # base64 디코딩
                    image_data = base64.b64decode(part.inline_data.data)

                    # PIL을 사용하여 열기 및 형식 변환
                    image = Image.open(io.BytesIO(image_data))

                    # 투명 채널 처리 (PNG → JPEG 변환 시 필요)
                    if format == "JPEG" and image.mode == "RGBA":
                        # 흰색 배경 생성
                        background = Image.new("RGB", image.size, (255, 255, 255))
                        background.paste(image, mask=image.split()[3])
                        image = background

                    # 지정된 형식으로 저장
                    save_params = {}
                    if format in ["JPEG", "WEBP"]:
                        save_params["quality"] = quality

                    image.save(output_path, format=format, **save_params)
                    print(f"이미지가 저장되었습니다: {output_path} (형식: {format})")
                    return True

            return False
        except Exception as e:
            print(f"저장 실패: {e}")
            return False


# 사용 예시
if __name__ == "__main__":
    saver = NanoBananaImageSaver("YOUR_API_KEY")

    # PNG로 저장 (무손실, 투명 채널 유지)
    saver.generate_and_save(
        prompt="현대적인 건축물 외관, 투명 배경",
        output_path="building.png",
        format="PNG"
    )

    # JPEG로 저장 (손실 압축, 파일 용량 작음)
    saver.generate_and_save(
        prompt="풍경 사진, 일몰 해변",
        output_path="sunset.jpg",
        format="JPEG",
        quality=85
    )

    # WebP로 저장 (현대적인 형식, 품질과 용량의 균형)
    saver.generate_and_save(
        prompt="제품 전시 이미지",
        output_path="product.webp",
        format="WEBP",
        quality=90
    )

: APIYI(apiyi.com)를 통해 Nano Banana Pro API 액세스 권한을 얻으세요. 플랫폼에서 안정적인 접속 서비스를 제공하며, 가격은 공식 홈페이지의 20% 수준으로 저렴하고 대량 호출도 지원합니다.


Nano Banana Pro 이미지 형식 솔루션 비교

nano-banana-pro-image-output-format-png-jpg-control-ko 图示

형식 압축 유형 투명 채널 파일 크기 사용 시나리오
PNG 무손실 압축 ✅ 지원 디자인 소스, 아이콘, 투명 배경 필요 시
JPEG 손실 압축 ❌ 미지원 작음 사진, 풍경 이미지, 네트워크 전송
WebP 무손실/손실 선택 가능 ✅ 지원 최소 현대적인 웹 페이지, 모바일 앱

형식별 상세 설명

PNG 형식 사용 시나리오:

  • 투명 배경을 유지해야 하는 디자인 소스
  • 이미지 품질이 매우 중요한 경우
  • 반복적인 편집이 필요한 중간 작업 소스
  • 아이콘, 로고 등 경계선이 뚜렷해야 하는 이미지

JPEG 형식 사용 시나리오:

  • 사진류 이미지 (풍경, 인물, 제품 실사)
  • 네트워크 전송 시 파일 용량을 줄여야 하는 경우
  • 소셜 미디어(SNS) 공유
  • 투명 배경이 필요 없는 일반적인 이미지

WebP 형식 사용 시나리오:

  • 현대적인 웹 애플리케이션 (높은 브라우저 지원율)
  • 모바일 앱 내장 이미지
  • 품질과 용량을 모두 챙겨야 하는 경우
  • 애니메이션이 필요한 경우 (GIF 대체 가능)

Nano Banana Pro 이미지 형식 변환 심화 활용법

Node.js 버전 구현

const { GoogleGenerativeAI } = require("@google/generative-ai");
const fs = require("fs");
const sharp = require("sharp");

async function generateAndSave(prompt, outputPath, format = "png") {
  const genAI = new GoogleGenerativeAI("YOUR_API_KEY");
  const model = genAI.getGenerativeModel({ model: "nano-banana-pro" });

  const result = await model.generateContent(prompt);
  const response = await result.response;

  for (const part of response.candidates[0].content.parts) {
    if (part.inlineData) {
      const buffer = Buffer.from(part.inlineData.data, "base64");

      // 使用 sharp 转换格式
      let sharpInstance = sharp(buffer);

      switch (format.toLowerCase()) {
        case "png":
          sharpInstance = sharpInstance.png();
          break;
        case "jpeg":
        case "jpg":
          sharpInstance = sharpInstance.jpeg({ quality: 85 });
          break;
        case "webp":
          sharpInstance = sharpInstance.webp({ quality: 90 });
          break;
      }

      await sharpInstance.toFile(outputPath);
      console.log(`图片已保存: ${outputPath}`);
    }
  }
}

// 强制输出 PNG
generateAndSave("可爱的卡通角色", "character.png", "png");

cURL 명령줄 버전

# 调用 API 并保存为 PNG
curl -X POST "https://vip.apiyi.com/v1/models/nano-banana-pro:generateContent" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{"contents":[{"parts":[{"text":"一只可爱的橘猫"}]}]}' \
  | jq -r '.candidates[0].content.parts[] | select(.inlineData) | .inlineData.data' \
  | base64 --decode > output.png

echo "이미지가 output.png로 저장되었습니다"

자주 묻는 질문

Q1: 왜 제가 저장한 이미지가 열리지 않나요?

가장 흔한 원인은 base64 디코딩이 올바르지 않기 때문이에요. 다음 사항을 확인해 보세요:

  1. inline_data.data 필드의 전체 내용이 제대로 추출되었는지 확인하기
  2. 올바른 base64 디코딩 방법 사용하기
  3. 파일을 바이너리 모드로 쓰기 ("w"가 아닌 "wb" 사용)

문제가 계속된다면 API가 반환한 mimeType 필드를 확인하여 이미지 유형을 다시 한번 파악해 보세요.

Q2: PNG와 JPEG 중 AI 생성 이미지에 더 적합한 것은 무엇인가요?

사용 용도에 따라 달라요:

  • PNG: 추가 편집이 필요하거나, 투명 배경이 필요할 때, 또는 아주 높은 품질을 유지해야 하는 경우에 적합해요.
  • JPEG: 웹에 바로 게시하거나, 네트워크 전송이 잦을 때, 또는 파일 용량을 줄여야 하는 경우에 적합해요.

잘 모르겠다면 먼저 PNG(무손실)로 저장한 뒤, 나중에 필요에 따라 다른 형식으로 변환하는 것을 추천드려요.

Q3: Nano Banana Pro를 빠르게 테스트하려면 어떻게 해야 하나요?

APIYI 플랫폼을 사용하여 테스트하는 것을 추천드려요:

  1. APIYI(apiyi.com)에 접속하여 계정을 만드세요.
  2. Nano Banana Pro API Key를 발급받으세요.
  3. 이 글의 코드 예시를 활용해 보세요. 가격은 공식 사이트 대비 80%나 저렴합니다.
  4. 온라인 체험: imagen.apiyi.com에서 이미지 생성 효과를 직접 확인해 볼 수 있어요.

요약

Nano Banana Pro 이미지 형식 제어의 핵심 요점은 다음과 같아요:

  1. API는 base64 인코딩을 반환해요: inlineData.data는 형식이 중립적인 원시 데이터이므로, 저장할 때 형식을 자유롭게 선택할 수 있어요.
  2. 공식적으로는 형식 파라미터를 제공하지 않아요: Imagen 3와 달리, Nano Banana Pro는 output_mime_type 파라미터를 지원하지 않아요.
  3. 클라이언트 측에서 출력 형식을 제어해요: base64 디코딩 후 PIL이나 sharp 같은 도구를 사용해 PNG, JPEG, WebP 등으로 저장할 수 있어요.
  4. 상황에 맞는 형식을 선택하세요: PNG는 디자인 소재에, JPEG는 사진에, WebP는 현대적인 웹 애플리케이션에 적합해요.

base64 디코딩 원리를 이해하면 Nano Banana Pro가 생성한 이미지의 출력 형식을 완벽하게 제어할 수 있어요.

APIYI(apiyi.com)를 통해 Nano Banana Pro API 액세스 권한을 얻는 것을 추천드려요. 이 플랫폼은 안정적인 서비스를 제공하며, 가격은 공식 사이트의 20% 수준으로 대량 생성도 지원해요.


📚 참고 자료

⚠️ 링크 형식 설명: 모든 외부 링크는 자료명: domain.com 형식을 사용해요. 복사는 편리하지만 클릭 이동은 불가능하게 하여 SEO 점수 유실을 방지합니다.

  1. Google AI 이미지 생성 문서: 공식 API 모범 사례 가이드

    • 링크: ai.google.dev/gemini-api/docs/image-generation
    • 설명: inlineData 응답 구조와 코드 예시를 포함하고 있어요.
  2. Pillow (PIL) 문서: Python 이미지 처리 라이브러리

    • 링크: pillow.readthedocs.io
    • 설명: 다양한 이미지 형식의 읽기, 변환 및 저장을 지원해요.
  3. Sharp 문서: Node.js 고성능 이미지 처리 라이브러리

    • 링크: sharp.pixelplumbing.com
    • 설명: PNG/JPEG/WebP 형식 변환을 지원하며 성능이 뛰어나요.
  4. APIYI Nano Banana Pro 섹션: 연동 가이드

    • 링크: apiyi.com
    • 설명: 연동 문서, 코드 예시, 가격 정책 안내를 제공해요.

작성자: 기술팀
기술 교류: 댓글창에서 Nano Banana Pro 사용 팁을 자유롭게 공유해 주세요. 더 많은 자료는 APIYI(apiyi.com) 기술 커뮤니티에서 확인하실 수 있습니다.

Similar Posts