NodeJs 运行 ImageMagick 转换目录中的所有图像
NodeJs running ImageMagick convert all images from directory
这是我最近遇到的 node.js 的基本 imagemagick 设置。我知道我问的问题是新手,但我是 node 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);
是的,您可以通过所有文件本身实现 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);
这是我最近遇到的 node.js 的基本 imagemagick 设置。我知道我问的问题是新手,但我是 node 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);
是的,您可以通过所有文件本身实现 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);