Images
Astro vous propose plusieurs façons d’utiliser les images sur votre site, qu’elles soient stockées localement dans votre projet, liées à une URL externe, ou gérées dans un CMS ou un CDN !
<Image />
et <Picture />
.
Où stocker les images
Titre de la section Où stocker les imagessrc/
vs public/
Titre de la section src/ vs public/Nous recommandons que les images locales soient conservées dans src/
si possible afin qu’Astro puisse les transformer, les optimiser et les regrouper. Les fichiers dans le répertoire /public
sont toujours servis ou copiés dans le dossier de construction tels quels, sans aucun traitement.
Vos images locales stockées dans src/
peuvent être utilisées par tous les fichiers de votre projet : .astro
, .md
, .mdx
, .mdoc
, et d’autres frameworks d’interface utilisateur. Les images peuvent être stockées dans n’importe quel dossier, y compris avec votre contenu.
Stockez vos images dans le dossier public/
si vous voulez éviter tout traitement ou avoir un lien public direct vers elles.
Images distantes
Titre de la section Images distantesVous pouvez également choisir de stocker vos images à distance, dans un système de gestion de contenu (CMS) ou une plateforme de gestion des ressources numériques (DAM). Astro peut récupérer vos données à distance à l’aide d’API ou afficher des images à partir de leur chemin d’accès complet.
Pour une protection supplémentaire lors du traitement de sources externes, les composants d’image et la fonction d’assistance d’Astro traiteront uniquement (par exemple, optimiseront, transformeront) les images provenant de sources d’images autorisées spécifiées dans votre configuration. Les images distantes provenant d’autres sources seront affichées sans traitement.
Images dans les fichiers .astro
Titre de la section Images dans les fichiers .astroDans les fichiers .astro
, une image locale doit être importée depuis son chemin relatif. Cette importation fournit la valeur src
pour votre image.
Les images distantes et celles dans public/
ne nécessitent pas d’importation, mais nécessitent à la place une URL (chemin complet ou relatif à votre site) pour src
.
Importez et utilisez les composants <Image />
et <Picture />
natifs d’Astro pour des images optimisées. La syntaxe Astro prend également en charge l’écriture directe d’une balise HTML <img>
, ce qui évite le traitement de l’image.
<Image />
et <Picture />
.
Afficher des images optimisées avec le composant <Image />
Titre de la section Afficher des images optimisées avec le composant <Image />Utilisez le composant Astro intégré <Image />
pour afficher des versions optimisées :
- de vos images locales situées dans le dossier
src/
- d’images distantes configurées provenant de sources autorisées
<Image />
peut transformer les dimensions, le type de fichier et la qualité d’une image locale ou distante autorisée pour contrôler l’image affichée. La balise <img>
résultante inclut les attributs alt
, loading
et decoding
et déduit les dimensions de l’image pour éviter le décalage cumulatif de mise en page (« Cumulative Layout Shift » en anglais ou CLS).
Cumulative Layout Shift (CLS) est une mesure de Core Web Vital qui permet d’évaluer le décalage du contenu de votre page pendant le chargement. Le composant <Image />
optimise le CLS en définissant automatiquement la bonne largeur
et la bonne hauteur
pour vos images locales.
Le composant <Image />
accepte plusieurs propriétés de composant ainsi que tous les attributs acceptés par la balise HTML <img>
.
L’exemple suivant fournit une classe (class
) au composant Image qui s’appliquera à l’élément final <img>
.
Vous pouvez également utiliser le composant <Image />
pour les images du dossier public/
ou les images distantes non spécifiquement configurées dans votre projet, même si ces images ne seront ni optimisées ni traitées. L’image résultante sera la même que celle obtenue en utilisant la balise HTML <img>
.
Cependant, l’utilisation du composant Image pour toutes les images offre une expérience de création cohérente et empêche le décalage de mise en page cumulé (CLS), même pour vos images non optimisées.
Créez des images réactives avec le composant <Picture />
Titre de la section Créez des images réactives avec le composant <Picture />
Ajouté à la version :
astro@3.3.0
Utilisez le composant Astro intégré <Picture />
pour afficher une image réactive avec plusieurs formats et/ou tailles.
<Picture />
dans la référence astro:assets
.
Afficher les images non traitées avec la balise HTML <img>
Titre de la section Afficher les images non traitées avec la balise HTML <img>La syntaxe de template Astro prend également en charge l’écriture directe d’une balise <img>
, avec un contrôle total sur sa sortie finale. Ces images ne seront pas traitées ni optimisées. Elle accepte toutes les propriétés de balise HTML <img>
, et la seule propriété requise est src
.
Les images locales doivent être importées à partir du chemin relatif du fichier .astro
existant, ou vous pouvez configurer et utiliser un alias d’importation. Ensuite, vous pouvez accéder à la source (src
) de l’image et aux autres propriétés à utiliser dans la balise <img>
.
Les ressources d’image importées correspondent à la signature suivante :
L’exemple suivant utilise les propriétés height
et width
de l’image pour éviter le décalage de mise en page cumulé (CLS) et améliorer les Core Web Vitals :
Images dans public/
Titre de la section Images dans public/Pour les images situées dans public/
, utilisez le chemin du fichier de l’image par rapport au dossier public comme valeur pour src
:
Images distantes
Titre de la section Images distantesPour les images distantes, utilisez l’URL complète de l’image comme valeur pour src
:
Choisir <Image />
vs <img>
Titre de la section Choisir <Image /> vs <img>Le composant <Image />
optimise votre image et déduit la largeur et la hauteur (pour les images qu’il peut traiter) en se basant sur le rapport hauteur/largeur d’origine afin d’éviter le CLS. C’est la manière à privilégier pour utiliser des images dans les fichiers .astro
chaque fois que cela est possible.
Utilisez l’élément HTML <img>
lorsque vous ne pouvez pas utiliser le composant <Image />
, par exemple :
- pour les formats d’image non pris en charge
- lorsque vous ne souhaitez pas que votre image soit optimisée par Astro
- pour accéder à l’attribut
src
et de le modifier dynamiquement côté client
Définition des valeurs par défaut
Titre de la section Définition des valeurs par défautActuellement, il n’existe aucun moyen de spécifier des valeurs par défaut pour tous les composants <Image />
ou <Picture/>
. Les attributs obligatoires doivent être définis sur chaque composant individuel.
Comme alternative, vous pouvez envelopper ces composants dans un autre composant Astro pour les réutiliser. Par exemple, vous pouvez créer un composant pour les images de vos articles de blog qui reçoit des attributs en tant que props et applique des styles cohérents à chaque image :
Autoriser les images distantes
Titre de la section Autoriser les images distantesVous pouvez configurer des listes de domaines d’URL de sources d’images autorisées et des modèles pour l’optimisation des images en utilisant image.domains
et image.remotePatterns
. Cette configuration est une couche de sécurité supplémentaire pour protéger votre site lorsqu’il affiche des images provenant d’une source externe.
Les images distantes provenant d’autres sources ne seront pas optimisées, mais l’utilisation du composant <Image />
pour ces images empêchera le décalage cumulatif de la mise en page (CLS).
Par exemple, la configuration suivante permet d’optimiser seulement les images distantes provenant de astro.build
:
La configuration suivante n’autorise que les images distantes provenant d’hôtes HTTPS :
Utilisation d’images provenant d’un CMS ou d’un CDN
Titre de la section Utilisation d’images provenant d’un CMS ou d’un CDNLes CDN d’images fonctionnent avec toutes les options d’images d’Astro. Utilisez l’URL complète d’une image comme attribut src
dans le composant <Image />
, une balise <img>
, ou dans la notation Markdown. Pour l’optimisation des images distantes, il faut également configurer les domaines autorisés ou les modèles d’URL.
Alternativement, le CDN peut fournir ses propres SDK pour s’intégrer plus facilement dans un projet Astro. Par exemple, Cloudinary prend en charge un SDK Astro qui vous permet de déposer facilement des images avec leur composant CldImage
ou un SDK Node.js qui peut générer des URL à utiliser avec une balise <img>
dans un environnement Node.js.
<Image />
et <Picture />
.
Images dans les fichiers Markdown
Titre de la section Images dans les fichiers MarkdownUtilisez la syntaxe Markdown standard ![alt](src)
dans vos fichiers .md
. Cette syntaxe fonctionne avec l’API du Service d’images d’Astro pour optimiser vos images locales et les images distantes autorisées.
La balise <img>
n’est pas prise en charge pour les images locales et les composants <Image />
et <Picture />
ne sont pas disponibles dans les fichiers .md
.
Si vous avez besoin de plus de contrôle sur les attributs de votre image, nous vous recommandons d’utiliser l’intégration MDX d’Astro pour ajouter la prise en charge du format de fichier .mdx
. MDX permet d’ajouter des composants à Markdown et il existe des options d’image supplémentaires disponibles dans MDX.
Images dans les fichiers MDX
Titre de la section Images dans les fichiers MDXVous pouvez utiliser les composants <Image />
et <Picture />
d’Astro dans vos fichiers .mdx
en important à la fois le composant et votre image. Utilisez-les tels qu’ils sont utilisés dans les fichiers .astro
. La balise JSX <img />
est également prise en charge pour les images non traitées et utilise la même importation d’image que la balise HTML <img>
.
De plus, il y a un support pour la syntaxe standard Markdown ![alt](src)
sans importation nécessaire
<Image />
et <Picture />
.
Images dans les collections de contenus
Titre de la section Images dans les collections de contenusLes images dans les collections de contenus seront traitées de la même manière que dans Markdown et MDX selon le type de fichier que vous utilisez.
En outre, vous pouvez déclarer une image associée à une entrée de la collection de contenus, telle que l’image de couverture d’un article de blog, dans votre frontmatter en utilisant son chemin d’accès relatif au dossier courant :
L’assistant image
pour le schéma des collections de contenu vous permet de valider et d’importer l’image.
L’image sera importée et transformée en métadonnées, vous permettant de la passer comme src
à <Image/>
, <img>
, ou getImage()
.
L’exemple ci-dessous montre une page d’index de blog qui rend la photo de couverture et le titre de chaque article de blog à partir du schéma ci-dessus :
Images dans les composants framework UI
Titre de la section Images dans les composants framework UILe composant <Image />
, comme tout autre composant Astro, n’est pas disponible dans les composants de framework UI.
Mais vous pouvez transmettre le contenu statique généré par <Image />
à un composant de framework à l’intérieur d’un fichier .astro
en tant qu’enfants ou en utilisant un <slot/>
nommé :
Vous pouvez également utiliser la syntaxe d’image propre au framework pour restituer une image (par exemple <img />
dans JSX, <img>
dans Svelte).
Les images locales doivent d’abord être importées pour accéder à leurs propriétés d’image telles que src
.
Générer des images avec getImage()
Titre de la section Générer des images avec getImage()La fonction getImage()
est prévue pour générer des images destinées à être utilisées ailleurs que directement en HTML, par exemple dans une route d’API. Lorsque vous avez besoin d’options que les composants <Picture>
et <Image>
ne prennent pas actuellement en charge, vous pouvez utiliser la fonction getImage()
pour créer votre propre composant <Image />
personnalisé.
getImage()
.
Texte alternatif
Titre de la section Texte alternatifTous les utilisateurs ne voient pas les images de la même manière. L’accessibilité est donc une préoccupation particulièrement importante lors de l’utilisation d’images. Utilisez l’attribut alt
pour fournir un texte alternatif descriptif pour les images.
Cet attribut est requis pour les composants <Image />
et <Picture />
. Si aucun texte alt n’est fourni, un message d’erreur utile vous rappellera d’inclure l’attribut alt
.
Si l’image est simplement décorative (c’est-à-dire qu’elle ne contribue pas à la compréhension de la page), définissez alt=""
pour que les lecteurs d’écran sachent qu’ils doivent ignorer l’image.
Service d’images par défaut
Titre de la section Service d’images par défautSharp est le service d’images par défaut utilisé pour astro:assets
. Vous pouvez configurer le service d’images en utilisant l’option image.service
.
Lorsque vous utilisez un gestionnaire de paquet strict comme pnpm
, vous pouvez avoir besoin d’installer manuellement Sharp dans votre projet même si c’est une dépendance d’Astro :
Configurer le service no-op passthrough
Titre de la section Configurer le service no-op passthroughSi votre adaptateur ne supporte pas l’optimisation d’image Sharp intégrée à Astro (par exemple Deno, Cloudflare), vous pouvez configurer un service d’image no-op pour vous permettre d’utiliser les composants <Image />
et <Picture />
. Notez qu’Astro n’effectue aucune transformation ou traitement d’image dans ces environnements. Cependant, vous pouvez toujours profiter des autres avantages de l’utilisation de astro:assets
, y compris l’absence de décalage cumulatif de la mise en page (CLS), l’application de l’attribut alt
, et une expérience de création cohérente.
Configurez passthroughImageService()
pour éviter les traitements d’image Sharp :
Mise en cache des ressources
Titre de la section Mise en cache des ressourcesAstro stocke les images traitées dans un répertoire cache lors de la création du site, tant pour les images locales que pour les images distantes provenant de sources autorisées. En préservant le répertoire de cache entre les constructions, les ressources traitées sont réutilisées, ce qui améliore le temps de construction et l’utilisation de la bande passante.
Le répertoire de cache par défaut est ./node_modules/.astro
, mais il peut être modifié en utilisant le paramètre de configuration cacheDir
.
Images distantes
Titre de la section Images distantesLes images distantes dans le cache des ressources sont gérées sur la base de HTTP Caching, et respectent l’En-tête Cache-Control renvoyé par le serveur distant. Les images sont mises en cache si l’en-tête Cache-Control le permet et seront utilisées jusqu’à ce qu’elles ne soient plus fraîches.
Revalidation
Titre de la section Revalidation
Ajouté à la version :
astro@5.1.0
Nouveau
La Revalidation réduit l’utilisation de la bande passante et le temps de construction en vérifiant auprès du serveur distant si une image mise en cache qui a expiré est toujours d’actualité. Si le serveur indique que l’image est encore fraîche, la version mise en cache est réutilisée, sinon l’image est téléchargée à nouveau.
La revalidation nécessite que le serveur distant envoie des en-têtes Last-Modified et/ou Etag (entity tag) avec ses réponses. Cette fonction est disponible pour les serveurs distants qui prennent en charge les en-têtes If-Modified-Since et If-None-Match.
Intégrations communautaires
Titre de la section Intégrations communautairesIl existe plusieurs intégrations d’images communautaires pour optimiser et travailler avec des images dans votre projet Astro.
Learn