generateImageMetadata
يمكنك استخدام generateImageMetadata
لإنشاء إصدارات مختلفة من صورة واحدة أو إرجاع صور متعددة لقطاع مسار واحد. هذا مفيد عندما تريد تجنب ترميز قيم البيانات الوصفية (metadata) بشكل ثابت، مثل الأيقونات.
المعاملات
تقبل دالة generateImageMetadata
المعاملات التالية:
params
(اختياري)
كائن يحتوي على معاملات المسار الديناميكي من القطاع الجذري وصولاً إلى القطاع الذي يتم استدعاء generateImageMetadata
منه.
export function generateImageMetadata({
params,
}: {
params: { slug: string }
}) {
// ...
}
export function generateImageMetadata({ params }) {
// ...
}
المسار | الرابط | params |
---|---|---|
app/shop/icon.js | /shop | undefined |
app/shop/[slug]/icon.js | /shop/1 | { slug: '1' } |
app/shop/[tag]/[item]/icon.js | /shop/1/2 | { tag: '1', item: '2' } |
app/shop/[...slug]/icon.js | /shop/1/2 | { slug: ['1', '2'] } |
القيم المرجعة
يجب أن ترجع دالة generateImageMetadata
مصفوفة من الكائنات تحتوي على البيانات الوصفية للصورة مثل alt
و size
. بالإضافة إلى ذلك، يجب أن يتضمن كل عنصر قيمة id
والتي سيتم تمريرها إلى خاصيات دالة إنشاء الصورة.
كائن البيانات الوصفية للصورة | النوع |
---|---|
id | string (مطلوب) |
alt | string |
size | { width: number; height: number } |
contentType | string |
import { ImageResponse } from 'next/og'
export function generateImageMetadata() {
return [
{
contentType: 'image/png',
size: { width: 48, height: 48 },
id: 'small',
},
{
contentType: 'image/png',
size: { width: 72, height: 72 },
id: 'medium',
},
]
}
export default function Icon({ id }: { id: string }) {
return new ImageResponse(
(
<div
style={{
width: '100%',
height: '100%',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
fontSize: 88,
background: '#000',
color: '#fafafa',
}}
>
Icon {id}
</div>
)
)
}
import { ImageResponse } from 'next/og'
export function generateImageMetadata() {
return [
{
contentType: 'image/png',
size: { width: 48, height: 48 },
id: 'small',
},
{
contentType: 'image/png',
size: { width: 72, height: 72 },
id: 'medium',
},
]
}
export default function Icon({ id }) {
return new ImageResponse(
(
<div
style={{
width: '100%',
height: '100%',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
fontSize: 88,
background: '#000',
color: '#fafafa',
}}
>
Icon {id}
</div>
)
)
}
أمثلة
استخدام بيانات خارجية
يستخدم هذا المثال كائن params
وبيانات خارجية لإنشاء صور متعددة Open Graph images لقطاع مسار.
import { ImageResponse } from 'next/og'
import { getCaptionForImage, getOGImages } from '@/app/utils/images'
export async function generateImageMetadata({
params,
}: {
params: { id: string }
}) {
const images = await getOGImages(params.id)
return images.map((image, idx) => ({
id: idx,
size: { width: 1200, height: 600 },
alt: image.text,
contentType: 'image/png',
}))
}
export default async function Image({
params,
id,
}: {
params: { id: string }
id: number
}) {
const productId = params.id
const imageId = id
const text = await getCaptionForImage(productId, imageId)
return new ImageResponse(
(
<div
style={
{
// ...
}
}
>
{text}
</div>
)
)
}
import { ImageResponse } from 'next/og'
import { getCaptionForImage, getOGImages } from '@/app/utils/images'
export async function generateImageMetadata({ params }) {
const images = await getOGImages(params.id)
return images.map((image, idx) => ({
id: idx,
size: { width: 1200, height: 600 },
alt: image.text,
contentType: 'image/png',
}))
}
export default async function Image({ params, id }) {
const productId = params.id
const imageId = id
const text = await getCaptionForImage(productId, imageId)
return new ImageResponse(
(
<div
style={
{
// ...
}
}
>
{text}
</div>
)
)
}
سجل الإصدارات
الإصدار | التغييرات |
---|---|
v13.3.0 | تم تقديم generateImageMetadata . |