对于未记录的函数,这是一个特别奇怪的地方。对我来说,到目前为止,此函数仅为任何特定图像返回了两个值:1 和 8。并且,在对其进行大约四五十次实验后,我认为我了解了它的工作原理,仅仅基于我的经验。
返回的值是在图像中特定颜色通道使用的位数。这意味着特定颜色在一个图像中的可变性。虽然我收到了 1 和 8,但理论上它可以高达 16 或 32,具体取决于技术在未来十年或更长时间内的发展情况。
为了更好地理解此函数,您可能还应该理解 ImageMagick 函数 getColorValue。就 ImageMagick 类而言,颜色可以在 0 到 1 之间测量,以特定像素为单位。红色、绿色、蓝色或任何颜色方案的任何特定颜色都可以类似于 0.501960784314。但是,由于每个像素都是三种颜色的组合,因此您可以将红色设置为 0.845、绿色设置为 0.254,蓝色设置为 0.11。
这一切如何与 getChannelDepth 函数联系起来?很简单。如果图像中的所有像素对于特定红色/绿色/蓝色值的值均为 1 或 0,则此函数将为该颜色通道返回 1(表示每个像素 1 位)。但是,如果图像中输入的通道参数的任何单个像素对于特定颜色通道的值不完全是 1 或 0,则此函数将返回 8(表示每个像素 8 位颜色)用于该颜色通道。
如果您为每个输入的颜色通道都收到 1,则表示您正在处理一个 16 位图像 - 您知道,就像 1982 年发布的那些电脑游戏或 Atari 控制台游戏一样。您永远不会忘记 16 位的绿色,相信我。如果您为每个输入的颜色通道都收到 8,则表示您正在处理任何标准的现代图像。
您可以输入任何颜色通道,具体取决于 ImageMagick 类中可用的通道常量。请在此处查看:https://php.net/manual/en/imagick.constants.php#imagick.constants.channel。这意味着像 imagick::CHANNEL_UNDEFINED 这样的格式,但 "_UNDEFINED" 值是以下任何一个:undefined、red、gray、cyan、green、magenta、blue、yellow、alpha、opacity、matte、black、index、all 和 default。
对于任何具有 RGB 值为 1 / 0.501960784314 / 0.501960784314 (#FF8080) 的单个像素颜色的图像,您将获得以下结果
通道 - 'Undefined':1
通道 - 'Red':1
通道 - 'Gray':1
通道 - 'Cyan':1
通道 - 'Green':8
通道 - 'Magenta':8
通道 - 'Blue':8
通道 - 'Yellow':8
通道 - 'Alpha':1
通道 - 'Opacity':1
通道 - 'Matte':1
通道 - 'Black':1
通道 - 'Index':1
通道 - 'All':8
通道 - 'Default':8
如果所有颜色都使用 getColorValue 函数在 0 到 1 之间,则这些结果中的每一个都将为 1。如果您正在处理具有全彩色光谱深度的图像(几乎任何给定的照片),您将获得红色、灰色、青色、绿色、洋红色、蓝色、黄色的 8,所有和默认值,而其他剩余通道将获得 1。也许它可以用于自动图像编辑,例如与 posterize 或 oilpaint 函数一起使用。