2012-09-04 49 views
1

我有大量的图像存储在单独的服务器上,需要在单个页面上显示为某种类型的镶嵌图,其中可能会动态显示或隐藏各个元素。使用append()在graphicsmagick中拼接图像

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

根据文档:

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

应该:

Append a set of images 

如何获得多张图片到 “设置”?

回答

0

尽我所能去做,结果如下......

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

4

比方说images是路径字符串的一个这样的数组:

[ "/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状态变量开始gmstate
  2. 同步地追加到循环中。
  3. write()做了真正的工作,这是异步的。

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

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

我不得不承认,在LeeNX的答案中,@文件列表破解如果你有一个文件列表,但如果你不... ...?

编辑:如果您需要将图像水平方向追加,第二个参数添加trueappend(),像这样:

gmstate.append(image, true); 

来源:Documentation for append()

+0

嗨,如何增加对 '真'水平追加? – Hammer

+1

我不是GraphicsMagick的专家,但为你找到了一些东西:http://aheckmann.github.io/gm/docs.html#append说:'ltr'(可选):** true从左到右* *, 一世。即使用'gmstate.append(images [i],true)'。请告诉我这是否有效,然后我会更新答案。 – nalply

+0

谢谢。这就像一个魅力。 – Hammer