Responsive Images
imgx makes it easy to generate responsive image sets for modern web development, ensuring optimal image delivery for different screen sizes and device capabilities.
Benefits of Responsive Images
- Improved Performance: Serve appropriately sized images to reduce bandwidth usage
- Better User Experience: Faster page loads on all devices
- SEO Benefits: Speed improvements lead to better search engine rankings
- Enhanced Adaptability: Your images adapt to different viewport sizes
Creating Responsive Image Sets
CLI
bash
# Generate responsive images with default sizes [320, 640, 960, 1280, 1920]
imgx responsive path/to/image.jpg
# Specify custom sizes
imgx responsive path/to/image.jpg --sizes 480,768,1024,1600
# Generate in multiple formats
imgx responsive path/to/image.jpg --formats webp,avif,jpeg
# Specify output directory
imgx responsive path/to/image.jpg --output-dir ./public/images/responsiveJavaScript/TypeScript API
ts
import { generateResponsive } from '@stacksjs/imgx'
// Generate responsive images with default settings
const images = await generateResponsive('path/to/image.jpg')
// With custom options
const customImages = await generateResponsive('path/to/image.jpg', {
sizes: [480, 768, 1024, 1600],
formats: ['webp', 'jpeg'],
outputDir: './public/images/responsive',
quality: 80,
filenameTemplate: '[name]-[width]w.[format]',
})
// The result contains information about all generated images
console.log(`Generated ${images.length} responsive images`)Configuration
You can set default responsive image options in your configuration file:
ts
// imgx.config.ts
export default {
responsive: {
sizes: [320, 640, 960, 1280, 1920],
formats: ['webp', 'jpeg'],
quality: 80,
generateSrcset: true,
filenameTemplate: '[name]-[width].[ext]',
},
}HTML Usage
imgx can also generate the HTML code for responsive images with appropriate srcset and sizes attributes:
bash
imgx responsive path/to/image.jpg --generate-htmlThis will output HTML similar to:
html
<picture>
<source
type="image/webp"
srcset="
/images/image-320.webp 320w,
/images/image-640.webp 640w,
/images/image-960.webp 960w,
/images/image-1280.webp 1280w,
/images/image-1920.webp 1920w
"
sizes="(max-width: 768px) 100vw, 50vw"
>
<img
src="/images/image-1280.jpeg"
srcset="
/images/image-320.jpeg 320w,
/images/image-640.jpeg 640w,
/images/image-960.jpeg 960w,
/images/image-1280.jpeg 1280w,
/images/image-1920.jpeg 1920w
"
sizes="(max-width: 768px) 100vw, 50vw"
width="1280"
height="720"
alt="Image description"
loading="lazy"
>
</picture>Custom Filename Templates
You can customize how the responsive image filenames are generated using the filenameTemplate option:
ts
await generateResponsive('path/to/image.jpg', {
filenameTemplate: '[name]-[width]w.[format]',
})Available placeholders:
[name]: Original filename without extension[width]: Width of the generated image[height]: Height of the generated image[format]or[ext]: File extension/format
Art Direction
For more complex responsive image requirements (art direction), you may need to process multiple source images. imgx can help with this workflow:
bash
# Generate different aspect ratios for different screen sizes
imgx responsive path/to/landscape.jpg --sizes 960,1280,1920 --output-dir ./public/images/desktop
imgx responsive path/to/portrait.jpg --sizes 320,480,640 --output-dir ./public/images/mobile