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

时间:2012-09-04 21:54:57

标签: javascript node.js css-sprites graphicsmagick

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

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

根据文件:

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

应:

Append a set of images

如何将多张图片放入“套装”?

2 个答案:

答案 0 :(得分: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. 从图形标记状态变量gmstate
  2. 开始
  3. 同步循环追加到它。
  4. write()完成了真正的工作,这是异步的。
  5. 这相当于gm('first').append('second').append('third')....append('last')

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

    我必须承认,如果你在文件中有一个列表,那么LeeNX答案中的@文件列表会更容易,但是如果你没有......?

    编辑:如果您需要水平附加图片,请向true添加第二个参数append(),如下所示:

    gmstate.append(image, true);
    

    来源:Documentation for append()

答案 1 :(得分: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

  

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

希望有所帮助 LEET