好的.所以我有大约250,000张高分辨率图像.我想要做的是仔细检查所有这些并找到损坏的.如果您知道4scrape是什么,那么您就知道图像的本质I.
对我来说,损坏的是图像被加载到Firefox中,它说
The image “such and such image” cannot be displayed, because it contains errors.
现在,我可以选择所有250,000张图像(~150gb)并将它们拖放到Firefox中.那会很糟糕,因为我不认为Mozilla设计Firefox可以打开250,000个标签.不,我需要一种方法来以编程方式检查图像是否已损坏.
有谁知道PHP或Python库可以沿着这些方向做些什么?或者是Windows的现有软件?
我已经删除了明显损坏的图像(例如0字节的图像),但我大约99.9%确定在我的一个集合中有更多的病变图像浮动.
Chr*_*heD 23
一种简单的方法是尝试使用PIL(Python Imaging Library)加载和验证文件.
from PIL import Image
v_image = Image.open(file)
v_image.verify()
Run Code Online (Sandbox Code Playgroud)
赶上例外......
从文档:
im.verify()
尝试确定文件是否已损坏,而不实际解码图像数据.如果此方法发现任何问题,则会引发适当的异常.此方法仅适用于新打开的图像; 如果图像已加载,则结果未定义.此外,如果需要在使用此方法后加载图像,则必须重新打开图像文件.
在PHP中,使用exif_imagetype():
if (exif_imagetype($filename) === false)
{
unlink($filename); // image is corrupted
}
Run Code Online (Sandbox Code Playgroud)
编辑:或者您可以尝试使用ImageCreateFromString()完全加载图像:
if (ImageCreateFromString(file_get_contents($filename)) === false)
{
unlink($filename); // image is corrupted
}
Run Code Online (Sandbox Code Playgroud)
成功返回图像资源.如果图像类型不受支持,数据不是可识别的格式,或者图像已损坏且无法加载,则返回FALSE.