php – 使用Imagick检测图像是灰度还是彩色

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 使用Imagick检测图像是灰度还是彩色脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试根据图像的“饱和度”为图像赋值,以查看图像是黑白还是彩色.我正在使用Imagick,并且发现了似乎是命令行的完美代码,并尝试使用 PHP库复制它.

我想我理解这个概念:@H_403_2@

>将图像转换为HSL.
>提取’g’通道(HSL中的S通道).
>计算此渠道的平均值.@H_403_2@

Command line code@H_403_2@

convert '$image_path' -colorspace HSL -channel g -separate +channel -format '%[fx:mean]' info:

我的PHP代码@H_403_2@

$imagick = new Imagick($image_path);
$imagick->setColorspace(imagick::COLORSPACE_HSL);
PRint_r($imagick->getImageChannelMean(imagick::CHANNEL_GREEN));

产量@H_403_2@

但是,我的PHP代码不会输出与命令行代码相同的值.例如,灰度图像为命令行代码给出0,但PHP代码给出[mean] => 10845.392051182 [standardDeviation] => 7367.5888849872.@H_403_2@

类似地,另一个灰度图像给出0对[平均] => 31380.528443457 [standardDeviation] => 19703.501101904.@H_403_2@

彩色图像给出0.565309对比[平均] => 33991.552881892 [standardDeviation] => 16254.018540044.@H_403_2@

在不同的值之间似乎没有任何类型的模式.我做错了什么吗?@H_403_2@

谢谢.@H_403_2@

刚才补充一下,我也试过这个PHP代码@H_403_2@

$imagick = new Imagick($image_path);
$imagick->setColorspace(imagick::COLORSPACE_HSL);
$imagick->separateimageChannel(imagick::CHANNEL_GREEN);
$imagick->setFormat('%[fx:mean]');

但是当我尝试设置格式时,我得到一个无法设置格式错误.我也尝试过setFormat(‘%[fx:mean] info:’),setFormat(‘%[mean]’),setFormat(‘%mean’)等.@H_403_2@

更新 – 固定!@H_403_2@

感谢@danack搞清楚我需要使用transformImageColorspace()而不是setColorspace().工作代码如下.@H_403_2@

$imagick = new Imagick($image_path);
$imagick->transformImageColorspace(imagick::COLORSPACE_HSL);
$saturation_channel = $imagick->getImageChannelMean(imagick::CHANNEL_GREEN);
$saturation_level = $saturation_channel['mean']/65535;
setFormat不复制命令行选项-format –Imagick中的那个选项试图设置图像格式,应该是png,jpg等.命令行中的那个设置信息的格式 – 最接近的匹配Imagick正在调用$imagick-> identifyImage(true)并解析其结果.

你也只是调用错误函数 – 它应该是transformImageColorspace而不是setColorSpace.如果使用它,则可以使用getImageChannelMean中的统计信息.@H_403_2@

还有其他方法可以测试灰度,在某些情况下可能更合适.第一种是将图像的克隆转换为灰度,然后将其与原始图像进行比较:@H_403_2@

$imagick = new Imagick($image_path);
$imagickGrey = clone $imagick;
$imagickGrey->setimagetyPE(\Imagick::imgTYPE_GRAYSCALE);

$differenceInfo = $imagick->compareimages($imagickGrey,\Imagick::METRIC_MEANABSOLUTEERROR);

if ($differenceInfo['mean'] <= 0.0000001) {
    echo "Grey enough";
}

如果您的图像具有透明的颜色区域,那么这可能是合适的 – 因此它们理论上具有颜色,但不明显.@H_403_2@

或者,如果您只关心图像是否为灰度格式:@H_403_2@

$imageType = $imagick->getImageType();
if ($imageType === \Imagick::IMGTYPE_GRAYSCALE || 
    $imageType === Imagick::IMGTYPE_GRAYSCALEMATTE) {
     //This is grayscale
}

脚本宝典总结

以上是脚本宝典为你收集整理的php – 使用Imagick检测图像是灰度还是彩色全部内容,希望文章能够帮你解决php – 使用Imagick检测图像是灰度还是彩色所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。