使用锐利批量转换整个文件夹的图像
Bulk Convert Entire Folder of Images with sharp
我有一个项目,需要将大量 .png 文件批量转换为 .jpg,并对压缩质量进行一些控制。使用节点模块 sharp
对单个文件很有用,例如:
const sharp = require("sharp");
sharp("input/82.png")
.toFormat("jpeg")
.jpeg({ quality: 70 })
.toFile("output/82.jpg");
但是我有数百个文件需要一次转换。我曾希望能够对文件使用一些通配符,例如:
sharp("input/*.png")
.toFormat("jpeg")
.jpeg({ quality: 70 })
.toFile("output/*.jpg");
尽管这当然行不通,但我也没有尝试遍历所有文件或使用节点模块 glob
。感谢此处提供的任何指导。
在另一位开发者的帮助下,答案比我预期的要复杂一些,需要使用节点模块glob
:
// example run : node sharp-convert.js ~/Projects/docs/public/images/output/new
const fs = require('fs');
const process = require('process');
const path = require('path');
const glob = require("glob")
const dir = process.argv[2];
const input_path = path.join(dir, '**', '*.png');
const output_path = path.join(dir, "min");
const sharp = require('sharp');
glob(input_path, function (err, files) {
if (err != null) { throw err; }
fs.mkdirSync(output_path, { recursive: true });
files.forEach(function(inputFile) {
sharp(inputFile)
.jpeg({ mozjpeg: true, quality: 60, force: true })
.toFile(path.join(output_path, path.basename(inputFile, path.extname(inputFile))+'.jpg'), (err, info) => {
if(err === null){
fs.unlink(inputFile, (err2) => {
if (err2) throw err2;
console.log('successfully compressed and deleted '+inputFile);
});
} else { throw err }
});
});
});
注意:此方法具有破坏性,将删除任何现有的 .png。请务必备份您的原件。
我有一个项目,需要将大量 .png 文件批量转换为 .jpg,并对压缩质量进行一些控制。使用节点模块 sharp
对单个文件很有用,例如:
const sharp = require("sharp");
sharp("input/82.png")
.toFormat("jpeg")
.jpeg({ quality: 70 })
.toFile("output/82.jpg");
但是我有数百个文件需要一次转换。我曾希望能够对文件使用一些通配符,例如:
sharp("input/*.png")
.toFormat("jpeg")
.jpeg({ quality: 70 })
.toFile("output/*.jpg");
尽管这当然行不通,但我也没有尝试遍历所有文件或使用节点模块 glob
。感谢此处提供的任何指导。
在另一位开发者的帮助下,答案比我预期的要复杂一些,需要使用节点模块glob
:
// example run : node sharp-convert.js ~/Projects/docs/public/images/output/new
const fs = require('fs');
const process = require('process');
const path = require('path');
const glob = require("glob")
const dir = process.argv[2];
const input_path = path.join(dir, '**', '*.png');
const output_path = path.join(dir, "min");
const sharp = require('sharp');
glob(input_path, function (err, files) {
if (err != null) { throw err; }
fs.mkdirSync(output_path, { recursive: true });
files.forEach(function(inputFile) {
sharp(inputFile)
.jpeg({ mozjpeg: true, quality: 60, force: true })
.toFile(path.join(output_path, path.basename(inputFile, path.extname(inputFile))+'.jpg'), (err, info) => {
if(err === null){
fs.unlink(inputFile, (err2) => {
if (err2) throw err2;
console.log('successfully compressed and deleted '+inputFile);
});
} else { throw err }
});
});
});
注意:此方法具有破坏性,将删除任何现有的 .png。请务必备份您的原件。