电子应用程序中的Imagemin不压缩图像

问题描述

我正在尝试使用此代码在Electron应用程序中压缩单个PNG图像

  const files = await imagemin([filePath],{
    destination: destinationPath,plugins: [
      imageminpngquant({
        quality: [0.2,0.4],speed: 1
      })
    ]
  });
  debuglog(files);

filePath包含PNG文件的完整路径,例如

C:\Users\name\Downloads\images\needle.png

文件确实存在,并且路径正确:当我将相同路径放入Windows资源管理器时,png打开。

destinationPath包含一个指向.png文件所在目录的路径(换句话说,我想覆盖原始文件),例如

C:\Users\name\Downloads\images

运行此命令时,原始文件保持不变,并且函数调用返回的变量“ files”包含一个空数组。

我在做什么错?有没有一种方法可以获取调试输出来告诉我imagemin到底在做什么?

更新:这是一个具体示例。代码如下:

  console.log("compresspNG");
  console.log(filePath);
  console.log(path);
  var files = await imagemin([filePath],{
    destination: path,speed: 1
      })
    ]
  });
  console.log(files);

这将产生以下日志输出

Log output from running the image compression code

解决方法

This bug report表示您需要将反斜杠(\)转换为正斜杠(/)。

根据其中一位评论者,globby所依赖的软件包imagemin期望使用带有正斜杠(/)的文件路径作为分隔符。

这是一个完整的示例:

const imagemin = require("imagemin");
const imageminPngquant = require("imagemin-pngquant");

let input_path = "C:\\path\\to\\file.png";
let output_dir = "C:\\output\\directory";

// Replace backward slashes with forward slashes      <-- Option A
input_path = input_path.replace(/\\/g,"/");
output_dir = output_dir.replace(/\\/g,"/");

(async () => {
  var files = await imagemin([input_path],{
    destination: output_dir,// glob: false,<-- Option B
    plugins: [
      imageminPngquant({
        quality: [0.2,0.4],speed: 1
      })
    ]
  });
  console.log(files);
})();

或者,设置glob: false也应该有助于接受Windows文件路径,因为它规避了globby模块的使用。