使用graphicsmagick

时间:2016-02-26 07:03:52

标签: node.js imagemagick graphicsmagick

目前我正在使用pngjs,如this answer中所述,但我想看看如何使用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在给定坐标(x,y)处获取像素信息(r,g,b,a)的最简单方法是什么?

1 个答案:

答案 0 :(得分: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", ...);
    });
});