产品资讯

利用 AI 图片生成功能提升用户互动度

阅读用时:5 分钟

在应用中添加自定义图片可以显著改善和个性化用户体验,并提高用户互动度。本文将探讨 Firebase AI Logic 的两项全新图片生成功能:目前处于预览阶段的专用 Imagen 编辑功能,以及已正式发布的 Gemini 2.5 Flash Image(又称“Nano Banana”),后者专为情境化或对话式图片生成而设计。

利用 Firebase AI Logic 生成的图片提升用户互动度

图片生成模型可用于创建自定义用户个人资料头像,或将个性化视觉资源直接集成到关键界面流程中。 

例如,Imagen 提供了新的编辑功能(开发者预览版)。现在,您可以绘制一个遮罩,并利用修复功能在遮罩区域内生成像素。此外,您还可以使用外扩功能在遮罩外部生成像素。  

Imagen inpainting.png

Imagen 支持图像修复,可仅生成图片的一部分。 

或者,Gemini 2.5 Flash Image(又称 Nano Banana)可以利用 Gemini 模型丰富的世界知识和推理能力,生成与上下文相关的图片,非常适合创建与用户当前应用内体验相符的动态插图。   

 

In-context nano banana illustration.png

使用 Gemini 2.5 Flash Image 创建与应用上下文相关的动态插图。

最后,用户可以通过对话和迭代方式编辑图片,即使用自然语言编辑照片。

 

photo edit natural language.png

使用 Gemini 2.5 Flash Image,通过自然语言编辑图片。

在开始将 AI 集成到应用中时,请务必了解 AI 安全。尤其重要的是,评估应用的安全风险,考虑进行调整以降低安全风险,根据应用场景执行安全测试,并征求用户反馈和监控内容。

Imagen 或 Gemini:任您选择

Gemini 2.5 Flash Image(“Nano Banana”)和 Imagen 的区别在于其主要侧重点和高级功能。Gemini 2.5 Flash Image 是 Gemini 系列中的一款图片模型,擅长对话式图片编辑,可在多次迭代中保持上下文和主体的一致性,并利用“世界知识和推理”来创建与上下文相关的视觉内容,或在长文本序列中嵌入准确的视觉内容。

Imagen 是 Google 的专用图片生成模型,旨在提供更强大的创意控制能力,专注于生成高度逼真的输出、艺术细节和特定风格,并提供明确的控制选项来指定生成图片的宽高比或格式。

Gemini 2.5 Flash Images 
(Nano Banana 🍌)
Imagen

🌎 具备世界知识和推理能力,可生成更符合语境的图片

💬 通过对话方式编辑图片,同时保持上下文
  

📖 在长文本序列中嵌入准确的视觉效果

📐 指定生成图片的宽高比或格式

 

🖌️支持基于蒙版的编辑,可用于内绘和外绘。

 

🎚️ 更好地控制生成式图像的细节(质量、艺术细节和特定风格)

我们来看看如何在应用中使用它们。

使用 Imagen 进行图像修复

几个月前,我们为 Imagen 发布了新的编辑功能。虽然 Imagen 现在已可用于生成图片,但编辑功能仍处于开发者预览版阶段。

Imagen 编辑功能包括修复和扩绘,这些都是基于蒙版的图片编辑功能。借助这项新功能,用户可以修改图片的特定区域,而无需重新生成整张图片。这意味着您可以保留图片中最好的部分,只修改您想要更改的部分。

Imagen inpainting dog.png

使用 Imagen 编辑功能对图片进行精准、有针对性的更改,并确保图片的其余部分保持完整

这些更改是在保留原始图片的核心元素和整体完整性的同时进行的,并且仅修改了遮罩中的区域。

如需使用 Imagen 实现图像修复,请先初始化 imagen-3.0-capability-001 支持编辑功能的特定 Imagen 模型:

// Copyright 2025 Google LLC.
// SPDX-License-Identifier: Apache-2.0
val editingModel =
        Firebase.ai(backend = GenerativeBackend.vertexAI()).imagenModel(
            "imagen-3.0-capability-001",
            generationConfig = ImagenGenerationConfig(
                numberOfImages = 1,
                aspectRatio = ImagenAspectRatio.SQUARE_1x1,
                imageFormat = ImagenImageFormat.jpeg(compressionQuality = 75),
            ),
        )

然后,定义 inpainting 函数:

// Copyright 2025 Google LLC.
// SPDX-License-Identifier: Apache-2.0

val prompt = "remove the pancakes and make it an omelet instead"

suspend fun inpaintImageWithMask(sourceImage: Bitmap, maskImage: Bitmap, prompt: String, editSteps: Int = 50): Bitmap {
        val imageResponse = editingModel.editImage(
            referenceImages = listOf(
                ImagenRawImage(sourceImage.toImagenInlineImage()),
                ImagenRawMask(maskImage.toImagenInlineImage()),
            ),
            prompt = prompt,
            config = ImagenEditingConfig(
                editMode = ImagenEditMode.INPAINT_INSERTION,
                editSteps = editSteps,
            ),
        )
        return imageResponse.images.first().asBitmap()
    }

您需要提供 sourceImage、maskImage、修改提示以及要执行的修改步骤数。

您可以在 Android AI 示例目录中的 Imagen 修改示例中查看其实际效果!

Imagen 还支持扩绘,让模型在蒙版之外生成像素。您还可以使用 Imagen 的图片自定义功能来更改图片风格或更新图片中的主体。如需了解详情,请参阅 Android 开发者文档。

使用 Gemini 2.5 Flash Image 进行对话式图片生成

使用 Gemini 2.5 Flash Image 修改图片的一种方法是使用模型的多轮对话功能。

首先,初始化模型:

// Copyright 2025 Google LLC.
// SPDX-License-Identifier: Apache-2.0

val model = Firebase.ai(backend = GenerativeBackend.googleAI()).generativeModel(
    modelName = "gemini-2.5-flash-image",
    // Configure the model to respond with text and images (required)
    generationConfig = generationConfig {
        responseModalities = listOf(ResponseModality.TEXT,
        ResponseModality.IMAGE)
    }
)

为了实现与上述基于遮罩的 Imagen 方法类似的效果,我们可以利用 chat API 与 Gemini 2.5 Flash Image 启动对话。

// Copyright 2025 Google LLC.
// SPDX-License-Identifier: Apache-2.0

// Initialize the chat
val chat = model.startChat()


// Load a bitmap
val source = ImageDecoder.createSource(context.contentResolver, uri)
val bitmap = ImageDecoder.decodeBitmap(source)


// Create the initial prompt instructing the model to edit the image
val prompt = content {
    image(bitmap)
    text("remove the pancakes and add an omelet")
}

// To generate an initial response, send a user message with the image and text prompt
var response = chat.sendMessage(prompt)

// Inspect the returned image
var generatedImageAsBitmap = response
    .candidates.first().content.parts.filterIsInstance<ImagePart>().firstOrNull()?.image

// Follow up requests do not need to specify the image again
response = chat.sendMessage("Now, center the omelet in the pan")
generatedImageAsBitmap = response
    .candidates.first().content.parts.filterIsInstance<ImagePart>().firstOrNull()?.image

您可以在 Android AI 示例目录中的 Gemini Image Chat 示例中查看其实际应用,并在 Android 文档中详细了解该功能。

总结

Imagen 和 Gemini 2.5 Flash Image 都提供强大的功能,您可以根据具体的使用场景选择理想的图片生成模型,打造个性化的应用体验并提升用户互动度。

作者:
继续阅读