我有超过10K的产品文件,问题是很多图像都是重复的.
如果没有图像,则会有标准图像显示"无图像".
如何检测图像是否为此标准"无图像"图像文件?
更新 图像是一个不同的名称,但它是完全相同的图像.
人们在说哈希,我会这样做吗?
im = cStringIO.StringIO(file.read())
img = im.open(im)
md5.md5(img)
Run Code Online (Sandbox Code Playgroud)
作为旁注,对于图像,我发现栅格数据哈希比文件哈希更有效.
ImageMagick提供了计算此类哈希的可靠方法,并且可用的python有不同的绑定.它有助于检测具有不同无损压缩和不同元数据的相同图像.
用法示例:
>>> import PythonMagick
>>> img = PythonMagick.Image("image.png")
>>> img.signature()
'e11cfe58244d7cf98a79bfdc012857a9391249dca3aedfc0fde4528eed7f7ba7'
Run Code Online (Sandbox Code Playgroud)
不久前,我为此编写了一个脚本。首先,它扫描所有文件,并在字典中记录它们的大小。您最终得到:
images[some_size] = ['x/a.jpg', 'b/f.jpg', 'n/q.jpg']
images[some_other_size] = ['q/b.jpg']
Run Code Online (Sandbox Code Playgroud)
然后,对于字典中元素多于1个的每个键(图像大小),我将读取一定数量的文件并进行哈希处理。就像是:
possible_dupes = [size for size in images if len(images[size]) > 1]
for size in possible_dupes:
hashes = defaultdict(list)
for fname in images[size]:
m = md5.new()
hashes[ m.update( file(fname,'rb').read(10000) ).digest() ] = fname
for k in hashes:
if len(hashes[k]) <= 1: continue
for fname in hashes[k][1:]:
os.remove(fname)
Run Code Online (Sandbox Code Playgroud)
这一切都让我烦恼,还没有测试代码,但是您明白了。
| 归档时间: |
|
| 查看次数: |
8360 次 |
| 最近记录: |