đ· Gestion des images avec next/image
dans Next.js 13+
Next.js propose un composant optimisĂ© pour lâaffichage des images : next/image
. Il améliore les performances en :
â
Optimisant automatiquement les images (compression, WebP/AVIF).
â
Lazy-loading natif (chargement différé pour améliorer le temps de rendu).
â
Redimensionnement dynamique selon la taille de lâĂ©cran.
1ïžâŁ Afficher une image avec next/image
Le composant next/image
remplace la balise <img>
standard.
đ Exemple :
import Image from "next/image";
export default function Home() {
return (
<div>
<h1>Bienvenue</h1>
<Image
src="/images/photo.jpg"
alt="Photo optimisée"
width={500}
height={300}
priority
/>
</div>
);
}
â Explication :
src="/images/photo.jpg"
: Chemin de lâimage dans le dossierpublic/
.width
&height
: Dimensions optimisées par Next.js.priority
: Charge lâimage immĂ©diatement (utile pour les images critiques).
2ïžâŁ Utiliser des images distantes
Par dĂ©faut, Next.js bloque les images provenant dâautres domaines. Il faut les autoriser dans next.config.js
.
module.exports = {
images: {
domains: ["cdn.example.com"], // Autorise les images de ce domaine
},
};
đ Utilisation dâune image distante
<Image
src="https://cdn.example.com/image.jpg"
alt="Image distante"
width={800}
height={600}
/>
â Avantage : Next.js optimise aussi les images distantes via son systĂšme de proxy.
3ïžâŁ Gestion des images responsives (fill
)
Next.js permet dâadapter automatiquement les images Ă la taille du conteneur.
đ Exemple avec fill
et un conteneur en relative
<div className="relative w-64 h-64">
<Image
src="/images/photo.jpg"
alt="Image responsive"
fill
className="object-cover"
/>
</div>
â Explication :
fill
: Lâimage remplit son parent (w-64 h-64
).object-cover
(avec Tailwind) : Garde le ratio de lâimage sans dĂ©formation.
4ïžâŁ Formats dâimages optimisĂ©s
Next.js convertit automatiquement les images en WebP ou AVIF (formats plus légers).
đč Si le navigateur supporte WebP â Next.js sert WebP.
đč Sinon, il garde le format dâorigine.
Aucune configuration nâest nĂ©cessaire ! đ
5ïžâŁ Charger dynamiquement une image (loader
)
Pour des cas spĂ©cifiques (CDN externe, transformations dâimageâŠ), on peut utiliser un loader personnalisĂ©.
đ Exemple avec Cloudinary
const cloudinaryLoader = ({ src, width, quality }) => {
return `https://res.cloudinary.com/demo/image/upload/w_${width},q_${quality || 75}/${src}`;
};
<Image
loader={cloudinaryLoader}
src="sample.jpg"
alt="Image optimisée Cloudinary"
width={800}
height={600}
/>
â Explication :
- Transforme dynamiquement les images via Cloudinary (compression, redimensionnement).
q_${quality || 75}
ajuste la qualitĂ© de lâimage.
đŻ Conclusion
đ Avec next/image
, on obtient :
â
Des images compressées et optimisées automatiquement.
â
Un lazy loading natif pour de meilleures performances.
â
Une gestion facile des images locales et distantes.