2016-02-26 100 views
1

目前我使用的是pngjs,如this answer中所述,但我想了解如何使用GraphicsMagick獲取圖像的像素。使用graphicsmagick獲取圖像像素

我使用gm作爲GraphicsMagick的包裝。我找不到任何信息如何獲取圖像像素。

我想有這樣的:

myImg.getPixel(x, y, function (err, pixel) { 
    // pixel: { r: ..., g: ..., b: ..., a: ... } 
}); 

我不知道是否toBuffer將有助於:

gm('img.jpg') 
    .resize(100, 100) 
    .toBuffer('PNG',function (err, buffer) { 
    if (err) return handle(err); 
    console.log('done!'); 
    }) 

具有緩衝,也許我能夠以某種方式計算像素的顏色...

什麼是使用graphicsmagick得到像素信息(r,g,b,a)在給定座標(x,y)的最簡單方法?

回答

2

使用pngjs庫,可以解析來自GraphicsMagick工具獲得的PNG緩衝區:​​

const PNG = require("pngjs").PNG 
    , gm = require("gm") 
    ; 

let img = gm("path/to/image.png"); 

// Get the PNG buffer 
img.toBuffer("PNG", (err, buff) => { 
    if (err) { ... } 

    // Get the image size 
    img.size((err, size) => { 
     if (err) { ... } 

     // Parse the PNG buffer 
     let str = new PNG(); 
     str.end(buff); 

     // After it's parsed... 
     str.on("parsed", buffer => { 
     // Get some pixel from the image 
     let x = 27 
      , y = 9 
      ; 

     let idx = (size.width * y + x) << 2 
      , rgb = { 
       r: buffer[idx] 
      , g: buffer[idx + 1] 
      , b: buffer[idx + 2] 
      } 
      ; 
     }); 
     str.on("error", ...); 
    }); 
});