I'm trying to compress a single PNG image in an Electron application using this code
const files = await imagemin([filePath], {
destination: destinationPath,
plugins: [
imageminPngquant({
quality: [0.2, 0.4],
speed: 1
})
]
});
debuglog(files);
filePath contains a full path to a PNG file, e.g.
C:\Users\name\Downloads\images\needle.png
This file does exist, and the path is correct: when I put the same path into Windows explorer, the png opens.
destinationPath contains a path to the same directory in which the .png file resides (in other words, I want to overwrite the original file), e.g.
C:\Users\name\Downloads\images
When I run this, the original file remains unchanged, and the variable "files" returned by the function call contains an empty array.
What am I doing wrong? Is there a way to get debug output that tells me what exactly imagemin is doing?
Update: here's a concrete example. The code looks like this:
console.log("compressPNG");
console.log(filePath);
console.log(path);
var files = await imagemin([filePath], {
destination: path,
plugins: [
imageminPngquant({
quality: [0.2, 0.4],
speed: 1
})
]
});
console.log(files);
This produces the following log output:
This bug report indicates that you need to convert backward slashes (
\
) to forward slashes (/
).According to one of the commenters, the package
globby
thatimagemin
relies on expects filepaths with forward slashes (/
) as the delimiter.Here is a complete example:
Alternatively, setting
glob: false
should also help accept Windows filepaths, as it circumvents use of theglobby
module.