2013-06-28 10 views
13

का उपयोग करके चार छवियों को एक साथ टाइल करें मेरे पास चार 256x256 पीएक्स छवियां हैं: a.jpg, b.jpg, c.jpg और d.jpg। मैं 2x2 मोज़ेक छवि का उत्पादन करने के लिए उन्हें एक साथ विलय करना चाहता हूं। परिणामस्वरूप छवि भी 256x256 पीएक्स होना चाहिए।नोड.जेएस और ग्राफिक्स मैगिक

इस तरह:

+---+---+ 
| 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

मैं तुम्हें दो छवियों उन्हें 90 डिग्री छोड़ दिया करने के लिए बारी बारी से करने दो छवियों (1 एक्स 2) से विलय कर दिया बना सकते हैं, और फिर उन्हें फिर से विलय (4 x 4) लगता है। निश्चित रूप से, यह सबसे अच्छा समाधान नहीं है। –

उत्तर

30

समाधान मिला! ऐसा लगता है कि gm का सार्वजनिक एपीआई मुझे जो चाहिए उसके लिए कोई उचित तरीका प्रदान नहीं करता है। समाधान गैर-सार्वजनिक .in विधि का उपयोग करना था जो कस्टम ग्राफिक्स मैजिक तर्कों को सम्मिलित करना संभव बनाता है।

निम्नलिखित कोड चार 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); 
    }); 
संबंधित मुद्दे