查找項(xiàng)目中使用的重復(fù)圖片

圖片占用工程中比較大的資源歹啼,清理重復(fù)圖片是快速減少工程大小的方式密强。詳細(xì)代碼見(jiàn)下:

from PIL import Image
import math
import operator
from functools import reduce
import shutil
import os
import simplejson

path = ''
#所有圖片的路徑
imgPaths = []

#存儲(chǔ)有相同圖片的key:imgName,value:[imgPath]
samePictureDic = {}

count = 0


# 查找所有文件
def searchDirFile(dir):
    listfile = os.listdir(dir)
    filepath = dir
    for file in listfile:  # 把目錄下的文件都賦值給line這個(gè)參數(shù)
        if os.path.isdir(filepath + "/" + file):
            searchDirFile(filepath + '/' + file)
        else:
            fileAllPath = os.path.join(filepath,file)
            if file.endswith(".png") or file.endswith(".PNG") or file.endswith(".jpg") or file.endswith(".jpeg"):
                imgPaths.append(fileAllPath)


def compareImages():
    global count
    #臨時(shí)存儲(chǔ)
    tempImgs = imgPaths[:]
    for i in range(0,len(imgPaths) - 1):
        if len(imgPaths) < 1:
            return
        #要比較的圖片
        img1Path = imgPaths[i]
        print("\n\n\n現(xiàn)在進(jìn)行到:%d *****圖片路徑:%s\n"%(i,img1Path))

        #是否有相同圖片
        samed = False
        #存儲(chǔ)相同圖片路徑
        samePaths = []
        if img1Path in tempImgs:
            # 從臨時(shí)數(shù)組中刪除
            tempImgs.remove(img1Path)

        if len(tempImgs) > 1:
            for j in range(0,len(tempImgs)):
                # print(j)
                #對(duì)比的圖片
                img2Path = tempImgs[j]
                if img1Path != img2Path:
                    if compareImage(img1Path,img2Path):
                        # print("相同")
                        #圖片相同
                        samed = True
                        #添加相同圖片路徑
                        samePaths.append(img2Path)
                    else:
                        pass
                        # print("不相同")



        if samed:
            # print('yes')
            #有相同圖片添加圖片1的路徑
            print("相同圖片的路徑")
            samePaths.append(img1Path)
            print(samePaths)
            count += 1
            print(len(samePaths))
            fileName = os.path.basename(img1Path)
            names = fileName.split(".")
            imgName = '%s%d' % (names[0], count)
            for k in range(0,len(samePaths)):
                print(k)
                path = samePaths[k]
                # 目錄源文件
                sourceFilePath = '自己存儲(chǔ)路徑/圖片比較/%s_%d.png' % (names[0], k)
                # 拷貝到指定目錄
                shutil.copy(path, sourceFilePath)
                #存儲(chǔ)到j(luò)son中
                samePictureDic[imgName] = samePaths
                if path in tempImgs:
                    #從臨時(shí)數(shù)組中刪除
                    tempImgs.remove(path)
        else:
            print("沒(méi)有相同圖片")

    #遍歷完畢拷窜,把json寫(xiě)入文件
    imagesText = open('自己存儲(chǔ)路徑/圖片比較/TheSamePicure.json', 'w')
    str = simplejson.dumps(samePictureDic)
    imagesText.write(str + '\n')


#比較兩個(gè)圖片是否一樣
def compareImage(img1,img2):
    image1 = Image.open(img1)
    image2 = Image.open(img2)

    print(img2)
    # 把圖像對(duì)象轉(zhuǎn)換為直方圖數(shù)據(jù)旷祸,存在list h1叉庐、h2 中
    h1 = image1.histogram()
    h2 = image2.histogram()

    # result的值越大宏多,說(shuō)明兩者的差別越大疯攒;如果result=0,則說(shuō)明兩張圖一模一樣
    result = math.sqrt(reduce(operator.add, list(map(lambda a, b: (a - b) ** 2, h1, h2))) / len(h1))
    if (result < 0.001):
        # print('相同')
        return True
    else:
        return False

if __name__ == '__main__':
    searchDirFile(path)
    print("共有多少圖片%d" % (len(imgPaths)))
    compareImages()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末嗦随,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子敬尺,更是在濱河造成了極大的恐慌枚尼,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件砂吞,死亡現(xiàn)場(chǎng)離奇詭異署恍,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蜻直,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)盯质,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人概而,你說(shuō)我怎么就攤上這事呼巷。” “怎么了赎瑰?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵王悍,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我餐曼,道長(zhǎng)压储,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任源譬,我火速辦了婚禮集惋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘踩娘。我一直安慰自己芋膘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布霸饲。 她就那樣靜靜地躺著为朋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪厚脉。 梳的紋絲不亂的頭發(fā)上习寸,一...
    開(kāi)封第一講書(shū)人閱讀 52,268評(píng)論 1 309
  • 那天,我揣著相機(jī)與錄音傻工,去河邊找鬼霞溪。 笑死孵滞,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鸯匹。 我是一名探鬼主播坊饶,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼殴蓬!你這毒婦竟也來(lái)了匿级?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤染厅,失蹤者是張志新(化名)和其女友劉穎痘绎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體肖粮,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡孤页,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了涩馆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片行施。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖魂那,靈堂內(nèi)的尸體忽然破棺而出悲龟,到底是詐尸還是另有隱情,我是刑警寧澤冰寻,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站皿渗,受9級(jí)特大地震影響斩芭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜乐疆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一划乖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧挤土,春花似錦琴庵、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至咖杂,卻和暖如春庆寺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背诉字。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工懦尝, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留知纷,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓陵霉,卻偏偏與公主長(zhǎng)得像琅轧,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子踊挠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,286評(píng)論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)乍桂、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,120評(píng)論 4 61
  • “沒(méi)有結(jié)局的故事太多止毕,你要習(xí)慣相遇與離別模蜡。喜不喜歡,合不合適扁凛,能不能在一起忍疾,是三件不同的事。 ???”嗯谨朝。分享許巍...
    清風(fēng)過(guò)南巷閱讀 163評(píng)論 0 0
  • 走進(jìn)一間房卤妒,四面都是墻。抬頭見(jiàn)壁紙字币,低頭木板床则披。 有的人經(jīng)濟(jì)拮據(jù),裝修費(fèi)用不足洗出,他們可能會(huì)選擇買(mǎi)廉價(jià)些的家具士复,但是...
    蒼耳的后院閱讀 507評(píng)論 2 2
  • 線(xiàn)稿國(guó)慶放假期間就畫(huà)好了,忙了其他事翩活,一直沒(méi)時(shí)間上色阱洪。 臨摹微博上一組水彩寫(xiě)實(shí)花卉,我用的是彩鉛菠镇。 雖然顏色疊加了...
    四丫xmh閱讀 361評(píng)論 7 3