使用append()在graphicsmagick中拼接图像

我有大量的图像存储在一个单独的服务器上,需要在单个页面上显示为某种types的马赛克,其中可以dynamic显示或隐藏各个元素。

应该获取这些图像,resize,然后作为精灵缝合在一起,并用作div的背景图像。 在这一点上获取和resize是一个非问题,因为最大的障碍是理解附加方法,或者更确切地说,如何将图像添加到集合中,以便使用所述方法。

根据文件:

gm("img.png").append(ltr) 

应该:

 Append a set of images 

我如何获得多个图像到一个“集”?

我能做的最好的,如下所示…

 var gm = require('gm') gm('@images.txt') .append() .write('crazy.png', function (err) { if (!err) console.log('crazytown has arrived'); }) 

其中images.txt是要追加的图像的列表。

还没有能够弄清楚如何传递图像列表文件以外的一组图像。

从网站得到了想法 – http://www.graphicsmagick.org/GraphicsMagick.html

在运行命令行实用程序时,可以在文件名前添加@符号,从该文件中读取图像文件名列表。 如果你有太多的图像文件名以适应命令行,这很方便。

希望能帮助LeeT

假设images是这样的pathstring的数组:

 [ "/home/user/first.jpg", "/home/user/a.png", "/home/user/another.gif" ]; 

那么这应该工作:

 var gm = require('gm'); var gmstate = gm(images[0]); for (var i = 1; i < images.length; i++) gmstate.append(images[i]); // finally write out the file asynchronously gmstate.write('/home/user/result.png', function (err) { if (!err) console.log('Hooray!'); }); 

这个想法是:

  1. 从graphicsmagick状态variablesgmstate
  2. 在一个循环中同步追加到它。
  3. write()做真正的工作,这是asynchronous的。

这相当于gm('first').append('second').append('third')....append('last')

也许可以从空状态开始: var gmstate = gm();

我不得不承认,如果你在文件中有一个列表,那么在LeeNX的答案中@文件列表是非常容易的,但如果你不… …?

编辑:如果您需要水平追加图像,请添加第二个参数为append() ,如下所示:

 gmstate.append(image, true); 

来源: append()文档

Interesting Posts