如何检查图像是单色还是空白?
Posted
技术标签:
【中文标题】如何检查图像是单色还是空白?【英文标题】:How to check if and image is mono color or empty? 【发布时间】:2018-04-20 12:45:30 【问题描述】:我需要阻止用户上传空白的个人资料图片。对于空白图像,我的意思是全白或任何其他全彩色图像。 我认为最好的方法是检查图像是否只包含一种颜色,但我不知道该怎么做。
我正在尝试在上传图片后检查这一点,只是为了简化操作。
有人可以帮我解决这个问题吗?
【问题讨论】:
这样的? ***.com/questions/16104420/… @Hammurabi 谢谢,但我使用的是 GD 而不是 Magick。我只需要知道所有像素是否都是相同的颜色。有人建议将图像大小调整为几个像素,然后逐像素检查。我不知道这是否是最好的方法,但我不知道如何让它工作。再次感谢。 【参考方案1】:检查整个图像
1) 将您的图像调整为更小的图像(例如调整它的大小 originalSize/10 或类似这样的...) 2) 使用this function 获取图片大小 3) 循环遍历像素,保存第一个像素的颜色并继续直到 x,y 位置上的像素颜色不同或直到没有更多像素未选中。
<?php
function isColorSame($imgname)
$img = imagecreatefrompng($imgname);
list($width, $height, $type, $attr) = getimagesize($imgname);
$x = 0;
$y = 0;
$starterColor = imagecolorat(0, 0, $img);
while($x < $width)
while($y < $height)
if (imagecolorat($x, $y, $img) !== $starterColor)
return false;
$y++;
$x++;
return true;
猜猜
通过生成随机 x,y 并检查该位置的颜色,只检查几个像素(例如 100 个像素)。这不是 100% 确定的,但在此之后,您可以将图像传递给检查所有像素的函数。
【讨论】:
谢谢@Eakethet,我已经测试了你的想法并且它有效。无论如何,正如我刚刚测试过的那样,这不会阻止任何用户上传看起来像空白图像的图像,即使它不是真的。如果图像是 99% 相同的白色像素,并且只有一个像素有点不同,则图像将被发布,因为脚本发现并非每个像素都相同。这不是您的解决方案的问题,而是我试图阻止这种情况的方式的问题。再次感谢。 @NicoSanchez 好吧,你可以尝试一些AI图像识别。我认为会有一些 api 服务,或者如果你想实现自己的解决方案,你可以使用 tensorflow 及其 python 库。如果你想在一些简单的 php 函数中处理它,你也可以尝试计算图像中不同颜色的数量(可能有一些简单的函数,或者调整图像大小)。您也可以轻松找出是否只有直线,或者是否是更复杂的形状。但我仍然建议对那些被拒绝的配置文件进行一些手动验证。以上是关于如何检查图像是单色还是空白?的主要内容,如果未能解决你的问题,请参考以下文章