generateImageMetadata

Mit generateImageMetadata können Sie verschiedene Versionen eines Bildes oder mehrere Bilder für ein Routensegment generieren. Dies ist nützlich, wenn Sie hartkodierte Metadatenwerte vermeiden möchten, z.B. für Icons.

Parameter

Die generateImageMetadata-Funktion akzeptiert folgende Parameter:

params (optional)

Ein Objekt, das die dynamischen Routenparameter vom Wurzelsegment bis zu dem Segment enthält, aus dem generateImageMetadata aufgerufen wird.

export function generateImageMetadata({
  params,
}: {
  params: { slug: string }
}) {
  // ...
}
RouteURLparams
app/shop/icon.js/shopundefined
app/shop/[slug]/icon.js/shop/1{ slug: '1' }
app/shop/[tag]/[item]/icon.js/shop/1/2{ tag: '1', item: '2' }

Rückgabewerte

Die generateImageMetadata-Funktion sollte ein Array von Objekten zurückgeben, die Metadaten des Bildes wie alt und size enthalten. Zusätzlich muss jedes Objekt einen id-Wert enthalten, der an die Props der Bildgenerierungsfunktion übergeben wird.

Bild-Metadaten-ObjektTyp
idstring (erforderlich)
altstring
size{ width: number; height: number }
contentTypestring
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>
    )
  )
}

Beispiele

Verwendung externer Daten

Dieses Beispiel verwendet das params-Objekt und externe Daten, um mehrere Open Graph-Bilder für ein Routensegment zu generieren.

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 = (await params).id
  const imageId = id
  const text = await getCaptionForImage(productId, imageId)

  return new ImageResponse(
    (
      <div
        style={
          {
            // ...
          }
        }
      >
        {text}
      </div>
    )
  )
}

Versionsverlauf

VersionÄnderungen
v13.3.0generateImageMetadata eingeführt.

On this page