از Imagen به مدل تصویر Gemini («نانو بنانا») مهاجرت کنید


همه مدل‌های Imagen منسوخ شده‌اند و از ۱۷ اوت ۲۰۲۶ غیرفعال خواهند شد. این منسوخ شدن و خاموش شدن در سراسر Google و برای هر دو Gemini Developer API و Agent Platform Gemini API (formerly Vertex AI) اعمال می‌شود.

قبل‌از این تاریخ تعطیلی، برای جلوگیری از اختلال در سرویس، باید برنامه‌هایتان را از استفاده از مدل‌های Imagen به استفاده از مدل‌های Gemini 3.x Image (مدل‌های «نانو بنانا») منتقل کنید، همان‌طور که در این راهنما توضیح داده شده است.

اگر مشکل فوری‌ای درباره این منسوخ شدن و خاموش شدن دارید، با «پشتیبانی Firebase» تماس بگیرید.

مدل‌های تصویر Gemini جایگزین

برای انتخاب مدل جایگزین Gemini 3.x Image برای برنامه‌تان، جدول زیر را مرور کنید.

مدل Imagen ‫Gemini 3.x Image مدل («نانو موز»)
imagen-4.0-fast-generate-001 ‫gemini-3.1-flash-image (با سطح اندیشگر MINIMAL)
imagen-4.0-generate-001 ‫gemini-3.1-flash-image (با سطح اندیشگر HIGH)
imagen-4.0-ultra-generate-001 gemini-3-pro-image
imagen-3.0-capability-001 gemini-3.1-flash-image

انتقال دادن برنامه

این بخش نمونه‌های قبل و بعد از انتقال از مدل Imagen به مدل Gemini «تصویر» را نشان می‌دهد.

تولید تصویر از نوشتار

روی ارائه‌دهنده Gemini API خود کلیک کنید تا محتوا و کد مخصوص ارائه‌دهنده را در این صفحه مشاهده کنید.

برای تولید تصویر از نوشتار، با ایجاد تغییرات زیر، برنامه‌تان را انتقال دهید:

  • از مدل تصویر Gemini جایگزین مناسبی (مثل gemini-3.1-flash-image) استفاده کنید.

  • نمونه GenerativeModel ایجاد کنید (به‌جای نمونه ImagenModel).

  • گزینه‌های پیکربندی مدل را به‌روز کنید تا مدل‌های تصویر Gemini را دربر بگیرد.

    • به‌عنوان بخشی از این پیکربندی، یک روش پاسخ IMAGE تنظیم کنید.
      توجه داشته باشید که مدل‌های Gemini «تصویر» را می‌توان پیکربندی کرد تا هم تصاویر و هم نوشتار را برگرداند.

Swift

قبل‌از


import FirebaseAILogic

// Initialize the Gemini Developer API backend service.
let ai = FirebaseAI.firebaseAI(backend: .googleAI())

// Create an `ImagenModel` instance with a model that supports your use case.
let model = ai.imagenModel(modelName: "IMAGEN_MODEL_NAME")

// Provide an image generation prompt.
let prompt = "An astronaut riding a horse"

// To generate an image, call `generateImages` with the text prompt.
let response = try await model.generateImages(prompt: prompt)

// Handle the generated image.
guard let image = response.images.first else {
  fatalError("No image in the response.")
}
let uiImage = UIImage(data: image.data)

بعداز


import FirebaseAILogic

// Initialize the Gemini Developer API backend service.
let ai = FirebaseAI.firebaseAI(backend: .googleAI())

// Create a `GenerativeModel` instance with a Gemini model that supports image output.
let model = ai.generativeModel(
  modelName: "GEMINI_IMAGE_MODEL_NAME",
  generationConfig: GenerationConfig(
    responseModalities: [.image],
    imageConfig: ImageConfig(aspectRatio: .landscape4x3)
  )
)

// Provide an image generation prompt.
let prompt = "An astronaut riding a horse"

// To generate an image, call `generateContent` with the text prompt.
let response = try await model.generateContent(prompt)

// Handle the case where no images were generated.
guard let inlineDataPart = response.inlineDataParts.first else {
  fatalError("No image in the response.")
}

// Process the image.
guard let uiImage = UIImage(data: inlineDataPart.data) else {
  fatalError("Failed to convert data to UIImage.")
}

Kotlin

قبل‌از


// Initialize the Gemini Developer API backend service.
val ai = Firebase.ai(backend = GenerativeBackend.googleAI())

// Create an `ImagenModel` instance with an Imagen model that supports your use case.
val model = ai.imagenModel("IMAGEN_MODEL_NAME")

// Provide an image generation prompt.
val prompt = "An astronaut riding a horse"

// To generate an image, call `generateImages` with the text prompt.
val imageResponse = model.generateImages(prompt)

// Handle the generated image.
val image = imageResponse.images.first()

val bitmapImage = image.asBitmap()

بعداز


// Initialize the Gemini Developer API backend service.
val ai = Firebase.ai(backend = GenerativeBackend.googleAI())

// Create a `GenerativeModel` instance with a Gemini model that supports image output.
val model = ai.generativeModel(
    modelName = "GEMINI_IMAGE_MODEL_NAME",
    generationConfig = generationConfig {
      responseModalities = listOf(ResponseModality.IMAGE),
      imageConfig = imageConfig {
        aspectRatio = AspectRatio.LANDSCAPE_4x3
      }
    }
)

// Provide an image generation prompt.
val prompt = "An astronaut riding a horse"

// To generate an image, call `generateContent` with the text prompt.
val imageResponse = model.generateContent(prompt)

if (imageResponse.finishReason == FinishReason.NO_IMAGE) {
  // Handle the case where no images were generated.
} else {
  // Handle the generated image.
  val bitmapImage = imageResponse.candidates.first().content.parts.filterIsInstance().firstOrNull()?.image
}

Java

قبل‌از


// Initialize the Gemini Developer API backend service.
// Create an `ImagenModel` instance with an Imagen model that supports your use case.
ImagenModel imagenModel = FirebaseAI.getInstance(GenerativeBackend.googleAI())
        .imagenModel(
                /* modelName */ "IMAGEN_MODEL_NAME");

ImagenModelFutures model = ImagenModelFutures.from(imagenModel);

// Provide an image generation prompt.
String prompt = "An astronaut riding a horse";

// To generate an image, call `generateImages` with the text prompt.
Futures.addCallback(model.generateImages(prompt), new FutureCallback<ImagenGenerationResponse>() {
    @Override
    public void onSuccess(ImagenGenerationResponse result) {
        if (result.getImages().isEmpty()) {
            Log.d("TAG", "No images generated");
        }
        Bitmap bitmap = result.getImages().get(0).asBitmap();
        // Use the bitmap to display the image in your UI.
    }

    @Override
    public void onFailure(Throwable t) {
        // ...
    }
}, Executors.newSingleThreadExecutor());

بعداز


// Initialize the Gemini Developer API backend service.
// Create a `GenerativeModel` instance with a Gemini model that supports image output.
GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI()).generativeModel(
    "GEMINI_IMAGE_MODEL_NAME",
    new GenerationConfig.Builder()
        .setResponseModalities(Arrays.asList(ResponseModality.IMAGE))
        .setImageConfig(new ImageConfig(AspectRatio.LANDSCAPE_4x3, null))
        .build()
);

GenerativeModelFutures model = GenerativeModelFutures.from(ai);

// Provide a text prompt instructing the model to generate an image.
Content prompt = new Content.Builder()
        .addText("An astronaut riding a horse")
        .build();

// To generate an image, call `generateContent` with the text input.
Executor executor = Executors.newSingleThreadExecutor();
ListenableFuture response = model.generateContent(prompt);
Futures.addCallback(response, new FutureCallback() {
    @Override
    public void onSuccess(GenerateContentResponse result) {
        if (result.finishReason == FinishReason.NO_IMAGE) {
            // handle the case where no images were generated
            return;
        }
        // iterate over all the parts in the first candidate in the result object.
        for (Part part : result.getCandidates().get(0).getContent().getParts()) {
            if (part instanceof ImagePart) {
                ImagePart imagePart = (ImagePart) part;
                // The returned image as a bitmap
                Bitmap generatedImageAsBitmap = imagePart.getImage();
                break;
            }
        }
    }

    @Override
    public void onFailure(Throwable t) {
        t.printStackTrace();
    }
}, executor);

Web

قبل‌از


import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, getImagenModel, GoogleAIBackend } from "firebase/ai";

// TODO(developer): Replace the following with your app's Firebase configuration
const firebaseConfig = {
  // ...
};

// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);

// Initialize the Gemini Developer API backend service.
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

// Create an `ImagenModel` instance with an Imagen model that supports your use case.
const model = getImagenModel(ai, { model: "IMAGEN_MODEL_NAME" });

// Provide an image generation prompt.
const prompt = "An astronaut riding a horse.";

// To generate an image, call `generateImages` with the text prompt.
const response = await model.generateImages(prompt)

// If fewer images were generated than were requested,
// then `filteredReason` will describe the reason they were filtered out.
if (response.filteredReason) {
  console.log(response.filteredReason);
}

if (response.images.length == 0) {
  throw new Error("No images in the response.")
}

const image = response.images[0];

بعداز


import { initializeApp } from "firebase/app";
import {
  getAI,
  getGenerativeModel,
  GoogleAIBackend,
  ResponseModality,
  ImageConfigAspectRatio,
  FinishReason
} from "firebase/ai";

// TODO(developer): Replace the following with your app's Firebase configuration
const firebaseConfig = {
  // ...
};

// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);

// Initialize the Gemini Developer API backend service.
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

// Create a `GenerativeModel` instance with a model that supports your use case.
const model = getGenerativeModel(ai, {
  model: "GEMINI_IMAGE_MODEL_NAME",
  generationConfig: {
    responseModalities: [ResponseModality.IMAGE],
    imageConfig: {
      aspectRatio: ImageConfigAspectRatio.LANDSCAPE_4x3
    }
  },
});

// Provide an image generation prompt.
const prompt = "An astronaut riding a horse.";

// To generate an image, call `generateContent` with the text prompt.
const result = await model.generateContent(prompt);

// Handle the generated image.
try {
  const response = result.response;
  if (response.candidates?.[0].finishReason == FinishReason.NO_IMAGE) {
    // Handle the case where no images were generated.
  }
  const inlineDataParts = response.inlineDataParts();
  if (inlineDataParts?.[0]) {
    const image = inlineDataParts[0].inlineData;
    // Use this mimeType and base64 data to display the image using your preferred tooling.
    console.log(image.mimeType, image.data);
  }
} catch (err) {
  console.error('Prompt or candidate was blocked:', err);
}

Dart

قبل‌از


import 'package:firebase_ai/firebase_ai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';

// Initialize FirebaseApp
await Firebase.initializeApp(
  options: DefaultFirebaseOptions.currentPlatform,
);

// Initialize the Gemini Developer API backend service.
final ai = FirebaseAI.googleAI();

// Create an `ImagenModel` instance with an Imagen model that supports your use case.
final model = ai.imagenModel(model: 'IMAGEN_MODEL_NAME');

// Provide an image generation prompt.
const prompt = 'An astronaut riding a horse.';

// To generate an image, call `generateImages` with the text prompt.
final response = await model.generateImages(prompt);

if (response.images.isNotEmpty) {
  final image = response.images[0];
  // Process the image.
} else {
  // Handle the case where no images were generated.
  print('Error: No images were generated.');
}

بعداز


import 'package:firebase_ai/firebase_ai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';

// Initialize FirebaseApp
await Firebase.initializeApp(
  options: DefaultFirebaseOptions.currentPlatform,
);

// Initialize the Gemini Developer API backend service.
final ai = FirebaseAI.googleAI();

// Create a `GenerativeModel` instance with a Gemini model that supports image output.
final model = ai.generativeModel(
  model: 'GEMINI_IMAGE_MODEL_NAME',
  generationConfig: GenerationConfig(
    responseModalities: [ResponseModalities.image],
    imageConfig: ImageConfig(aspectRatio: ImageAspectRatio.landscape4x3)
  ),
);

// Provide a text prompt instructing the model to generate an image.
final prompt = [Content.text('An astronaut riding a horse.')];

// To generate an image, call `generateContent` with the text prompt.
final response = await model.generateContent(prompt);
if (response.inlineDataParts.isNotEmpty) {
  final imageBytes = response.inlineDataParts.first.bytes;
  // Process the image.
} else {
  // Handle the case where no images were generated.
  print('Error: No images were generated.');
}

Unity

قبل‌از


using Firebase.AI;

// Initialize the Gemini Developer API backend service
var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());

// Create an `ImagenModel` instance with a model that supports your use case
var model = ai.GetImagenModel(modelName: "IMAGEN_MODEL_NAME");

// Provide an image generation prompt
var prompt = "An astronaut riding a horse";

// To generate an image, call `generateImages` with the text prompt
var response = await model.GenerateImagesAsync(prompt: prompt);

// Handle the generated image
if (response.Images.Count == 0) {
  throw new Exception("No image in the response.");
}
var image = response.Images[0].AsTexture2D();

بعداز


using Firebase;
using Firebase.AI;

// Initialize the Gemini Developer API backend service.
var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());

// Create a `GenerativeModel` instance with a Gemini model that supports image output.
var model = ai.GetGenerativeModel(
  modelName: "GEMINI_IMAGE_MODEL_NAME",
  generationConfig: new GenerationConfig(
    responseModalities: new[] { ResponseModality.Image },
    imageConfig: new ImageConfig(aspectRatio: ImageConfig.AspectRatio.Landscape4x3)
  )
);

// Provide an image generation prompt.
var prompt = "An astronaut riding a horse";

// To generate an image, call `GenerateContentAsync` with the text prompt.
var response = await model.GenerateContentAsync(prompt);

if (response.Candidates.First().FinishReason == FinishReason.NoImage) {
  // Handle the case where no images were generated.
}

// Handle the generated image.
var imageParts = response.Candidates.First().Content.Parts
                         .OfType<ModelContent.InlineDataPart>()
                         .Where(part => part.MimeType == "image/png");

foreach (var imagePart in imageParts) {
  // Load the Image into a Unity Texture2D object.
  UnityEngine.Texture2D texture2D = new(2, 2);
  if (texture2D.LoadImage(imagePart.Data.ToArray())) {
    // Do something with the image.
  }
}

گزینه‌های پیکربندی جایگزین

این بخش گزینه‌های جایگزین برای پیکربندی‌های مختلف مدل را شرح می‌دهد تا به کنترل پاسخ مدل کمک کند.

تنظیمات ایمنی

تنظیمات ایمنی را برای مدل‌های Imagen بااستفاده از ImagenSafetySettings پیکربندی می‌کنید. بااین‌حال، برای مدل‌های تصویر Gemini، باید به استفاده از SafetySetting مهاجرت کنید.

پارامترهای پیکربندی مدل

‫Imagen مدل را با ImagenGenerationConfig پیکربندی می‌کنید. بااین‌حال، برای Gemini مدل‌های تصویر، باید به استفاده از GenerationConfig و به‌صورت اختیاری ImageConfig انتقال دهید (این مورد از نسخه‌های اوایل مه ۲۰۲۶ «کیت‌های توسعه نرم‌افزار» دردسترس است).

به‌عنوان بخشی از GenerationConfig، حالت پاسخ را روی IMAGE تنظیم کنید (همان‌طور که در نمونه‌های کد «بعداز» در ابتدای این راهنما نشان داده شده است). توجه داشته باشید که می‌توانید به‌صورت اختیاری مدل‌های Gemini تصویر را پیکربندی کنید تا هم IMAGE و TEXT را برگرداند.

برای آشنایی با نحوه انتقال پارامترهای پیکربندی مدل از Imagen به مدل‌های تصویر Gemini، جدول زیر را مرور کنید:

مدل‌های Imagen ‫Gemini 3.x Image مدل («نانو موز»)
addWatermark

پشتیبانی نمی‌شود

Gemini مدل‌های تصویر همیشه تصاویر تولیدشده را با ته‌نقش SynthID برمی‌گردانند.

aspectRatio

استفاده از aspectRatio در ImageConfig

برای نمونه‌های کد و مقادیر پشتیبانی‌شده، پیکربندی تولید تصویر در راهنمای Gemini مدل‌های تصویر را ببینید.

imageFormat

پشتیبانی نمی‌شود

Gemini مدل‌های تصویر همیشه تصاویر تولیدشده را در قالب PNG برمی‌گردانند.

negativePrompt

پشتیبانی نمی‌شود

توجه داشته باشید که پیام‌واره‌های منفی یک ویژگی قدیمی هستند و از imagen-3.0-generate-002 (یا توسط هیچ‌یک از مدل‌های Imagen 4) پشتیبانی نمی‌شوند.

numberOfImages

پشتیبانی نمی‌شود

Gemini مدل‌های تصویر همیشه یک تصویر تولیدشده واحد برمی‌گردانند.
به‌عنوان راهکار موقت، می‌توانید تولید را در یک حلقه اجرا کنید تا به همان نتیجه برسید. توجه داشته باشید که تعداد نامزدها به‌عنوان جایگزین کار نمی‌کند.

personGeneration

پشتیبانی نمی‌شود

به‌طور پیش‌فرض، مدل‌های تصویر Gemini اجازه تولید تصاویر افراد را می‌دهند.