使用 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", ...);
});
});
目前我正在使用 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", ...);
});
});