تتيح واجهة برمجة التطبيقات Gemini API إنشاء الصور باستخدام Gemini 2.0 Flash Experimental و باستخدام Imagen 3. يساعدك هذا الدليل في بدء استخدام كلا النموذجَين.
إنشاء صور باستخدام Gemini
يتيح الإصدار التجريبي من Gemini 2.0 Flash إمكانية عرض النص والصور المضمّنة. يتيح لك ذلك استخدام Gemini لتعديل الصور من خلال المحادثة أو إنشاء مخرجات تتضمّن نصًا متداخلًا (على سبيل المثال، إنشاء مشاركة مدونة تتضمّن نصًا و صورًا في خطوة واحدة). تتضمّن جميع الصور التي يتم إنشاؤها علامة مائية SynthID، وتتضمّن الصور في Google AI Studio علامة مائية مرئية أيضًا.
يوضّح المثال التالي كيفية استخدام Gemini 2.0 لإنشاء ناتج يتضمن نصًا وصورة:
from google import genai
from google.genai import types
from PIL import Image
from io import BytesIO
import base64
client = genai.Client()
contents = ('Hi, can you create a 3d rendered image of a pig '
'with wings and a top hat flying over a happy '
'futuristic scifi city with lots of greenery?')
response = client.models.generate_content(
model="gemini-2.0-flash-exp-image-generation",
contents=contents,
config=types.GenerateContentConfig(
response_modalities=['Text', 'Image']
)
)
for part in response.candidates[0].content.parts:
if part.text is not None:
print(part.text)
elif part.inline_data is not None:
image = Image.open(BytesIO((part.inline_data.data)))
image.save('gemini-native-image.png')
image.show()
const { GoogleGenerativeAI } = require("@google/generative-ai");
const fs = require("fs");
const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY);
async function generateImage() {
const contents = "Hi, can you create a 3d rendered image of a pig " +
"with wings and a top hat flying over a happy " +
"futuristic scifi city with lots of greenery?";
// Set responseModalities to include "Image" so the model can generate an image
const model = genAI.getGenerativeModel({
model: "gemini-2.0-flash-exp-image-generation",
generationConfig: {
responseModalities: ['Text', 'Image']
},
});
try {
const response = await model.generateContent(contents);
for (const part of response.response.candidates[0].content.parts) {
// Based on the part type, either show the text or save the image
if (part.text) {
console.log(part.text);
} else if (part.inlineData) {
const imageData = part.inlineData.data;
const buffer = Buffer.from(imageData, 'base64');
fs.writeFileSync('gemini-native-image.png', buffer);
console.log('Image saved as gemini-native-image.png');
}
}
} catch (error) {
console.error("Error generating content:", error);
}
}
generateImage();
curl -s -X POST \
"https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash-exp-image-generation:generateContent?key=$GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [{
"parts": [
{"text": "Hi, can you create a 3d rendered image of a pig with wings and a top hat flying over a happy futuristic scifi city with lots of greenery?"}
]
}],
"generationConfig":{"responseModalities":["Text","Image"]}
}' \
| grep -o '"data": "[^"]*"' \
| cut -d'"' -f4 \
| base64 --decode > gemini-native-image.png

استنادًا إلى الطلب والسياق، سينشئ Gemini محتوى بأشكال مختلفة، مثل تحويل النص إلى صورة أو تحويل النص إلى صورة ونص، وما إلى ذلك. وإليك بعض الأمثلة:
- تحويل النص إلى صورة
- مثال على طلب: "أريد إنشاء صورة لبرج إيفل مع عرض للألعاب النارية في الخلفية".
- تحويل النص إلى صور ونص (مُدرَج)
- مثال على طلب: "أريد إنشاء وصفة مُوضَّحة لطبق البايلا".
- الصور والنصوص إلى صور ونصوص (مُدرَجة)
- مثال على طلب: (مع صورة لغرفة مفروشة) "ما هي الألوان الأخرى التي تناسب أريكتي في المساحة؟ هل يمكنك تعديل الصورة؟"
- تعديل الصور (النص والصورة إلى الصورة)
- مثال على طلب: "تعديل هذه الصورة لتبدو وكأنها صورة كارتونية"
- مثال على طلب: [صورة قطة] + [صورة وسادة] + "أريد استخدام التطريز بالابر المتعدّدة لإنشاء صورة قطتي على هذه الوسادة".
- تعديل الصور المتعدّد الخطوات (المحادثة)
- أمثلة على الطلبات: [تحميل صورة سيارة زرقاء] "أريد تحويل هذه السيارة إلى سيارة قابلة للتحويل". "الآن، غيِّر اللون إلى الأصفر".
تعديل الصور باستخدام Gemini
لإجراء تعديل على الصورة، أضِف صورة كمدخل. يوضّح المثال التالي تحميل صور بترميز Base64. بالنسبة إلى الصور المتعدّدة وحمولات العميل الأكبر حجمًا، راجِع قسم إدخال الصور.
from google import genai
from google.genai import types
from PIL import Image
from io import BytesIO
import PIL.Image
image = PIL.Image.open('/path/to/image.png')
client = genai.Client()
text_input = ('Hi, This is a picture of me.'
'Can you add a llama next to me?',)
response = client.models.generate_content(
model="gemini-2.0-flash-exp-image-generation",
contents=[text_input, image],
config=types.GenerateContentConfig(
response_modalities=['Text', 'Image']
)
)
for part in response.candidates[0].content.parts:
if part.text is not None:
print(part.text)
elif part.inline_data is not None:
image = Image.open(BytesIO(part.inline_data.data))
image.show()
const { GoogleGenerativeAI } = require("@google/generative-ai");
const fs = require("fs");
const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY);
async function generateImage() {
// Load the image from the local file system
const imagePath = '/path/to/image.png';
const imageData = fs.readFileSync(imagePath);
const base64Image = imageData.toString('base64');
// Prepare the content parts
const contents = [
{ text: "Hi, This is a picture of me. Can you add a llama next to me?" },
{
inlineData: {
mimeType: 'image/png',
data: base64Image
}
}
];
// Set responseModalities to include "Image" so the model can generate an image
const model = genAI.getGenerativeModel({
model: "gemini-2.0-flash-exp-image-generation",
generationConfig: {
responseModalities: ['Text', 'Image']
},
});
try {
const response = await model.generateContent(contents);
for (const part of response.response.candidates[0].content.parts) {
// Based on the part type, either show the text or save the image
if (part.text) {
console.log(part.text);
} else if (part.inlineData) {
const imageData = part.inlineData.data;
const buffer = Buffer.from(imageData, 'base64');
fs.writeFileSync('gemini-native-image.png', buffer);
console.log('Image saved as gemini-native-image.png');
}
}
} catch (error) {
console.error("Error generating content:", error);
}
}
generateImage();
IMG_PATH=/path/to/your/image1.jpeg
if [[ "$(base64 --version 2>&1)" = *"FreeBSD"* ]]; then
B64FLAGS="--input"
else
B64FLAGS="-w0"
fi
IMG_BASE64=$(base64 "$B64FLAGS" "$IMG_PATH" 2>&1)
curl -X POST \
"https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash-exp-image-generation:generateContent?key=$GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d "{
\"contents\": [{
\"parts\":[
{\"text\": \"'Hi, This is a picture of me. Can you add a llama next to me\"},
{
\"inline_data\": {
\"mime_type\":\"image/jpeg\",
\"data\": \"$IMG_BASE64\"
}
}
]
}],
\"generationConfig\": {\"responseModalities\": [\"Text\", \"Image\"]}
}" \
| grep -o '"data": "[^"]*"' \
| cut -d'"' -f4 \
| base64 --decode > gemini-edited-image.png
القيود
- للحصول على أفضل أداء، استخدِم اللغات التالية: EN وes-MX وja-JP وzh-CN و hi-IN.
- لا تتيح ميزة إنشاء الصور إدخالات صوتية أو فيديوهات.
- قد لا يتم إنشاء الصور في الحالات التالية:
- قد يعرض النموذج نصًا فقط. جرِّب طلب نتائج الصور صراحةً (مثل "إنشاء صورة" أو "تقديم صور أثناء الإجراء" أو "تعديل الصورة").
- قد يتوقف النموذج عن إنشاء المحتوى في منتصف العملية. يُرجى إعادة المحاولة أو استخدام طلب مختلف.
- عند إنشاء نص لصورة، يعمل Gemini بشكل أفضل إذا أنشأت أولاً النص ثم طلبت صورة تتضمّن النص.
اختيار نموذج
ما هو النموذج الذي يجب استخدامه لإنشاء الصور؟ يعتمد ذلك على حالة الاستخدام.
إنّ Gemini 2.0 هو الخيار الأفضل لإنشاء صور ذات صلة بالسياق، ودمج النصوص والصور، واستخدام المعرفة العالمية، والاستدلال على الصور. ويمكنك استخدامها لإنشاء عناصر مرئية دقيقة وذات صلة بالسياق تكون مضمّنة في تسلسلات نصية طويلة. يمكنك أيضًا تعديل الصور بشكل حواري باستخدام لغة طبيعية، مع الحفاظ على السياق طوال المحادثة.
إذا كانت جودة الصورة هي أهم أولوياتك، فإنّ Imagen 3 هو الخيار الأفضل. يُبرِز تطبيق Imagen 3 الصور الواقعية والتفاصيل الفنية والأنماط الفنية المحدّدة، مثل الانطباعية أو الأنمي. يُعدّ Imagen 3 أيضًا خيارًا جيدًا لأعمال تعديل الصور المتخصصة، مثل تعديل خلفيات المنتجات وزيادة كثافة بكسل الصور ودمج العلامة التجارية والأسلوب في العناصر المرئية. يمكنك استخدام Imagen 3 لإنشاء الشعارات أو تصميمات المنتجات الأخرى التي تحمل علامة تجارية.
إنشاء صور باستخدام Imagen 3
تتيح واجهة برمجة التطبيقات Gemini API استخدام Imagen 3، وهو نموذج تحويل النص إلى صورة من Google يقدّم أفضل جودة، ويضمّ عددًا من الإمكانات الجديدة والمحسّنة. يمكن لخدمة Imagen 3 تنفيذ ما يلي:
- إنشاء صور بتفاصيل أفضل وإضاءة أكثر ثراءً وعناصر مزعجة أقل مقارنةً بالنماذج السابقة
- فهم الطلبات المكتوبة بلغة طبيعية
- إنشاء صور بمجموعة كبيرة من التنسيقات والأنماط
- عرض النص بفعالية أكبر من النماذج السابقة
from google import genai
from google.genai import types
from PIL import Image
from io import BytesIO
client = genai.Client(api_key='GEMINI_API_KEY')
response = client.models.generate_images(
model='imagen-3.0-generate-002',
prompt='Fuzzy bunnies in my kitchen',
config=types.GenerateImagesConfig(
number_of_images= 4,
)
)
for generated_image in response.generated_images:
image = Image.open(BytesIO(generated_image.image.image_bytes))
image.show()
curl -X POST \
"https://generativelanguage.googleapis.com/v1beta/models/imagen-3.0-generate-002:predict?key=GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"instances": [
{
"prompt": "Fuzzy bunnies in my kitchen"
}
],
"parameters": {
"sampleCount": 4
}
}'

تتيح Imagen الطلبات باللغة الإنجليزية فقط في الوقت الحالي والمَعلمات التالية:
مَعلمات نموذج Imagen
-
number_of_images
: عدد الصور المطلوب إنشاؤها، من 1 إلى 4 (شاملة). القيمة التلقائية هي 4. aspect_ratio
: لتغيير نسبة العرض إلى الارتفاع للصورة التي تم إنشاؤها القيم المتوافقة هي"1:1"
و"3:4"
و"4:3"
و"9:16"
و"16:9"
. القيمة التلقائية هي"1:1"
.person_generation
: اسمح للنموذج بإنشاء صور لأشخاص. في ما يلي القيم المتوافقة:"DONT_ALLOW"
: حظر إنشاء صور للأشخاص"ALLOW_ADULT"
: إنشاء صور لأشخاص بالغين، ولكن ليس للأطفال هذا هو الخيار التلقائي.
الخطوات التالية
- لمعرفة المزيد من المعلومات عن كتابة الطلبات لتطبيق Imagen، اطّلِع على دليل طلبات Imagen.
- للاطّلاع على مزيد من المعلومات عن نماذج Gemini 2.0، يمكنك الاطّلاع على نماذج Gemini والنماذج التجريبية.