Spec-Zone.ru › Next.js

generateImageMetadata

Вы можете использовать generateImageMetadata для генерации различных версий одного изображения или возвращения нескольких изображений для одного сегмента маршрута. Это полезно, когда вы хотите избежать жёсткого кодирования значений метаданных, например, для иконок.

Параметры

Функция generateImageMetadata принимает следующие параметры:

params (необязательно)

Объект, содержащий параметры динамического маршрута от корневого сегмента до сегмента generateImageMetadata, из которого вызывается функция.

export function generateImageMetadata({
  params,
}: {
  params: { slug: string }
}) {
  // ...
}
Маршрут URL 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>
    )
  )
}

Примеры

Использование внешних данных

В этом примере используется объект params и внешние данные для генерации нескольких изображений Open Graph для сегмента маршрута.

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>
    )
  )
}

История версий

Версия Изменения
v13.3.0 generateImageMetadata введен.

© 2024 Vercel, Inc.
Licensed under the MIT License.
https://nextjs.org/docs/app/api-reference/functions/generate-image-metadata

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API