这是我最近遇到的node.js的基本imagemagick设置。我理解我提出的问题是非常新手,但我是节点js和imagemagick的新手,我想尝试让它变得动态。下面的当前脚本正在裁剪一个特定文件,是否有办法将转换应用于目录/before
中的所有文件,然后将其输出到目录/after
?此外,我想对目录中的所有图像执行的操作是在每个图像上应用水印(代码中的裁剪操作仅来自示例)。
var http = require("http");
var im = require("imagemagick");
var args = [
"image.png",
"-crop",
"120x80+30+15",
"output.png"
];
var server = http.createServer(function(req, res) {
im.convert(args, function(err) {
if(err) { throw err; }
res.end("Image crop complete");
});
}).listen(8080);
答案 0 :(得分:2)
是的,你可以通过所有文件本身实现foreach来实现。 您还需要安装异步模块:
npm install async
示例代码:
var async = require('async'),
fs = require('fs'),
im = require('imagemagick'),
maxworkers = require('os').cpus().length,
path = require('path');
module.exports = resize;
function resize(params) {
var queue = async.queue(resizeimg, maxworkers);
fs.readdir(params.src, function(err, files) {
files.forEach(function(file) {
queue.push({
src: path.join(params.src, '/', file),
dest: path.join(params.dest, '/', file),
width: params.width,
height: params.height
})
});
});
}
function resizeimg(params, cb) {
var imoptions = {
srcPath: params.src,
dstPath: params.dest
};
if (params.width !== undefined) imoptions.width = params.width;
if (params.height !== undefined) imoptions.height = params.height
im.resize(imoptions, cb);
}
然后在你的代码中:
var http = require("http");
var resize = require("./resize");
var server = http.createServer(function(req, res) {
resize({
src: '/source/folder',
dest: '/destination/folder',
width: 300
});
}).listen(8080);