我正在尝试获取图像的饱和度,以计算它是否更接近灰度或颜色。这需要适用于任何图像文件格式。我还需要能够获取其他信息,包括文件类型,mime类型,宽度,高度以及可能的感知哈希时刻。它还需要保留JSON输出。
目前我正在使用convert image.png json:-
输出我需要的几乎所有数据,但图像饱和度除外。我试过convert image.png -colorspace HSL json:-
,假设它会将通道从红色,绿色和蓝色(和灰色)改变为色调,饱和度和亮度,但它仍然是前者。
使用RGB色彩空间时,灰度图像只返回两个channelStatistics,alpha和gray,而彩色图像返回alpha,red,green和blue。使用HSL时,它会以灰度和颜色返回alpha,red,green和blue,格式如下(这是一个灰度示例):
[channelStatistics] -> Object
(
[alpha] => stdClass Object
(
[min] => 255
[max] => 255
[mean] => 255
[standardDeviation] => 0
[kurtosis] => 0
[skewness] => 0
)
[red] => stdClass Object
(
[min] => 0
[max] => 0
[mean] => 0
[standardDeviation] => 0
[kurtosis] => 0
[skewness] => 0
)
[green] => stdClass Object
(
[min] => 0
[max] => 0
[mean] => 0
[standardDeviation] => 0
[kurtosis] => 0
[skewness] => 0
)
[blue] => stdClass Object
(
[min] => 20
[max] => 255
[mean] => 230.007
[standardDeviation] => 44.1297
[kurtosis] => 2.21673
[skewness] => -1.80749
)
)
什么命令会返回我需要的信息?我不想改变原始图像;它需要保持不变。我只需要获得这些细节。
答案 0 :(得分:2)
当你这样做时
convert input.png -colorspace hsl json:
输出实际上是在HSL中,除非它有些误导,标记为红色,绿色和蓝色。
你可以通过创建一个非常红的图像来测试这一点,但是它有一些变化,以便IM不能将它编码为像这样的palettised图像:
convert -size 1000x1000 gradient:"rgb(255,0,0)-rgb(230,10,0)" input.png
现在,如果你看一下JSON,它看起来像这样 - 很大程度上是完全饱和的亮红色
"channelStatistics": {
"red": {
"min": "59110",
"max": "65535",
"mean": "62322.5",
"standardDeviation": "1856.6",
"kurtosis": "-1.19999",
"skewness": "1.52719e-06"
},
"green": {
"min": "0",
"max": "2570",
"mean": "1285",
"standardDeviation": "742.641",
"kurtosis": "-1.19999",
"skewness": "0"
},
"blue": {
"min": "0",
"max": "0",
"mean": "0",
"standardDeviation": "0",
"kurtosis": "0",
"skewness": "0"
}
},
如果您转换为HSL
convert input.png -colorspace hsl json:
现在看起来像这样:
"channelStatistics": {
"red": {
"min": "0",
"max": "475",
"mean": "229.308",
"standardDeviation": "137.131",
"kurtosis": "-1.19385",
"skewness": "0.071888"
},
"green": {
"min": "65535",
"max": "65535",
"mean": "65535",
"standardDeviation": "0",
"kurtosis": "0",
"skewness": "0"
},
"blue": {
"min": "29555",
"max": "32768",
"mean": "31161.5",
"standardDeviation": "928.298",
"kurtosis": "-1.20001",
"skewness": "1.58408e-08"
}
},
它可能出售为红色,绿色和蓝色,但实际上“红色”是 Hue 接近于零,即红色和“绿色” “实际上是饱和度,你可以看到它完全饱和,而”蓝色“是亮度,它是灰色的中间。