📷 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.