how to have best quality in next.js Image component ?
To achieve the best quality when using the Image
component in Next.js, you can follow these best practices:
layout
PropThe layout
prop allows you to control how the image is displayed. The most common values are:
intrinsic
: The image will scale the dimensions down for smaller viewports but maintain its original size for larger viewports.responsive
: The image will scale the dimensions down for smaller viewports and scale up for larger viewports, maintaining the aspect ratio.fixed
: The image will have a fixed size regardless of the viewport size.For best quality, responsive
is often recommended.
width
and height
Always specify the width
and height
attributes. This helps Next.js optimize the image and maintain the aspect ratio, which is crucial for responsive designs.
<Image
src="/path/to/image.jpg"
alt="Description of image"
width={800}
height={600}
layout="responsive"
/>
quality
PropYou can specify the quality of the image using the quality
prop, which accepts a value between 1 and 100. The default is 75. Increasing this value can improve image quality but may also increase loading times.
<Image
src="/path/to/image.jpg"
alt="Description of image"
width={800}
height={600}
quality={90} // Higher quality
/>
loader
PropIf you need more control over how images are loaded, you can use a custom loader. This is useful if you want to serve images from a different domain or apply specific transformations.
const myLoader = ({ src }) => {
return `https://example.com/${src}`
}
<Image
loader={myLoader}
src="image.jpg"
alt="Description of image"
width={800}
height={600}
/>
Next.js supports modern image formats like WebP and AVIF, which provide better compression and quality. Ensure your images are in these formats if possible. You can also use the format
prop to specify the desired format.
placeholder
PropFor a better user experience, consider using the placeholder
prop to show a blurred version of the image while the full image loads.
<Image
src="/path/to/image.jpg"
alt="Description of image"
width={800}
height={600}
placeholder="blur"
blurDataURL="/path/to/blur-image.jpg"
/>
If you're serving images from a remote source, consider using a CDN that supports image optimization. This can significantly improve load times and image quality.
sizes
PropIf you're using responsive images, the sizes
prop can help the browser determine which image size to download based on the viewport size.
<Image
src="/path/to/image.jpg"
alt="Description of image"
width={800}
height={600}
sizes="(max-width: 600px) 100vw, 50vw"
/>
By following these best practices, you can ensure that your images in Next.js are of the best quality while also being optimized for performance. Always test your images on different devices and screen sizes to ensure they look great everywhere.