从Imagemagic或Graphicmagic获取图像的亮度信息

时间:2018-02-22 13:48:33

标签: node.js imagemagick aws-lambda

是否有特定功能可用于使用Graphicmagick或Imagemagick检索图像的亮度信息。我目前正在使用Node.js aws lambda函数来执行其他操作,例如调整图像大小。

但是我无法找到正确的方法来检索亮度信息(图像有多暗)。

任何帮助或方向都会非常有用。

我引用了以下网址。 Link 1 Link 2

1 个答案:

答案 0 :(得分:2)

我能想到的最简单的方法是使用fx方法使用.identify表达式。

var gm = require('gm').subClass({ imageMagick: true });
var filename = 'rose:'
gm(filename).identify({format:'%[fx:lightness]'}, function(err, info){
   console.log('Lightness pixel value : ' + info);
   //=> "Lightness pixel value : 0.182353"
});

根据参考链接的建议,将图像转换为灰度可能会产生更准确的结果。

var brightness = 0.0;
gm().in(filename).colorspace('GRAY').out('-format').out('%[fx:mean*100]').toBuffer('info', function(err, buffer){
    brightness = parseFloat(buffer.toString())
    console.log('Gray brightness : ' + brightness)
    //=> "Gray brightness : 39.4629"
});

正如马克在另一个问题/答案中指出的那样。将图像转换为HSL颜色空间可能更灵活。

var brightness = 0.0;
gm().in(filename).colorspace('HSL').channel('B').out('-format').out('%[fx:mean*100]').toBuffer('info', function(err, buffer){
    brightness = parseFloat(buffer.toString())
    console.log('Lightness-channel average : ' + brightness)
    //=> "Lightness-channel average : 37.219"
})