getImageChannelRange 返回一个包含两个值的数组,映射到键 'minima' 和 'maxima',它们分别是此函数执行的图像中该特定通道的最小值和最大值。对于照片和高质量图像,这意味着您几乎总是保证最小值为 0,最大值为允许的最大位值。对于大多数图像,这为 65,535,这是 2^16(如果您从 0 开始计数)的值,这意味着每个通道 16 位图像。这适用于所有通道。
但是,如果图像很简单,您可能会获得更多范围。对于一个仅仅是红色正方形的图像,红色通道的最大值和最小值都为 65,535(最大值),而所有其他通道的最大值和最小值都为 0(最小值)。如果您想了解任何通道可能获得的最大值,请向此函数提供默认通道。
对于普通通道,您将拥有类似于 "imagick::CHANNEL_RED" 的内容,但您可能拥有 "imagick::CHANNEL_OPACITY" 等不寻常的通道。对于颜色,您有 "_VALUE" 选项:红色、灰色、青色、绿色、洋红色、蓝色、黄色、全部和默认。对于不寻常的通道,您有 "_VALUE" 选项:未定义、Alpha、不透明度、蒙版、黑色和索引。对于此函数,不寻常的通道始终产生 1.0E+37(10^37)的最小值和 -1.0E-37(-10^-37)的最大值,这毫无意义,因此请坚持使用上面指出的颜色值。
此函数对您不起作用?没问题。函数 getImageChannelExtrema 执行完全相同的事情。唯一的区别是您在非典型通道上获得的错误:它们的最小值和最大值,而不是默认为疯狂的值,简单地默认为 0。
总的来说,此函数似乎具有告诉您图像可能有多简单的用途——如果通道最大值和最小值之间的差异非常小,这意味着该给定通道的颜色表达不多。这可能能够告诉您图像是在某个简单的绘图程序中绘制的,还是实际的照片,但除此之外,您必须进行密集的编程才能使其计算出更复杂的东西。
现在,一个关于一些红色图像的结果示例
ImageMagick - 通道范围
通道 - '未定义':最小值:1.0E+37 最大值:-1.0E-37
通道 - '红色':最小值:65535 最大值:65535
通道 - '灰色':最小值:65535 最大值:65535
通道 - '青色':最小值:65535 最大值:65535
通道 - '绿色':最小值:0 最大值:0
通道 - '洋红色':最小值:0 最大值:0
通道 - '蓝色':最小值:0 最大值:0
通道 - '黄色':最小值:0 最大值:0
通道 - 'Alpha':最小值:1.0E+37 最大值:-1.0E-37
通道 - '不透明度':最小值:1.0E+37 最大值:-1.0E-37
通道 - '蒙版':最小值:1.0E+37 最大值:-1.0E-37
通道 - '黑色':最小值:1.0E+37 最大值:-1.0E-37
通道 - '索引':最小值:1.0E+37 最大值:-1.0E-37
通道 - '全部':最小值:0 最大值:65535
通道 - '默认':最小值:0 最大值:65535