使用graphicsmagick获取图像像素
问题描述:
目前我使用的是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)的最简单方法?
答
使用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", ...);
});
});