node.js - 使用graphicsmagick获取图像像素

标签 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)的最简单方法是什么?

最佳答案

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

关于node.js - 使用graphicsmagick获取图像像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35645523/

相关文章:

node.js - 使用 telnet 测试 Node websockets

php - 如何从 PHP 中的 URL 上传图像

python - 在 Python 中从单个大图像创建多个缩略图的最快方法

node.js - 根据原始图像大小进行 GraphicsMagick 裁剪(重新使用读取流)

node.js - AWS Lambda postgres 查询超时

javascript - 使用 Javascript SDK 在启动时关联 ElasticIP

couchdb - 在 CouchDB 中使用 require() 或//!json、!code?

java - 从 PNG 图像中提取元数据

javascript - 在 node.js 中使用 graphicsmagick 提取 gif 帧

java - GraphicsMagick + im4java,如何删除颜色配置文件(和其他冗余数据)