2012-09-04 52 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