运行ImageMagick的NodeJ转换来自目录的所有图像

这是我最近遇到的node.js的基本imagemagick设置。 我明白,我问的问题是非常新手,但我是新的节点js和imagemagick,我想尝试使其dynamic。 当前脚本bellow裁剪一个特定的文件,是否有办法使它转换到目录/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); 

是的,你可以通过执行所有文件本身的foreach来实现。 你也需要安装asynchronous模块:

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