Because I am not :)
If somebody other than me could take over as maintainer, in case there are users, that would be very welcome. Security and usability would benefit, I think.
This is a plugin for Metalsmith that uses node-imagemagick-native to convert image-files
This module is released via npm, install the latest released version with
npm install --save metalsmith-convert
This module uses node-imagemagick-native. You must be able to compile c++ code to install imagemagick-native. The Readme provides instructions for Linux, Mac OS X and Windows respectively.
If using the CLI for Metalsmith, metalsmith-convert can be used like any other plugin by including it in metalsmith.json
. For example:
{
"plugins": {
"metalsmith-convert": {
"src": "**/*.svg",
"target": "png"
}
}
}
For metalsmiths JavaScript API, metalsmith-convert can be used like any other plugin, by attaching it to the function invocation chain on the metalsmith object. For example:
var convert = require('metalsmith-convert');
require('metalsmith')(__dirname)
.use(convert({
src: '**/*.svg',
target: 'png'
})
.build();
metalsmith-convert requires the src
options. The parameter target
is optional; if it is not given, files will be converted to the
source-format.
src
is a globbing pattern that specifies which files to converttarget
is an imagemagick format specifierextension
the file extension to use for the conversion target (starting with.
). Set to"." + target
if not given explicitly.remove
if set totrue
, don't include the source-file in the build directory.resize
set to{width: XXX, height: YYY}
to resize the image; the name will reflect the size (name_XXX_YYY.ext
) ifnameFormat
is not given.resizeStyle
: optional. default: 'aspectfill'. can be 'aspectfit','fill'. Must be added as a parameter to theresize
option.aspectfill
: keep aspect ratio, get the exact provided size.aspectfit
: keep aspect ratio, get maximum image that fits inside provided sizefill
: forget aspect ratio, get the exact provided size
rename_only
: if set to true, omits the call to ImageMagick and only moves the files to their intended target.nameFormat
: the format for the names of the converted files, the following placeholders are available%b
the basename of the source file, e.g. givensource.png
, the value will besource
%e
the extension of the target format, including the dot%x
the width of the resulting image%y
the height if the resulting image
renameSourceFormat
: the name-format to rename the source files in the result/build to. Accepts the same place-holders asnameFormat
.
The plugin also forwards certain options directly to imagemagick-native, these options are density
, blur
, rotate
, flip
, strip
, gravity
and quality
. See imagemagick-native docs for more info.
- It is possible to pass options as array of option-objects to implement multiple rules, e.g. resize to two sizes for different thumbnail sizes:
{
"plugins": {
"metalsmith-convert": [
{
"src": "**/*.svg",
"target": "png",
"resize": {width: 320, height: 240},
"nameFormat": "%b_thumb%e"
},
{
"src": "**/*.svg",
"target": "png",
"resize": {width: 640, height: 480, resizeStyle: 'aspectfit'},
"nameFormat": "%b_thumb_large%e"
}
]
}
}
- Resize images without format conversion:
{
"plugins": {
"metalsmith-convert":
{
"src": "**/*.svg",
"resize": {width: 320, height: 240},
"nameFormat": "%b_thumb%e"
},
}
}
- Convert to the source name, but keep the original under a different name:
{
"plugins": {
"metalsmith-convert":
{
"src": "**/*.svg",
"resize": {width: 320, height: 240},
"nameFormat": "%b_thumb%e"
"renameSourceFormat": "%b_orig_%e"
},
}
}
To speed up your development cycle you can use the rename_only
option, pictures will not be processed and have a potentially wrong
file ending, but if your setup can cope with that, on demand scaling
might be preferable to longer conversion times.
Contributions are always welcome. Just make sure that all tests pass before sending a pull request. And don't forget to add tests for your contributions!