2013-06-28 14 views
13

kullanarak döşeyin. Dört adet 256x256 px resimim var: a.jpg, b.jpg, c.jpg ve d.jpg. 2x2 mozaik görüntü üretmek için bunları birleştirmek istiyorum. Ortaya çıkan görüntü de 256x256 piksel olmalıdır. Bunun gibiDört görüntüyü Node.js ve GraphicsMagick

:

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

bu

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 

ile yapılabilir düz GraphicsMagick ve komut satırını kullanarak Ama sorun, nasıl yapmak bu GraphicsMagick within Node.js kullanarak?

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

Sanırım iki görüntüden (1 x 2) birleştirilen iki görüntü oluşturarak onları 90 derece sola döndürerek yeniden birleştirebilirsiniz (4 x 4). Elbette, en iyi çözüm değil. –

cevap

30

Çözüm bulundu! gm'un genel API'sinin, ihtiyacım olan şey için uygun bir yöntem sağlamadığı görülüyor. Çözüm, özel GraphicsMagick argümanlarını eklemeyi mümkün kılan kamuya açık olmayan .in yöntemini kullanmaktı.

Aşağıdaki kod, dört 256x256 görüntüyü alır, bunları 512x512 kanvasta 2x2 ızgaraya birleştirir, hızlı doğrusal enterpolasyonu kullanarak boyutu 256x256'ya indirir ve sonucu output.jpg'ye kaydeder.

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