API de Service d'images
astro:assets
a été conçu pour permettre à n’importe quel service d’optimisation d’images de construire facilement un service au-dessus d’Astro.
Qu’est-ce qu’un service d’images ?
Astro propose deux types de services d’images : Local et Externe.
- Les services locaux gèrent les transformations d’images directement lors de la construction pour les sites statiques, ou lors de l’exécution en mode développement et SSR. Ce sont souvent des enveloppes autour de bibliothèques comme Sharp, ImageMagick, ou Squoosh. En mode développement et en SSR, les services locaux utilisent un point de terminaison de l’API pour effectuer la transformation.
- Les services externes pointent vers des URL et peuvent ajouter la prise en charge de services tels que Cloudinary, Vercel ou tout autre serveur conforme à RIAPI.
Construire à l’aide de l’API d’un service d’image
Les définitions de service prennent la forme d’un objet par défaut exporté avec diverses méthodes requises (“hooks”).
Les services externes fournissent un getURL()
qui pointe vers le src
de la balise <img>
de sortie.
Les services locaux fournissent une méthode transform()
pour effectuer des transformations sur votre image, et les méthodes getURL()
et parseURL()
pour utiliser un point de terminaison pour le mode dev et SSR.
Les deux types de services peuvent fournir getHTMLAttributes()
pour déterminer les autres attributs de la sortie <img>
et validateOptions()
pour valider et augmenter les options passées.
Services Externes
Un service externe pointe vers une URL distante à utiliser comme attribut src
de la balise <img>
finale. Cette URL distante est responsable du téléchargement, de la transformation et du renvoi de l’image.
Services Local
Pour créer votre propre service local, vous pouvez pointer vers le built-in point de terminaison (/_image
), ou vous pouvez également créer votre propre point de terminaison qui peut appeler les méthodes du service.
Au moment de la construction des sites statiques et des routes pré-rendues, <Image />
et getImage(options)
appellent la fonction transform()
. Elles passent les options soit par les attributs du composant, soit par un argument options
. Les images transformées seront compilées dans un dossier dist/_astro
.
En mode dev et en mode SSR, Astro ne sait pas à l’avance quelles images doivent être optimisées. Astro utilise un point d’accès GET (par défaut, /_image
) pour traiter les images au moment de l’exécution. <Image />
et getImage()
transmettent leurs options à getURL()
, qui renvoie l’URL du point d’accès. Ensuite, le point d’accès appelle parseURL()
et transmet les propriétés résultantes à transform()
.
getConfiguredImageService & imageConfig
Si vous implémentez votre propre point d’accès comme point d’accès Astro, vous pouvez utiliser getConfiguredImageService
et imageConfg
pour appeler les méthodes parseURL
et transform
de votre service et fournir la configuration de l’image.
Pour accéder à la configuration du service d’image (image.service.config
(EN)), vous pouvez utiliser imageConfig.service.config
.
Voir le point de terminaison intégré pour un exemple complet.
Hooks
getURL()
Requis pour les services locaux et externes
getURL(options: ImageTransform, imageConfig: AstroConfig['image']): string
Pour les services locaux, ce hook renvoie l’URL du point d’accès qui génère votre image (en mode SSR et dev). Il n’est pas utilisé pendant la construction. Le point d’accès local vers lequel getURL()
pointe peut appeler à la fois parseURL()
et transform()
.
Pour les services externes, ce hook renvoie l’URL finale de l’image.
Pour les deux types de services, les options
sont les propriétés passées par l’utilisateur comme attributs du composant <Image />
ou comme options de getImage()
. Elles sont du type suivant :
parseURL()
Requis pour les services locaux ; indisponible pour les services externes
parseURL(url: URL, imageConfig: AstroConfig['image']): { src: string, [key: string]: any}
Ce hook analyse les URLs générées par getURL()
en un objet avec les différentes propriétés à utiliser par transform
(en SSR et en mode dev). Il n’est pas utilisé pendant la construction.
transform()
Requis pour les services locaux ; indisponible pour les services externes
transform(buffer: Uint8Array, options: { src: string, [key: string]: any }, imageConfig: AstroConfig['image']): { data: Uint8Array, format: OutputFormat }
Ce hook transforme et renvoie l’image et est appelé pendant la construction pour créer les fichiers d’actifs finaux.
Vous devez retourner un format
pour vous assurer que le bon type MIME est servi aux utilisateurs en mode SSR et développement.
getHTMLAttributes()
Facultatif pour les services locaux et externes
getHTMLAttributes(options: ImageTransform, imageConfig: AstroConfig['image']): Record<string, any>
Ce hook renvoie tous les attributs supplémentaires utilisés pour rendre l’image en HTML, en fonction des paramètres passés par l’utilisateur (options
).
getSrcSet()
Ajouté à la version :
astro@3.3.0
Experimental
Facultatif pour les services locaux et externes
getSrcSet?: (options: ImageTransform, imageConfig: AstroConfig['image']): SrcSetValue[] | Promise<SrcSetValue[]>;
Ce hook génère plusieurs variantes de l’image spécifiée, par exemple, pour générer un attribut srcset
sur une <img>
ou source
sur <picture>
.
Ce hook retourne un tableau d’objets avec les propriétés suivantes :
validateOptions()
Facultatif pour les services locaux et externes
validateOptions(options: ImageTransform, imageConfig: AstroConfig['image']): ImageTransform
Ce hook vous permet de valider et d’augmenter les options passées par l’utilisateur. C’est utile pour définir des options par défaut, ou pour indiquer à l’utilisateur qu’un paramètre est nécessaire.
Voir comment validateOptions()
est utilisé dans les services intégrés Astro.
Configuration de l’utilisateur
Configurez le service d’image à utiliser dans astro.config.mjs
. La configuration prend la forme suivante :