目前我正在使用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)的最简单方法是什么?
答案 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", ...);
});
});