使用PHP检测生成的空白图像?

8

听起来很复杂,祝好运! - drudge
5个回答

4
您可以使用 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;
}

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


返回图像调色板中颜色的数量。注意那里的调色板一词。 - Svish
是的,至少更接近了一步,哈哈;-) - Joshua - Pendo
好的,找到了一段可用的代码。请看上面发布的最后一段。适用于PNG格式。 - Joshua - Pendo
追踪这个问题已经有一段时间了,但我最终使用了感知哈希:(http://www.hackerfactor.com/blog/index.php?/archives/432-Looks-Like-It.html)。使用该方法,一个空白(或大部分为空白)图像的哈希总和应为0或1。 - Kenneth Rapp

2

使用随机抽样可以加快Kevin的解决方案。如果你对与背景不同的像素的百分比有一些想法(假设你没有处理仅有1个不同像素的大量图像),则可以使用泊松分布:

找到非空像素的概率= 1-e^(-n*p)

其中,n是要尝试的样本数量,p是预计为非空像素的百分比。 解出n以获得适当的尝试样本数量:

n = -log(1 - x) / p

其中x是所需的概率,log是自然对数。例如,如果您相信图像中应该有0.1%的非空像素,并且您想有99.99%的机会找到至少一个非空像素,则需要进行9210次采样。

比检查每个像素要快得多。如果抽样未找到任何内容,您始终可以返回并检查所有内容,以确保100%正确。


2

0

从每个图块的详细统计数据中获取标准差。如果标准差为0,则图像为单色。

据说,“颜色数量”也会这样做;将是1。

使用-format选项:http://www.imagemagick.org/script/escape.php


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接