精品欧美一区二区三区在线观看 _久久久久国色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传媒在线免费观看| 亚洲欧美日韩天堂一区二区| 日本黄色片一级片| 亚洲 小说区 图片区 都市| 日日夜夜精品免费视频| www日韩中文字幕在线看| av av在线| 78精品国产综合久久香蕉| 亚洲欧美一区二区三区极速播放 | 欧美va在线观看| ●精品国产综合乱码久久久久| 国产精品视频免费一区二区三区| 天堂av免费在线观看| 亚洲欧美一级二级三级| 亚洲香蕉成人av网站在线观看| 日韩 国产 一区| 国产精品伦理| 理论不卡电影大全神| 国产精品88久久久久久| 日韩精品免费在线| 91欧美一区二区三区| 日韩免费va| 亚洲一线二线三线视频| 亚洲欧美电影在线观看| 特级丰满少妇一级aaaa爱毛片| 久久99国产精品免费| 日产精品久久久一区二区福利| 永久免费看黄网站| 成人写真视频| 精品视频在线导航| 熟妇无码乱子成人精品| 国产成人77亚洲精品www| 狠狠色狠色综合曰曰| 成年丰满熟妇午夜免费视频| 午夜激情在线观看| 久久久影院官网| 国产精品一区二区三区观看| 99热这里只有精品在线| 久久国产精品第一页| 国产不卡视频在线| 国产手机在线视频| 国模大胆一区二区三区| 久久最新资源网| 秋霞欧美一区二区三区视频免费 | 国产一区欧美日韩| 国产精品自在线| 国内av在线播放| 日日骚欧美日韩| 国产精品va在线| 狠狠人妻久久久久久综合| 国产亚洲福利| 8x海外华人永久免费日韩内陆视频| 久久黄色小视频| 欧美激情1区| 欧美日本高清一区| 激情四射综合网| 欧美三区不卡| 高清欧美性猛交xxxx| 国产在线观看你懂的| 中文字幕免费在线看| blacked蜜桃精品一区| 亚洲精品自拍视频| 亚洲第一成人网站| 国产传媒欧美日韩成人精品大片| 精品爽片免费看久久| 大又大又粗又硬又爽少妇毛片| 亚洲影院天堂中文av色| 亚洲人高潮女人毛茸茸| 丁香激情五月少妇| 99精品视频在线| 不卡伊人av在线播放| 麻豆精品国产免费| 亚洲综合自拍| 久久久久久久国产精品视频| 国产成人在线播放视频| 久久精品日产第一区二区| 国产精品国产三级国产aⅴ9色| 亚洲特级黄色片| 国产一区二区在线电影| 国产精品二区三区四区| 日韩精品视频无播放器在线看 | 毛片av在线播放| av2020不卡| 91福利国产精品| 欧美性受xxxxxx黑人xyx性爽| 亚洲精品午夜| 亚洲美女激情视频| 精品国产国产综合精品| 亚洲国产高清视频| 国产精品美女无圣光视频| 99在线精品视频免费观看20| 99久久婷婷国产| 一区二区免费电影| 国产亚洲成av人片在线观看| 欧美吞精做爰啪啪高潮| 精品伦一区二区三区| 精品中文一区| 欧美大肥婆大肥bbbbb| 欧美三级韩国三级日本三斤在线观看| 日韩高清一区在线| 99视频免费观看| 无码人妻一区二区三区在线视频| www.在线视频| 91搞黄在线观看| 日本在线不卡一区二区| 青青草原综合久久大伊人精品 | 天天综合色天天综合色hd| av网站在线看| 欧美曰成人黄网| 白嫩情侣偷拍呻吟刺激| 日韩在线观看电影完整版高清免费悬疑悬疑 | 韩国亚洲精品| 国产精品青青在线观看爽香蕉| 亚洲精品18p| 国产精品每日更新| 国产美女无遮挡网站| 视频欧美一区| 搡老女人一区二区三区视频tv| 国产成人无码精品亚洲| 国产精品77777竹菊影视小说| 日韩高清国产一区在线观看| 久久狠狠婷婷| 精品黑人一区二区三区久久 | jizzjizz少妇亚洲水多| 亚洲成人亚洲激情| 99鲁鲁精品一区二区三区| 久久婷婷亚洲| 精品裸体舞一区二区三区| 国产三级av在线播放| 亚洲福利专区| 97人人香蕉| 日本三级视频在线播放| 色综合久久久久| 99re久久精品国产| 激情欧美丁香| 成人av免费在线看| 超碰在线caoporen| 3atv一区二区三区| 日韩欧美黄色网址| 天堂成人国产精品一区| 欧美成人免费在线| 中文字幕在线中文字幕在线中三区| 精品伦理精品一区| 欧美激情一区二区三区久久久| 久久久一区二区三区四区| 国产一区二区毛片| 亚洲激情免费视频| 九九九九九九精品任你躁| 久久精品中文字幕电影| 91精品国产色综合久久不8| 国产精品亲子乱子伦xxxx裸| 男人插女人下面免费视频| 深爱激情综合| 国产精品久久久久av| av免费在线一区二区三区| 91豆麻精品91久久久久久| 谁有免费的黄色网址| 日韩电影一区二区三区四区| 色综合666| a∨色狠狠一区二区三区| 综合网日日天干夜夜久久| 中文文字幕一区二区三三| 中文一区一区三区高中清不卡| 国产区二区三区| 婷婷六月综合| 国产二区一区| 中国字幕a在线看韩国电影| 亚洲人精选亚洲人成在线| 在线观看免费中文字幕| 亚洲少妇屁股交4| aaa黄色大片| 久久蜜桃资源一区二区老牛| 亚洲电影免费| 秋霞影院一区| 欧美一区二区三区精品电影| 国产三级在线看| 6080国产精品一区二区| 日韩a级片在线观看| caoporn国产一区二区| 天天摸天天碰天天添| 水蜜桃久久夜色精品一区| 96久久精品| 欧美大电影免费观看| 精品国产一区二区在线| 国产综合在线播放| 在线国产亚洲欧美| www青青草原| 久久欧美中文字幕| 黄色三级视频在线播放| 99视频在线精品国自产拍免费观看| 欧美一区二区高清在线观看| 日韩在线电影| 久久久久久亚洲| 波多野结衣在线网站| 日韩欧美国产三级电影视频| 亚洲天堂一区在线| 国产黄a三级三级三级av在线看| 婷婷在线观看视频| 香蕉久久国产| 一区二区不卡在线观看| 精品一区91| 日韩一区二区精品在线观看| 欧美日韩国产免费一区二区| www.亚洲高清| 激情视频一区二区三区| 日韩国产高清一区| 国产欧美88| 成人三级视频| 亚洲精彩视频| 亚洲女同女同女同女同女同69| 蜜臀av午夜一区二区三区| 美女欧美视频在线观看免费| 久草免费在线视频| 欧美日韩另类一区| 国产无套内射又大又猛又粗又爽| 国产无一区二区| 国产香蕉精品视频| 久久成人麻豆午夜电影| 国产福利一区视频| 亚洲午夜极品| 国产高清免费在线| 黄色网址免费在线观看| a视频在线观看| 日韩高清在线| 日韩三级在线观看| 艳妇乳肉豪妇荡乳av无码福利| 香蕉久久一区| 日韩高清欧美激情| 欧美一区免费视频| 中文久久电影小说| 国产中文字幕日韩| 欧美裸体视频| 国外成人在线直播| 男女在线视频| 欧美猛交ⅹxxx乱大交视频| jizz日韩| 亚洲成人免费看| 久久亚洲中文字幕无码| 欧美+亚洲+精品+三区| 一区国产精品| 91视频精品| 一区二区冒白浆视频| 成人国产精品一级毛片视频| 欧美日韩国产成人在线91| 日韩精品免费播放| 99re国产精品| 日本欧美黄色片| 亚洲美女一区| 亚洲 欧美 日韩 国产综合 在线| 狠狠噜噜久久| 日韩一级片免费视频| 亚洲视频精品| 999在线观看视频| 亚洲国产裸拍裸体视频在线观看乱了中文 | 日韩最新中文字幕| 综合久久99| 97免费视频观看| 在线精品一区二区| www.av中文字幕| 久久精品二区三区| 无需播放器的av| 精品一区二区三区久久| 制服下的诱惑暮生| 顶级嫩模精品视频在线看| 国产麻豆剧传媒精品国产av| 91色porny| 亚洲精品91在线| **性色生活片久久毛片| 久久久久亚洲av成人片| 第一福利永久视频精品| 国产免费a视频| 3atv在线一区二区三区| 色窝窝无码一区二区三区| 亚洲欧美在线播放| 人人干在线视频| 色在人av网站天堂精品| 日韩大片免费观看| 国产美女精彩久久| caoporn成人| 日本高清不卡三区| 亚洲v在线看| 天天夜碰日日摸日日澡性色av| 三级欧美韩日大片在线看| 91视频这里只有精品| 成人中文字幕电影| 欧美做受高潮6| 亚洲人午夜精品天堂一二香蕉| 日本三级中文字幕| 欧美亚洲一区二区在线| 北条麻妃一二三区| 亚洲男人第一av网站| 国产淫片在线观看| 欧洲美女免费图片一区| 国产精品毛片无码| 欧美精品久久| 欧美日韩伊人| 香港日本韩国三级网站| 成人免费黄色在线| 国产日韩精品中文字无码| 亚洲成人激情自拍| 亚洲一级av毛片| 日韩毛片在线看| 自拍亚洲图区| 国产精品夫妻激情| 另类春色校园亚洲| 欧美精品99久久久**| 国产精品一二三四五区| 精品一区二区三区四区在线| 精品美女在线观看视频在线观看| 青草成人免费视频| 97久久精品| 中文字幕日韩一区二区三区| 久久伊人亚洲| 国产成人精品无码片区在线| 亚洲日本在线视频观看| 欧美一级黄视频| 日韩精品在线视频观看| 激情av在线| 92国产精品视频| 色999日韩| 青青在线免费观看视频| 99久久久精品| 精品少妇theporn| 欧美一区二区高清| 乱人伦中文视频在线| 国产精品xxxxx| 伊甸园亚洲一区| 三上悠亚久久精品| 国产+成+人+亚洲欧洲自线| 中文字幕五月天| 欧美精品123区| 毛片在线看片| 国产在线拍偷自揄拍精品| 成人黄色av| jizz大全欧美jizzcom| 久久精品一级爱片| 亚洲国产成人精品女人久久| 精品中文视频在线| 色网在线免费观看| 美女被啪啪一区二区| 国产精品一卡| av鲁丝一区鲁丝二区鲁丝三区| 亚洲成av人综合在线观看| 欧美一级片免费| 69av在线播放| 日韩伦理一区二区三区| 日韩欧美亚洲天堂| 91视频精品在这里| 天堂在线免费观看视频| 日韩极品精品视频免费观看| 欧美日韩国产观看视频| 久久大片网站| 久久久久久自在自线| 男人天堂av电影| 欧美色老头old∨ideo| 视频免费一区| 亚洲a一级视频| 欧美午夜一区| 一本加勒比波多野结衣| 欧美丝袜一区二区三区| 岛国在线大片| 成人有码在线播放| 韩日精品在线| 成年人在线观看av| 欧美三级乱人伦电影| 国产最新在线| 国产另类自拍| 老司机午夜精品视频在线观看| 久久精品三级视频| 日韩一区二区三区在线观看| xxx性欧美| 日本在线免费观看一区| 国产一区二区三区免费观看| 国产在线一区视频| 亚洲欧美国产日韩中文字幕| 黑人一区二区三区| 亚洲福利视频二区| 91在线视频国产| 欧美国产在线电影| 国产精选一区| 一区二区三区四区毛片| 亚洲va韩国va欧美va精品| 国产一级二级三级在线观看| 成人性生交xxxxx网站| 国产精品九九| 久久久久久国产免费a片| 欧美一区二区日韩一区二区| segui88久久综合9999| 视频一区不卡| kk眼镜猥琐国模调教系列一区二区| 探花国产精品一区二区| 欧美黄色小视频| 国产一区二区三区天码| 91成人在线观看喷潮蘑菇| 日本久久一区二区| 日本天码aⅴ片在线电影网站| 日本不卡一区| 成人激情视频网站| 一本久道久久综合无码中文| 51ⅴ精品国产91久久久久久|