نقل البيانات من Imagen إلى أحد نماذج معالجة الصور من Gemini ‏ ("Nano Banana")


تم إيقاف جميع نماذج Imagen نهائيًا وسيتم إيقافها في 24 يونيو 2026. ينطبق هذا الإيقاف النهائي على جميع منتجات Google وعلى كلٍّ من Gemini Developer API و Vertex AI Gemini API.

قبل تاريخ الإيقاف النهائي هذا، عليك نقل تطبيقاتك من استخدام نماذج Imagen إلى استخدام نماذج Gemini لإنشاء الصور (نماذج "Nano Banana")، كما هو موضّح في هذا الدليل، وذلك لتجنُّب انقطاع الخدمة.

إذا واجهتك مشكلة عاجلة تتعلّق بهذا الإيقاف النهائي، يُرجى التواصل مع فريق دعم Firebase.

نماذج الصور البديلة Gemini

راجِع الجدول التالي لاختيار نموذج لإنشاء الصور بديل لتطبيقك.Gemini

نموذج Imagen Gemini نماذج لإنشاء الصور ("Nano Banana")
imagen-4.0-fast-generate-001 gemini-2.5-flash-image (متاح للجميع)
gemini-3.1-flash-image-preview (مع مستوى التفكير MINIMAL)
imagen-4.0-generate-001 gemini-2.5-flash-image (متاح للجميع)
gemini-3.1-flash-image-preview (مع مستوى التفكير HIGH)
imagen-4.0-ultra-generate-001 gemini-2.5-flash-image (متاح للجميع)
gemini-3-pro-image-preview
imagen-3.0-capability-001 gemini-2.5-flash-image (متاح للجميع)
gemini-3.1-flash-image-preview

نقل تطبيقك

يعرض هذا القسم أمثلة قبل وبعد عملية النقل من نموذج Imagen إلى نموذج Gemini لإنشاء الصور.

إنشاء صورة من نص

انقر على موفّر Gemini API لعرض المحتوى والرمز البرمجي الخاصَّين بالموفّر على هذه الصفحة.

لإنشاء صورة من نص، عليك نقل تطبيقك:

  • استخدِم نموذج Gemini لإنشاء الصور بديل مناسب Gemini (مثل gemini-2.5-flash-image).

  • أنشِئ مثيلاً من GenerativeModel (بدلاً من مثيل من ImagenModel).

  • عدِّل خيارات إعداد النموذج لتتوافق مع Gemini نماذج لإنشاء الصور.

    • كجزء من هذا الإعداد، اضبط وضع الاستجابة على IMAGE.
      يُرجى العِلم أنّه يمكن إعداد نماذج Gemini لإنشاء الصور لعرض كلٍّ من الصور والنصوص.
  • (Vertex AI Gemini API فقط) عدِّل الموقع الجغرافي الذي تصل منه إلى النموذج ليصبح موقعًا جغرافيًا متوافقًا مع نماذج Gemini لإنشاء الصور. ننصحك باستخدام global.

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 متداخلة بشكل اختياري (تتوفّر هذه الميزة بدءًا من إصدارات حِزم تطوير البرامج (SDK) التي تم طرحها في أوائل مايو 2026).

كجزء من GenerationConfig، اضبط وضع الاستجابة على IMAGE (كما هو موضّح في نماذج الرموز البرمجية "بعد" في وقت سابق من هذا الدليل). يُرجى العِلم أنّه يمكنك إعداد نماذج Gemini لإنشاء الصور بشكل اختياري لعرض كلٍّ من IMAGE و TEXT.

راجِع الجدول التالي لفهم كيفية نقل مَعلمات إعداد النموذج من Imagen إلى نماذج Gemini لإنشاء الصور:

نماذج Imagen Gemini نماذج لإنشاء الصور ("Nano Banana")
addWatermark

غير متاح

تعرض نماذج Gemini لإنشاء الصور دائمًا الصور التي يتم إنشاؤها بعلامة مائية من SynthID.

aspectRatio

استخدِم aspectRatio في ImageConfig

للاطّلاع على نماذج الرموز البرمجية والقيم المسموح بها، يُرجى الرجوع إلى دليل إعداد إنشاء الصور في نماذج Gemini لإنشاء الصور.

imageFormat

غير متاح

تعرض نماذج Gemini لإنشاء الصور دائمًا الصور التي يتم إنشاؤها بتنسيق PNG.

negativePrompt

غير متاح

يُرجى العِلم أنّ الطلبات السلبية هي ميزة قديمة، ولم تعُد متاحة منذ imagen-3.0-generate-002 (أو أي من نماذج Imagen 4).

numberOfImages

غير متاح

تعرض نماذج Gemini لإنشاء الصور دائمًا صورة واحدة تم إنشاؤها.
كحلّ بديل، يمكنك تشغيل عملية الإنشاء في حلقة لتحقيق النتيجة نفسها. يُرجى العِلم أنّ عدد المرشّحين لا يعمل كبديل.

personGeneration

غير متاح

تتيح نماذج Gemini لإنشاء الصور بشكل تلقائي إنشاء صور للأشخاص.