Given a src
directory of images, the script creates a clone of the directory and its contained images at the provided dest
path, but with multiple sizes of each image, based on the sizes specified in the settings.
- Can dynamically adjust the JPEG compression quality of each set of generated images so that they conform closely to a specified file size.
- Appends the output width to the end of each filename. For example
image.jpg
becomesimage-600w.jpg
. - Images will never be up-scaled. If the image is smaller than some of the dimensions provided, only sizes of the image equal to or smaller than the original will be generated.
- With each responsive image generated, the aspect ratio will be maintained, and the image will be resized so that both the height and width are less than or equal to the relevant size setting.
- Files and directories in the
dest
directory are deleted if the corresponding files or directories no longer exist int hesrc
directory. - If the
resizeOriginal
option istrue
, the original version of the image will be overwritten by the biggest responsive version of the image generated.
npm install responsive-image-directory
const responsiveImages = require('responsive-images');
responsiveImages(settings);
required - the path to the source directory of images.
required - the path to the output directory of the generated images.
required - an array of maxWidth
and maxHeight
combinations. Responsive versions of each image will be generated based on these values.
- Images will never be up-scaled. If the image is smaller than some of the dimensions provided, only sizes of the image equal to or smaller than the original will be generated.
- With each responsive image generated, the aspect ratio will be maintained, and the image will be resized so that both the height and width are less than or equal to the relevant size setting.
optional - path to a file to save the verbose log of image operations to.
optional - if true
, the original image from the src
directory will be overwritten with the largest responsive version of the image in the dest
directory.
optional; default === true - if true
, existing responsive images in the dest
directory which are newer than the original image in the src
directory will not be regenerated.
optional; default === 10 - the number of images from the src
directory to process at a time.
optional; default === 90 - the maximum allowed quality setting for JPEG compression. If dynamicQualityParams
(See below) is not passed, then the quality setting for JPEG compression will be fixed to this value for all images.
optional; default === 1 - the minimum allowed quality setting for JPEG compression.
optional - an object that must contain width
, height
and maxBytes
.
Allows the quality of each set of responsive images to be adjusted on the fly, such that the file sizes of the responsive images to conform closely to the params in dynamicQualityParams
.
Options
...
"dynamicQualityParams": {
"width": 1440,
"height": 1080,
"maxBytes": 204800
}
"maxQuality": 90,
"minQuality": 10,
"sizes": [{
"maxWidth": 400,
"maxHeight": 300
}, {
"maxWidth": 800,
"maxHeight": 600
}, {
"maxWidth": 1600,
"maxHeight": 1200
}]
...
Assume you have one large image in the src
directory with dimensions of 4000px x 2000px
. Based on the sizes
setting above, three responsive versions of the image would be generated in the dest
directory with the following dimensions:
1600px X 800px
800px x 400px
400px x 200px
First, the quality of the largest image in the set will be determined as follows.
- The
dynamicQualityParams
setting tells us that a1440px
x1080px
image has amaxBytes
setting of204800 bytes
. - Based on this, a
1600px
x800px
image has a proportionalmaxBytes
setting of168559
bytes.- Note that if the original image has a smaller file size than this, then
maxBytes
will be set to the file size of the original image.
- Note that if the original image has a smaller file size than this, then
- The script will then generate
1600px x 800px
image at themaxQuality
setting, and if the resulting image is bigger than168559
bytes, it will reduce the quality and try again, repeating this process until the resulting image is just below168559
bytes.- Note that the image will never be reduced to below the
minQuality
setting, even if the resulting image is bigger thanmaxBytes
.
- Note that the image will never be reduced to below the
The final quality
value above is then used to generate each other image in the set.
Assuming the final quality
setting of the largest image was 75
, then the 800px x 400px
image and 400px x 200px
will each be generated with a quality setting of 75
.
{
"src": "./input",
"dest": "./output",
"logPath": "./image-log.json",
"resizeOriginal": true,
"skipExisting": true,
"batchSize": 20,
"dynamicQualityParams": {
"width": 1440,
"height": 1080,
"maxBytes": 204800
},
"maxQuality": 90,
"minQuality: 10,
"sizes": [
{
"maxWidth": 400,
"maxHeight": 300
},
{
"maxWidth": 50000,
"maxHeight": 40000
},
{
"maxWidth": 4000,
"maxHeight": 3000
},
{
"maxWidth": 20000,
"maxHeight": 3000
}
]
}