|

كيفية فرض إخراج تنسيق PNG في Nano Banana Pro: 3 طرق لحل مشكلات تنسيق الصور

ملاحظة المؤلف: شرح مفصل لطرق التحكم في تنسيق مخرجات الصور في Nano Banana Pro API، وكيفية الحفظ بتنسيق PNG عبر فك تشفير base64، مع أمثلة برمجية كاملة.

عند استخدام Nano Banana Pro API لتوليد الصور، يواجه الكثير من المطورين تساؤلاً: كيف يمكن فرض إخراج الصور بتنسيق PNG بدلاً من JPG؟ سيوضح هذا المقال الإجابة بالتفصيل، وسيقدم لك عدة حلول عملية.

القيمة الجوهرية: بعد قراءة هذا المقال، ستتقن مبادئ التحكم في تنسيق صور Nano Banana Pro، وستتعلم كيفية فك تشفير base64 لحفظ الصور بأي تنسيق تريده.

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


النقاط الأساسية لإخراج تنسيقات الصور في نانو بنانا برو (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 – لا يوفر معلمة output_mime_type كما هو الحال في Imagen 3.

يرجع ذلك إلى أن تصميم استجابة API في نانو بنانا برو يختلف عن واجهات برمجة تطبيقات توليد الصور التقليدية:

  • Imagen 3: نموذج مخصص لتوليد الصور، يدعم معلمات مثل output_mime_type='image/jpeg' أو 'image/png'.
  • Nano Banana Pro: قدرة توليد صور ضمن نموذج متعدد الوسائط، حيث يتم إرجاع بيانات الصورة الخام مشفرة بصيغة base64.

لذلك، يجب التحكم في تنسيق صور نانو بنانا برو عند جانب العميل (أثناء الحفظ)، وليس عند إرسال طلب API.

تحليل بنية استجابة inlineData

تأتي بنية الاستجابة من API نانو بنانا برو كما يلي:

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

شرح الحقول الرئيسية:

الحقل الشرح
inlineData.mimeType نوع MIME للصورة، وعادة ما يكون image/png
inlineData.data سلسلة نصية بترميز base64 تمثل الصورة

بما أن حقل data هو بيانات الصورة الخام بترميز base64، يمكنك حفظها بأي تنسيق تريده بعد فك التشفير.

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


دليل سريع للتحكم في تنسيقات صور Nano Banana Pro

الطريقة الأولى: الحفظ مباشرة بتنسيق 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
    )

نصيحة: احصل على صلاحية الوصول إلى Nano Banana Pro API عبر APIYI (apiyi.com). توفر المنصة خدمة وصول مستقرة، بسعر يمثل 20% فقط من السعر الرسمي، وتدعم الاستدعاءات الجماعية.


مقارنة حلول تنسيق الصور في Nano Banana Pro

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

التنسيق نوع الضغط قناة الشفافية حجم الملف سيناريو الاستخدام
PNG ضغط بدون فقدان ✅ مدعوم كبير نسبياً عناصر التصميم، الأيقونات، الخلفيات الشفافة
JPEG ضغط مع فقدان ❌ غير مدعوم صغير الصور الفوتوغرافية، المناظر، النقل عبر الشبكة
WebP بدون/مع فقدان ✅ مدعوم الأصغر تطبيقات الويب الحديثة، تطبيقات الجوال

تفاصيل كل تنسيق

سيناريوهات استخدام تنسيق PNG:

  • عناصر التصميم التي تتطلب خلفية شفافة.
  • المشاهد التي تتطلب جودة صورة فائقة الدقة.
  • المواد الوسيطة التي تحتاج إلى تحرير متكرر.
  • الأيقونات والشعارات التي تتطلب حواف حادة وواضحة.

سيناريوهات استخدام تنسيق JPEG:

  • الصور الفوتوغرافية (مناظر طبيعية، أشخاص، صور منتجات واقعية).
  • عند الحاجة للتحكم في حجم الملف للنقل عبر الإنترنت.
  • المشاركة عبر وسائل التواصل الاجتماعي.
  • الصور العامة التي لا تتطلب خلفية شفافة.

سيناريوهات استخدام تنسيق 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"

الأسئلة الشائعة

س1: لماذا لا يمكنني فتح الصورة التي حفظتها؟

السبب الأكثر شيوعاً هو فك تشفير base64 بشكل غير صحيح. تأكد من:

  1. استخراج المحتوى الكامل لحقل inline_data.data.
  2. استخدام طريقة فك تشفير base64 الصحيحة.
  3. الكتابة إلى الملف في وضع الثنائي (Binary mode) (استخدم "wb" بدلاً من "w").

إذا استمرت المشكلة، تحقق من حقل mimeType الذي يرجعه الـ API للتأكد من نوع الصورة.

س2: أيهما أفضل للصور التي يتم إنشاؤها بواسطة الذكاء الاصطناعي: PNG أم JPEG؟

يعتمد ذلك على الغرض من الاستخدام:

  • PNG: مناسب للحالات التي تتطلب تحريراً لاحقاً، أو خلفيات شفافة، أو جودة عالية جداً.
  • JPEG: مناسب للنشر المباشر، أو النقل عبر الشبكة، أو الحالات التي تتطلب التحكم في حجم الملف.

إذا لم تكن متأكداً، نوصي بالحفظ بتنسيق PNG (بدون فقدان للجودة) أولاً، ثم التحويل إلى تنسيقات أخرى عند الحاجة.

س3: كيف يمكنني البدء بسرعة في اختبار Nano Banana Pro؟

نوصي باستخدام منصة APIYI لإجراء الاختبارات:

  1. قم بزيارة APIYI عبر apiyi.com لإنشاء حساب.
  2. احصل على مفتاح API (API Key) لنموذج Nano Banana Pro.
  3. استخدم أمثلة الأكواد البرمجية الواردة في هذا المقال، حيث يبلغ السعر 20% فقط من السعر الرسمي.
  4. التجربة عبر الإنترنت: يمكنك اختبار نتائج توليد الصور مباشرة عبر imagen.apiyi.com.

الملخص

النقاط الأساسية للتحكم في تنسيق الصور في Nano Banana Pro:

  1. تعيد واجهة البرمجيات (API) ترميز base64: تُعد inlineData.data بيانات خاماً محايدة التنسيق، مما يمنحك الحرية في اختيار التنسيق الذي تفضله عند الحفظ.
  2. لا تتوفر معلمات رسمية لتحديد التنسيق: على عكس Imagen 3، لا يدعم Nano Banana Pro معلمة output_mime_type.
  3. التحكم في تنسيق المخرجات عبر العميل (Client): بعد فك ترميز base64، يمكنك استخدام أدوات مثل PIL أو sharp للحفظ بتنسيقات PNG أو JPEG أو WebP.
  4. اختيار التنسيق حسب حالة الاستخدام: يناسب تنسيق PNG مواد التصميم، بينما يفضل استخدام JPEG للصور الفوتوغرافية، وWebP لتطبيقات الويب الحديثة.

بمجرد فهم مبدأ فك ترميز base64، ستتمكن من التحكم بشكل كامل في تنسيق مخرجات الصور الناتجة عن Nano Banana Pro.

نوصي بالحصول على صلاحية الوصول إلى واجهة برمجة تطبيقات Nano Banana Pro عبر APIYI (apiyi.com)؛ حيث توفر المنصة خدمة مستقرة بأسعار تبلغ 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. قسم Nano Banana Pro في APIYI: وثائق الوصول التقنية

    • الرابط: apiyi.com
    • الوصف: يوفر وثائق تقنية، وأمثلة برمجية، وتفاصيل التسعير.

المؤلف: الفريق التقني
التبادل التقني: نرحب بمناقشة تقنيات استخدام Nano Banana Pro في قسم التعليقات. لمزيد من المعلومات، يمكنك زيارة المجتمع التقني لمنصة APIYI على apiyi.com.

موضوعات ذات صلة