1

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

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

根据文档:

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

应该:

Append a set of images

如何将多个图像放入“集合”?

4

2 回答 2

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);

资料来源:文档append()

于 2012-10-04T17:03:20.597 回答
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

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

希望对李特有所帮助

于 2012-09-05T09:34:26.823 回答