2016-02-26 2 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!'); 
    }) 

Имея буфер, может быть, я в состоянии вычислить как-то пиксельные цвета ...

Каков самый простой способ получить информацию о пикселях (r, g, b, a) при заданных координатах (x, y) с помощью graphicsmagick?

ответ

2

Используя pngjs библиотеку можно разобрать буфер PNG, полученный из GraphicsMagick:

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", ...); 
    }); 
}); 
Смежные вопросы