使用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!'); });
这个想法是:
- 从graphicsmagick状态variables
gmstate
- 在一个循环中同步追加到它。
-
write()
做真正的工作,这是asynchronous的。
这相当于gm('first').append('second').append('third')....append('last')
。
也许可以从空状态开始: var gmstate = gm();
。
我不得不承认,如果你在文件中有一个列表,那么在LeeNX的答案中@
文件列表是非常容易的,但如果你不… …?
编辑:如果您需要水平追加图像,请添加第二个参数为append()
,如下所示:
gmstate.append(image, true);
来源: append()
文档