2013-06-28 6 views
13

私は4つの256x256の画像を持っています:a.jpg、b.jpg、c.jpg、d.jpg。私は2x2モザイク画像を生成するためにそれらを統合したいと思います。結果の画像も256x256ピクセルでなければなりません。このようNode.jsとGraphicsMagickを使用して4つの画像をまとめます。

+---+---+ 
| a | b | 
+---+---+ 
| c | d | 
+---+---+ 

平野GraphicsMagickのコマンドラインを使用するが、これは

gm convert -background black \ 
    -page +0+0  a.jpg \ 
    -page +256+0 b.jpg \ 
    -page +0+256 c.jpg \ 
    -page +256+256 d.jpg \ 
    -minify \ 
    -mosaic output.jpg 

で行うことができますしかし、問題はGraphicsMagick within Node.jsを使ってこれを行う方法、ありますか?

gm('a.jpg') 
    .append('b.jpg') 
    .append('c.jpg') 
    .append('d.jpg') 
    .write('output.jpg', function (err) {}) 
// Produces 1x4 mosaic with dimensions 256x1024 px, not what I wanted 
+0

2つのイメージを1つのイメージにマージして、90度左に回転させてから再びマージすることができます(4 x 4)。確かに、それは最善の解決策ではありません。 –

答えて

30

解決策を見つけました! gmの公開APIは、私が必要としていたものに対して適切な方法を提供していないようです。解決策は、公式ではない.inメソッドを使用して、カスタムGraphicsMagick引数を挿入できるようにすることでした。

次のコードでは、4つの256x256イメージを取り込み、512x512キャンバス上で2x2グリッドにマージし、高速リニア補間を使用してサイズを256x256に半分にし、結果をoutput.jpgに保存します。

var gm = require('gm'); 

// a b c d -> ab 
//    cd 
gm() 
    .in('-page', '+0+0') // Custom place for each of the images 
    .in('a.jpg') 
    .in('-page', '+256+0') 
    .in('b.jpg') 
    .in('-page', '+0+256') 
    .in('c.jpg') 
    .in('-page', '+256+256') 
    .in('d.jpg') 
    .minify() // Halves the size, 512x512 -> 256x256 
    .mosaic() // Merges the images as a matrix 
    .write('output.jpg', function (err) { 
     if (err) console.log(err); 
    }); 
関連する問題