Попытка вывести несколько изображений с разными точками останова (2000 Вт, 1200 Вт, ...) с использованием потоков и резких - PullRequest
0 голосов
/ 20 июня 2019

У меня есть папка внутри src/images/original Сценарий nodejs находится в корневом каталоге.Вывод должен быть src/images/processed

Таким образом, он должен получить каждый файл из папки original и вывести их с измененным размером и переименовать в папку processed.

Я также пытался запустить ее как

sharp(filePath).resize(width, null).toFile(outputPath)
sharp(filePath).resize(width, null).toFile(outputPath)
sharp(filePath).resize(width, null).toFile(outputPath)
sharp(filePath).resize(width, null).toFile(outputPath)

в каждой строке для разных значений ширины и outputPath, но это не работает.Когда я обернул эти операторы в массив и Promise.all при втором запуске, скрипт запустился, но не тогда, когда выходной каталог был пуст.Я совершенно запутался в том, что происходит.Я начал изучать узел недавно.

Вот то, что я придумал, моя лучшая попытка до сих пор

const fs = require("fs");
const sharp = require("sharp");
const rimraf = require("rimraf");
const path = require("path");

// delete the processed folder
// rimraf.sync(imagesDirectory + "/processed");

const imagesDirectory = "./src/images";

if (!fs.existsSync(imagesDirectory + "/processed")) {
  fs.mkdirSync(imagesDirectory + "/processed");
}

const imageFileNames = fs.readdirSync(imagesDirectory + "/original");
const imageWidthBreakPoints = [2000, 1200, 1000, 800, 600, 400];

imageFileNames.forEach(file => {
  const filePath = imagesDirectory + "/original/" + file;
  imageWidthBreakPoints.forEach(width => {
    const outputPath =
      imagesDirectory +
      "/processed/" +
      path.parse(file).name + // name
      "-" +
      parseInt(width) + //2000w
      "w.jpg";
    console.log(filePath, outputPath);
    transformers(filePath, outputPath, width);
  });
});

function transformers(filePath, outputPath, width, withoutEnlargement = true) {
  const readableStream = fs.createReadStream(filePath);
  const writableStream = fs.createWriteStream(outputPath);
  const transform = sharp().resize(width, null, {
    withoutEnlargement: withoutEnlargement
  });
  readableStream.pipe(transform).pipe(writableStream);
}

Нет ошибок, код работает успешно, но нет вывода.

...