精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何使用Python對Gif進行壓縮

開發 后端
眾所周知,gif圖就是由若干組圖片組成的一種文件格式,有多張有一定差異的圖片連續播放,間隔時間較小,欺騙了我們的眼睛和大腦,然后我們以為是一個完全連續的。其實就是一個類似快速翻書的操作。

[[426653]]

本文轉載自微信公眾號「arige」,作者arige。轉載本文請聯系arige公眾號。

 一、背景

前天在給微信公眾號上傳文章的時候,文章里面有一個圖片是gif的,在上傳的過程中報錯了,說是圖片超大了。搜索之后發現圖片需要小于5m。

那么問題就轉化為怎么把當前的gif給縮減到5m以內本著有輪子用輪子,沒有輪子造輪子的精神,網上搜索一番。

發現一些現象

1、壓縮要不就是需要會員才能下載;

2、要不免費的只能壓縮5m以下的。

考慮到能動手不花錢的本性,我覺得要自己搞一下。

知識背景:

眾所周知,gif圖就是由若干組圖片組成的一種文件格式,有多張有一定差異的圖片連續播放,間隔時間較小,欺騙了我們的眼睛和大腦,然后我們以為是一個完全連續的。其實就是一個類似快速翻書的操作。

二、方案選型

方案一

因為gif是有多種圖片做的,那我們就考慮把圖片減少一些,比如說原來是100張是10m,我給縮減到10張,那體積可不就要縮小到1m左右了嗎?當然,為了用戶看起來不是那么卡頓,我就拍腦袋給縮減到20張吧,即只有原來的1/5。

方案二

如果縮減的圖片太多導致gif看起來卡頓的話,我們可以考慮不縮減圖片的張數,但是我們可以壓縮圖片。

方案三

最后的都是重要的,如果前面兩個都無法滿足的話,那就可以考慮把他們進行疊加。先減張數,再壓縮拆分的圖片。

三、項目落實

整體流程如下:

  1. if __name__ == "__main__"
  2.    # 設置源gif的地址 
  3.    sourceGifPath = "/Users/user/test/f79a3e2c2e864863a6b1a66791cb0950_tplv-k3u1fbpfcp-watermark.gif" 
  4.    # 將gif拆分成多個圖片,并保存在本地 
  5.    SplitGif(sourceGifPath) 
  6.    # 將指定位置的文件下的圖片按照文件名索引排序,做成gif 
  7.    Combine2Gif(sourceGifPath[:-4], sourceGifPath[:-4] + "_result.gif"
  8.    print("== finished =="

1、將源gif讀入內存

2、將gif拆分成png,并保存

  1. def SplitGif(gifPath): 
  2.    # 獲取png存儲的文件夾的地址 
  3.    pngDir = gifPath[:-4] 
  4.    # 要存儲的文件夾下清理干凈,避免影響當前操作 
  5.    rmPngDir(pngDir) 
  6.    # 創建存儲的文件夾 
  7.    os.mkdir(pngDir) 
  8.    # 把指定gif拆分后存儲到指定文件夾 
  9.    savePngToDir(gifPath, pngDir) 

2.1、獲取要存儲的地址

2.2、清空并移除存儲png的文件夾

  1. def rmPngDir(pngDir): 
  2.    if os.path.exists(pngDir): 
  3.        files = os.listdir(pngDir) 
  4.        # 如果不一個一個的移除文件夾下的文件的話,無法移除文件夾 
  5.        for file in files: 
  6.            file = pngDir + "/" + file 
  7.            os.remove(file) 
  8.        os.rmdir(pngDir) 

2.3、創建存儲png的文件夾

2.4、將gif拆分成png,并保存

  1. def savePngToDir(gifPath, pngDir): 
  2.    # 通過路徑傳教image對象 
  3.    image = Image.open(gifPath) 
  4.    try: 
  5.        # 循環,通過異常方案退出循環 
  6.        while True
  7.            # 獲取當前的索引的位置 
  8.            current = image.tell() 
  9.            # 創建文件路徑 
  10.            pngPath = pngDir + '/' + str(current) + '.png' 
  11.            image.save(pngPath, quality=100) 
  12.            # 索引后移,越界后異常,退出當前循環 
  13.            image.seek(current + 1) 
  14.    except EOFError as e: 
  15.        print(e) 
  16.        pass 

3、按照一定的間隔讀取2中的png,并生成gif

  1. def Combine2Gif(folderPath, gifFilePath): 
  2.    GenerateGif(0.1, gifFilePath, getPngArray(folderPath)) 

3.1、獲取所有的png

  1. def getPngArray(folderPath): 
  2.    files = os.listdir(folderPath) 
  3.    pngFiles = [] 
  4.    # 通過設置step,將文件的大小修改為原來的體積的1/step 
  5.    for i in range(0, len(files), 5): 
  6.        pngFiles.append(folderPath + "/" + ('%d.png' % i)) 
  7.    return pngFiles 

3.2、將png合并成gif

  1. def GenerateGif(step, gifPath, filterPngs): 
  2.    images = [] 
  3.    for filePath in filterPngs: 
  4.        images.append(imageio.imread(filePath)) 
  5.    # 生成gif,duration 是播放兩個圖片之間的間隔時間 
  6.    imageio.mimsave(gifPath, images, duration=step) 

四、全部的代碼

  1. #! /usr/local/bin/python3 
  2. # -*- coding: utf-8 -*- 
  3. from PIL import Image 
  4. import os 
  5. import imageio 
  6.  
  7.  
  8. def SplitGif(gifPath): 
  9.    # 獲取png存儲的文件夾的地址 
  10.    pngDir = gifPath[:-4] 
  11.    # 要存儲的文件夾下清理干凈,避免影響當前操作 
  12.    rmPngDir(pngDir) 
  13.    # 創建存儲的文件夾 
  14.    os.mkdir(pngDir) 
  15.    # 把指定gif拆分后存儲到指定文件夾 
  16.    savePngToDir(gifPath, pngDir) 
  17.  
  18.  
  19. def rmPngDir(pngDir): 
  20.    if os.path.exists(pngDir): 
  21.        files = os.listdir(pngDir) 
  22.        # 如果不一個一個的移除文件夾下的文件的話,無法移除文件夾 
  23.        for file in files: 
  24.            file = pngDir + "/" + file 
  25.            os.remove(file) 
  26.        os.rmdir(pngDir) 
  27.  
  28.  
  29. def savePngToDir(gifPath, pngDir): 
  30.    # 通過路徑傳教image對象 
  31.    image = Image.open(gifPath) 
  32.    try: 
  33.        # 循環,通過異常方案退出循環 
  34.        while True
  35.            # 獲取當前的索引的位置 
  36.            current = image.tell() 
  37.            # 創建文件路徑 
  38.            pngPath = pngDir + '/' + str(current) + '.png' 
  39.            image.save(pngPath, quality=100) 
  40.            # 索引后移,越界后異常,退出當前循環 
  41.            image.seek(current + 1) 
  42.    except EOFError as e: 
  43.        print(e) 
  44.        pass 
  45.  
  46.  
  47. def Combine2Gif(folderPath, gifFilePath): 
  48.    GenerateGif(0.1, gifFilePath, getPngArray(folderPath)) 
  49.  
  50.  
  51. # 獲取文件的數組 
  52. def getPngArray(folderPath): 
  53.    files = os.listdir(folderPath) 
  54.    pngFiles = [] 
  55.    # 通過設置step,將文件的大小修改為原來的體積的1/step 
  56.    for i in range(0, len(files), 5): 
  57.        pngFiles.append(folderPath + "/" + ('%d.png' % i)) 
  58.    return pngFiles 
  59.  
  60.  
  61. def GenerateGif(step, gifPath, filterPngs): 
  62.    images = [] 
  63.    for filePath in filterPngs: 
  64.        images.append(imageio.imread(filePath)) 
  65.    # 生成gif,duration 是播放兩個圖片之間的間隔時間 
  66.    imageio.mimsave(gifPath, images, duration=step) 
  67.  
  68.  
  69. if __name__ == "__main__"
  70.    # 設置源gif的地址 
  71.    sourceGifPath = "/Users/user/test/f79a3e2c2e864863a6b1a66791cb0950_tplv-k3u1fbpfcp-watermark.gif" 
  72.    # 將gif拆分成多個圖片,并保存在本地 
  73.    SplitGif(sourceGifPath) 
  74.    # 將指定位置的文件下的圖片按照文件名索引排序,做成gif 
  75.    Combine2Gif(sourceGifPath[:-4], sourceGifPath[:-4] + "_result.gif"
  76.    print("== finished =="

五、結尾

作為一個追求高效的程序員,我就做一個能滿足我需求的方案,即方案一。至于方案二和方案三,有興趣的朋友可以舉一反三。

 

責任編輯:武曉燕 來源: arige
相關推薦

2017-09-26 19:02:09

PythonInstagram數據分析

2022-11-07 07:54:05

微服務數據庫網關

2010-02-02 14:11:14

Python 進行編程

2023-07-05 07:36:36

SpringJava代碼

2021-11-26 08:45:06

NetworKi網絡安全分析安全工具

2010-06-04 13:50:24

MySQL存儲過程

2019-10-11 18:27:18

APK資源壓縮

2021-02-22 13:44:41

開發Python金融

2020-10-15 12:00:01

Python 開發編程語言

2023-04-12 08:00:00

人工智能ChatGPTPython

2014-05-21 09:14:00

VDI審計日志監控監控

2013-03-02 18:00:38

軟件加密軟件授權WinLicense

2014-05-21 14:03:55

日志監控VDI

2021-11-04 05:43:38

GoKartGo代碼靜態安全分析

2023-12-12 07:30:54

IstioWasm前端

2021-05-09 22:48:40

SQL數據庫變量

2021-06-15 20:59:14

Kubernetes調試容器

2023-01-30 08:30:09

Tomcat性能優化

2011-01-20 10:33:30

Postfix

2022-01-10 07:17:02

安全工具CFB模糊測試
點贊
收藏

51CTO技術棧公眾號

欧美日韩一二三四| 久久大胆人体| 国产综合一区二区| 久久久人成影片一区二区三区| 91视频啊啊啊| 日韩漫画puputoon| 亚洲九九爱视频| 精品一区久久| 国产精品视频在线观看免费| 亚洲高清激情| 在线精品高清中文字幕| 一级黄色大片儿| 久久电影一区二区| 国产ts在线播放| 国产一精品一av一免费爽爽| 午夜亚洲福利老司机| 亚洲一区二区三区加勒比| 亚洲欧美激情在线观看| 免费人成黄页网站在线一区二区| 欧美极品在线视频| 天天爽天天爽天天爽| 午夜欧洲一区| 精品精品欲导航| 亚洲欧美日韩三级| 日韩精品一区二区三区| 亚洲成人午夜影院| 国产专区在线视频| 午夜激情视频在线| 91麻豆福利精品推荐| 成人黄色在线免费观看| 亚洲一卡二卡在线| 日本不卡在线视频| 97超级碰碰人国产在线观看| 欧美成人精品一区二区免费看片| 黑人操亚洲人| 亚洲精品一区二区久| 黑森林av导航| 国产视频一区二区在线播放| 欧美亚洲尤物久久| 草草草在线视频| 在线观看爽视频| 欧美日韩国产在线| 丝袜人妻一区二区三区| 欧美videosex性欧美黑吊| 亚洲欧美在线观看| 亚洲一区二区在线看| www 日韩| 国产精品色哟哟| 亚洲高清在线观看一区| 春暖花开成人亚洲区| 国产日韩欧美电影| 日本精品一区| 中文字幕在线视频区| 国产欧美综合在线观看第十页| 欧美成人免费在线| 男人的天堂在线视频| 久久综合九色综合97婷婷女人| 精品日产一区2区三区黄免费| 黄色一级大片在线免费看国产| 国产精品白丝jk黑袜喷水| 91精品国产一区二区三区动漫 | 一区二区三区伦理片| 亚洲欧美成人vr| 亚洲香蕉伊综合在人在线视看| 毛片网站免费观看| 成人激情在线| xxxxxxxxx欧美| 国产精品国产精品88| 欧美粗暴jizz性欧美20| 久久久久久久久久久人体| 国产亚洲成人精品| 亚洲综合二区| 国产欧美精品xxxx另类| 国产视频在线观看免费| 国产成人99久久亚洲综合精品| 国产私拍一区| 国产youjizz在线| 亚洲欧美一区二区三区孕妇| 欧美黄网在线观看| 性爽视频在线| 欧美日韩一区高清| 特黄特色免费视频| 网红女主播少妇精品视频| 在线免费看av不卡| 毛片a片免费观看| 国产日韩欧美一区二区三区在线观看 | 亚洲xxx视频| 污污的视频网站在线观看| 久久久99精品久久| 亚洲五码在线观看视频| 成年人在线网站| 精品视频免费在线| 稀缺小u女呦精品呦| 精品国产美女| 欧美国产日韩二区| 国产精品成人久久久| 国产另类ts人妖一区二区| 欧美精品一区二区三区在线看午夜| 四虎影视2018在线播放alocalhost| 中文成人av在线| 少妇人妻在线视频| 成人综合日日夜夜| 日韩精品在线免费观看| xxxx日本少妇| 久久精品主播| 国产精品国模大尺度私拍| melody高清在线观看| 亚洲精品中文字幕乱码三区| 黄色一级一级片| 国产精品一区二区三区美女| 日韩在线高清视频| 日韩av免费播放| 成人午夜激情影院| 日本福利视频导航| 欧美日韩精品免费观看视欧美高清免费大片| 日韩一级欧美一级| 免费看一级黄色| 亚洲激情成人| 亚洲最大的网站| 蜜芽在线免费观看| 色www精品视频在线观看| 欧洲成人午夜精品无码区久久| 日本高清免费电影一区| 欧美在线视频一区二区| 国产刺激高潮av| 综合亚洲深深色噜噜狠狠网站| 37pao成人国产永久免费视频| 欧洲大片精品免费永久看nba| 一本一本久久a久久精品综合小说| 国产精品1000| 国产99久久精品| 日本三日本三级少妇三级66| 欧美黄色a视频| 一本色道久久88综合日韩精品| 欧美一二三区视频| 国产成人av电影在线播放| 黄色影视在线观看| 亚洲狼人综合| 日韩亚洲精品电影| 91丨porny丨在线中文 | 国产女同互慰高潮91漫画| 欧美 日韩 国产在线观看| 国产精品tv| 国内偷自视频区视频综合| 亚洲精品久久久久久动漫器材一区 | 欧美久久在线| 中文字幕不卡三区视频| 亚洲精品自在久久| 国产一级淫片a视频免费观看| 久久亚洲精品小早川怜子| 成人在线看视频| 久久不见久久见中文字幕免费| 欧美中文字幕在线| 免费在线黄色网址| 91极品美女在线| 亚洲色图日韩精品| 久久国产精品72免费观看| 夜夜爽99久久国产综合精品女不卡 | 欧美视频在线免费看| 国产色视频一区二区三区qq号| 模特精品在线| 五月天综合网| 精品国产亚洲一区二区三区| 欧美大码xxxx| 国产高潮在线观看| 亚洲影院久久精品| 97人妻精品一区二区三区免| 天堂久久久久va久久久久| 神马一区二区影院| 国产美女亚洲精品7777| 欧美精品福利在线| 经典三级在线| 91麻豆精品国产91久久久久 | 91在线观看免费观看| 欧美猛烈性xbxbxbxb| 欧美一区二区精品在线| 国产黄色片免费看| 中文字幕欧美区| 97超碰免费在线观看| 国产欧美日本| 亚洲一区精彩视频| jizz性欧美23| 国产精品国语对白| 色呦呦在线视频| 亚洲免费视频一区二区| 91午夜精品亚洲一区二区三区| 26uuu亚洲综合色欧美 | 亚洲不卡视频在线观看| 国产精品初高中害羞小美女文| 国产人妻精品午夜福利免费| 噜噜噜91成人网| 欧美日韩中文字幕在线播放| 男男gay无套免费视频欧美| 91九色蝌蚪国产| 日韩欧美精品一区二区三区| 最新国产精品亚洲| 色婷婷视频在线| 欧美日韩视频在线第一区| 五月天婷婷丁香| 国产精品久久久久影院色老大| 日本一区二区在线观看视频| 免费成人美女在线观看| 免费在线观看视频a| 999久久久91| 久久久久久久久久久一区| 日韩欧美久久| 国产欧美一区二区三区久久人妖| 国产精品xx| 欧美xxxx18性欧美| 在线观看a视频| 日韩高清免费观看| 精品黑人一区二区三区国语馆| 日本道色综合久久| 日本免费一二三区| 亚洲欧美激情小说另类| 亚洲欧美va天堂人熟伦| av在线播放不卡| 欧美xxxxxbbbbb| 蜜桃av一区二区在线观看| 亚洲乱码中文字幕久久孕妇黑人| 亚洲最大av| 亚洲一区二区三区欧美| 国产不卡一二三区| 久久99久久精品国产| 999在线精品| 亚洲free嫩bbb| www.久久久.com| 成人国产精品日本在线| 国产乱子精品一区二区在线观看| 日韩av电影中文字幕| 国产一二在线播放| 午夜精品在线视频| heyzo高清国产精品| 欧美激情综合色| 人人澡人人添人人爽一区二区| 色噜噜狠狠狠综合曰曰曰88av| 亚洲欧美日韩综合在线| 亚洲国产精品大全| 国产综合在线播放| 日韩精品自拍偷拍| 亚洲av无码一区二区乱子伦| 欧美一区二区三区日韩| 国产女人高潮毛片| 日韩一级免费一区| www.蜜臀av| 亚洲国产精品成人va在线观看| 午夜视频1000| 亚洲毛片在线免费观看| 男生女生差差差的视频在线观看| 亚洲精品中文字幕有码专区| 青青久草在线| 尤物精品国产第一福利三区| 成人全视频高清免费观看| 在线播放日韩精品| 日本三级在线播放完整版| 久久久成人精品| caoporn免费在线视频| 欧美日韩不卡合集视频| 9lporm自拍视频区在线| 57pao成人永久免费视频| 超碰一区二区| 国产精品专区一| 欧美高清hd| 久久精品五月婷婷| 精品国产不卡| www.黄色网址.com| 在线成人av| 不卡影院一区二区| 久久99精品久久只有精品| 国内av免费观看| 成人h动漫精品| 国产人妻一区二区| 亚洲欧洲日本在线| 国产一级特黄aaa大片| 在线一区二区视频| 国产精品一级二级| 亚洲精品福利免费在线观看| yourporn在线观看视频| 操91在线视频| 黄色污网站在线观看| 国产精品www| 日本一区二区三区播放| 久久久久一区二区三区| 欧美疯狂party性派对| 米仓穗香在线观看| 亚洲影音先锋| www.国产视频.com| 成人激情校园春色| 欧美18—19性高清hd4k| 亚洲免费三区一区二区| 国产综合精品视频| 91精品国产综合久久精品麻豆| 姝姝窝人体www聚色窝| 日韩在线中文字| 精精国产xxx在线视频app| 国产精品一区二区久久国产| 久久久精品区| 日本不卡一二三区| 国模一区二区三区| 国产精品视频中文字幕| www.亚洲人| 久久久久亚洲av片无码| 色综合久久久网| 亚洲国产成人一区二区| 中文字幕免费国产精品| 欧美办公室脚交xxxx| 91探花福利精品国产自产在线| 香蕉久久精品| 亚洲理论电影在线观看| 精品一区精品二区高清| 五级黄高潮片90分钟视频| 亚洲精品videosex极品| 中文字幕第三页| 国产婷婷色综合av蜜臀av| 亚洲电影视频在线| 成人精品视频久久久久| 精品国产123区| 黄色免费观看视频网站| 风流少妇一区二区| 美国黄色小视频| 欧美电影一区二区三区| 久久经典视频| 日本一区二区三区在线播放| 国产精品videossex| 男人日女人的bb| 国产原创一区二区| 日韩成人短视频| 欧美日韩在线播放一区| 黄色在线免费观看大全| 欧美在线视频a| 亚洲精品一级二级三级| 成人黄色av片| av高清久久久| 日韩成人av毛片| 亚洲国产精品热久久| 欧美一卡二卡| www日韩av| 亚洲午夜极品| 日本一区二区免费视频| 亚洲影院在线观看| 亚洲第一页在线观看| 久久6精品影院| 午夜视频一区二区在线观看| 欧美日韩午夜爽爽| 国产精品一区二区果冻传媒| 一区视频免费观看| 日韩一区二区免费电影| 青青草视频在线免费直播| 97人人模人人爽人人喊38tv| 欧美人成网站| 天天躁日日躁狠狠躁av麻豆男男| 亚洲国产综合人成综合网站| 黄色一级大片在线免费看国产| 97视频网站入口| 蜜桃一区二区| 爱情岛论坛亚洲首页入口章节| 中文字幕第一区二区| 一区二区三区精彩视频| 久久综合免费视频| 99久久免费精品国产72精品九九| 国产中文字幕乱人伦在线观看| 26uuu亚洲综合色| 亚洲精品国产欧美在线观看| 日韩在线观看免费全| 色悠久久久久综合先锋影音下载| 成人免费性视频| 91麻豆国产精品久久| 这里只有精品免费视频| 久久精品视频va| 成人免费在线电影网| 北条麻妃69av| 国产精品嫩草99a| 亚洲第一大网站| 欧美亚洲国产视频| 久久神马影院| 国产麻豆剧传媒精品国产| 狠狠色香婷婷久久亚洲精品| 成人在线观看网站| www日韩av| 日韩国产在线一| 欧美黄色aaa| 国产视频精品免费播放| 亚洲人体在线| www..com日韩| 亚洲国产成人在线| 成人毛片视频免费看| 国产精品电影观看| 欧美日韩中文| 我不卡一区二区| 欧美成人aa大片| av亚洲一区二区三区| 9色porny| 中文av字幕一区| 天堂在线免费av| 91视频国产一区| 久久久蜜桃一区二区人| wwwav国产| 中文字幕日韩在线播放| 另类在线视频| 伊人精品视频在线观看|