Imagemin в приложении Electron не сжимает изображения

Я пытаюсь сжать одно изображение PNG в приложении Electron, используя этот код

  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

Когда я запускаю это, исходный файл остается неизменным, а файлы переменных, возвращаемые вызовом функции, содержат пустой массив.

Что я делаю не так? Есть ли способ получить вывод отладки, который говорит мне, что именно делает imagemin?

Обновление: вот конкретный пример. Код выглядит следующим образом:

  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);

Это производит следующий вывод журнала:

Вывод журнала запуска кода сжатия изображений


person LKM    schedule 12.09.2020    source источник
comment
Не могли бы вы console.log() указать два пути непосредственно перед кодом, который вы опубликовали? Обратная косая черта может быть проблемой.   -  person snwflk    schedule 12.09.2020
comment
Кроме того, в будущем было бы полезно включить в свой пост минимально воспроизводимый пример. Пока что я вообще не вижу связи с Electron, поэтому пример мог бы быть очень кратким. Тем не менее, часть работы ОП состоит в том, чтобы максимально упростить им помощь (и часто это предотвращает задавание целых вопросов).   -  person snwflk    schedule 12.09.2020
comment
Спасибо, snwflk, я добавил пример, который показывает фактический вывод журнала для путей. Я не уверен, как создать воспроизводимый пример приложения Electron, и я не уверен, есть ли связь с Electron вообще, но, поскольку это происходит в приложении Electron, я подумал, что должен предоставить этот контекст. Я постараюсь придумать что-то воспроизводимое, что я могу опубликовать.   -  person LKM    schedule 12.09.2020


Ответы (1)


В этом отчете об ошибке указано, что вам необходимо преобразовать обратную косую черту (\) в прямую косую черту ( /).

По словам одного из комментаторов, пакет 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.

person snwflk    schedule 12.09.2020
comment
Это сработало! Спасибо большое, я уже с ума сошел. - person LKM; 15.09.2020