在數字化時代,我們經常會遇到圖像檔案大量堆積的情況,其中不乏重複的圖檔。這些重複的圖檔不僅占用了寶貴的存儲空間,還使得檔案管理和備份變得繁瑣。為了解決這個問題,我們可以利用Python編寫一個腳本來自動檢測和删除重複的圖像檔案。
準備工作
在開始編寫代碼之前,我們需要確定已經安裝了Python環境,并安裝了一個用于比較圖像相似度的庫,如imagehash和Pillow(PIL的分支)。這兩個庫可以幫助我們生成圖像的哈希值,并基于這些哈希值來比較圖像的相似性。
你可以使用pip來安裝這兩個庫:
pip install imagehash pillow
編寫代碼
下面是一個簡單的Python腳本,用于查找并删除重複的圖像檔案:
import os
import imagehash
from PIL import Image
from itertools import combinations
def image_hash(file_path):
hash_object = imagehash.average_hash(Image.open(file_path))
return hash_object
def find_duplicate_images(directory):
images = [f for f in os.listdir(directory) if os.path.isfile(os.path.join(directory, f)) and f.lower().endswith(('.png', '.jpg', '.jpeg', '.gif', '.bmp'))]
hashes = {f: image_hash(os.path.join(directory, f)) for f in images}
duplicates = []
for img1, img2 in combinations(images, 2):
if hashes[img1] - hashes[img2] < 5: # 設定一個門檻值來判斷是否相似
duplicates.append((img1, img2))
return duplicates
def remove_duplicates(directory, duplicates):
for img1, img2 in duplicates:
# 假設我們保留第一個檔案,删除第二個檔案
os.remove(os.path.join(directory, img2))
print(f"Removed duplicate: {img2}")
# 使用示例
directory = 'path/to/your/image/directory' # 替換為你的圖像目錄
duplicates = find_duplicate_images(directory)
remove_duplicates(directory, duplicates)
注意:這個腳本使用了簡單的平均雜湊演算法來比較圖像,并設定了一個門檻值(在這個例子中是5)來判斷兩個哈希值是否足夠接近,進而認為圖像是相似的。然而,這種方法的準确性可能因圖像品質和内容的複雜性而有所不同。你可能需要根據你的具體需求來調整這個門檻值。
此外,這個腳本會删除所有相似的圖像中的第二個圖像,保留第一個圖像。如果你想要更複雜的邏輯(例如,隻删除完全相同的圖像,或者基于某種政策來選擇要保留的圖像),你需要在remove_duplicates函數中添加更多的邏輯。
最後,這個腳本并沒有提供備份或撤銷删除的選項,是以請確定在運作腳本之前備份你的圖像檔案,以防止誤删除重要檔案。
代碼實戰
我有一批圖檔,每張圖檔都被備份了兩次,利用以上代碼識别出重複圖檔
删除圖檔後,所有的圖檔都隻剩下一張原圖