溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

python如何對gif圖壓縮

發(fā)布時間:2021-11-02 11:44:58 來源:億速云 閱讀:376 作者:小新 欄目:開發(fā)技術(shù)

這篇文章將為大家詳細講解有關(guān)python如何對gif圖壓縮,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

    1. 背景:

    最近寫了一篇CSDN博客需要上傳gif圖,發(fā)現(xiàn)大小超過了5M,無法上傳。

    文件大小:

    python如何對gif圖壓縮

    python如何對gif圖壓縮

    本想自己找個免費的壓縮工具,結(jié)果下載下來的工具不是釣魚工具就是流氓軟件,還有的在線壓縮工具說是免費,等你download的時候說是要付費,總之一大堆坑。

    2.尋找解決辦法

    由于上面坑爹的經(jīng)過,于是我自己試著找找python壓縮gif的辦法。

    2.1可行性分析

    根據(jù)我的理解是可行的,因為gif的文件是根據(jù)一幀幀靜態(tài)圖片根據(jù)時序拼接起來的,如果使用python將gif文件分解成一幀幀靜態(tài)圖片的話,再將靜態(tài)圖片對象進行壓縮之后再合并,理論上是可以減小文件大小。

    3.問題分解

    3.1將gif文件分解

    需要找到一個可以將gif文件分解成靜態(tài)圖像的庫,了解到PIL的ImageSequence可以將gif分解成一幀幀。

    3.1.1示例代碼
    from PIL import Image, ImageSequence
    filename = "2018-0.gif"
    gif = Image.open(filename)
    index = 0
    for frame in ImageSequence.Iterator(gif):
    	#frame.convert('RGB')
    	frame.save(str(index)+'.png')#pass
    	index += 1
    3.1.2 效果圖

    python如何對gif圖壓縮

    4.代碼優(yōu)化

    代碼很簡單

    import imageio
    from PIL import Image, ImageSequence
    
    def compressGif(filename):
        gif = Image.open(filename)
        if not gif.is_animated:
            return False
        imageio.mimsave('compress-'+filename, [frame.convert('RGB') for frame in ImageSequence.Iterator(gif)], duration = gif.info['duration']/2000) 
    
    fileList = ["2018-0.gif","2018-1.gif","2018-2.gif","2018-3.gif","2018-4.gif"]
    for filename in fileList:
        compressGif(filename)

    5.做成一個通用工具

    5.1創(chuàng)建一個虛擬環(huán)境

    mkvirtualenv GIF

    python如何對gif圖壓縮

    5.2虛擬環(huán)境安裝必要庫

    pip install imageio

    pip install pyinstaller 打包必備的庫

    5.3打包

    pyinstaller -F compress.py

    python如何對gif圖壓縮

    5.4把.gif文件放到compress.exe文件夾下

    python如何對gif圖壓縮

    5.5雙擊.exe查看打包效果

    python如何對gif圖壓縮

    5.6壓縮后的圖片效果

    可以看到壓縮之后圖片依然很清晰

    壓縮率: 5356/1504 = 3.56

    這個壓縮率已經(jīng)非常高了

    python如何對gif圖壓縮

    關(guān)于“python如何對gif圖壓縮”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

    向AI問一下細節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI