使用 graphicsmagick 获取图像像素

Get image pixels using 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) 的最简单方法是什么?

使用 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", ...);
    });
});