如何使用PHP和/或imagemagick检测图像是空白的(只有单个,任意颜色,或使用gif,随机任意颜色的帧)?
我认为这就是我要尝试的内容: http://www.php.net/manual/en/function.imagecolorat.php#97957
答案 0 :(得分:2)
http://www.php.net/manual/en/function.imagecolorstotal.php为您提供图像中的颜色数量。嗯,在我的演示中似乎不起作用,抱歉:(我创建的图像(全红色,20x20像素)为PNG提供0种颜色,为GIF提供3种颜色。
好的:http://www.dynamicdrive.com/forums/showpost.php?p=161187&postcount=2
查看第二段代码。在此测试:http://www.pendemo.nl/totalcolors.php
答案 1 :(得分:2)
凯文的解决方案可以使用随机抽样加速。如果您对像素应该与背景不同的百分比有所了解(假设您没有处理只有1个不同像素的大量图像),则可以使用泊松分布:
找到非空白像素的概率= 1 - e ^( - n * p)
其中n是要尝试的样本数,p是预期非空白的像素百分比。求解n以获得适当数量的样本以尝试:
n = -log(1 - x)/ p
其中x是所需概率,log是自然对数。例如,如果您有理由确定0.1%的图像应该是非空白的,并且您希望有99.99%的机会找到至少一个非空白像素,
n = -log(1-.9999)/。001 =需要9210个样本。
比检查每个像素快得多。要100%确定,如果抽样没有找到,您可以随时返回并检查所有这些。
答案 2 :(得分:1)
您可以使用imagecolorat检查PHP内部的图像(这可能很慢,但它可以工作):
function isPngValidButBlank($filename) {
$img = imagecreatefrompng($filename);
if(!$img)
return false;
$width = imagesx($img);
$height = imagesy($img);
if(!$width || !$height)
return false;
$firstcolor = imagecolorat($img, 0, 0);
for($i = 0; $i < $width; $i++) {
for($j = 0; $j < $height; $j++) {
$color = imagecolorat($img, $i, $j);
if($color != $firstcolor)
return false;
}
}
return true;
}
答案 3 :(得分:1)
对于使用Imagick尝试实现此目标的任何人,getImageColors()方法都能解决问题。
https://www.php.net/manual/en/imagick.getimagecolors.php
$img = new Imagick();
$img->readImage($image);
$colors = $img->getImageColors();
if(!$colors > 1) {
return false;
}
答案 4 :(得分:0)
从每个图块的详细统计信息中获取标准偏差。如果标准偏差为0,则图像为一种颜色。
据说,“颜色数量”也会这样做;将是1。
使用-format
选项:http://www.imagemagick.org/script/escape.php