python gif压缩_Python压缩Gif

最近比较堕落,没找到新鲜素材。索性再写一篇Python处理日常任务的文章。

做自媒体的朋友为了让自己的文章内容生动有趣一些,可能会选择增加gif文件到文章里面。但是,为了上传的速度够快,或者如果是用自己的服务器存储gif文件,我们肯定不希望gif文件过大,这时候就需要压缩gif文件。某些在线压缩gif的网站也的确好用,比如:

但对于某些过大的gif文件,它在完成压缩之后,我们有可能下载不下来。(这也许和网络有关,我就遇到过这类事情)

于是,再度发扬自立自足的精神,我们来用Python压缩Gif文件。毕竟,python除了不会生孩子,还有什么不会?

我们走起!

大体思路:用Python分析原始gif文件,然后依据多帧数据生成许许多多不同的png文件。接下来,我们删除部分图片,比如只使用索引值为奇数的png来合成新的gif(下面的代码所保留的png图片则是5n)。这样一来,图片的尺寸就小了。

#! /usr/local/bin/python3

# -*- coding: utf-8 -*-

from PIL import Image

import os

import imageio

def AnalysisGif( gifPath ):

image = Image.open(gifPath)

pngDir = gifPath[:-4]

if os.path.exists( pngDir ):

files = os.listdir( pngDir )

for file in files:

file = pngDir + "/" + file

os.remove( file )

os.rmdir( pngDir )

os.mkdir( pngDir )

try:

while True:

current = image.tell()

pngPath = pngDir+'/'+str(current)+'.png'

image.save( pngPath, quality = 100 )

image.seek( current+1 )

except EOFError:

print( EOFError )

pass

def Combine2Gif( folderPath, gifFilePath ):

files = os.listdir( folderPath )

pngFiles = []

for i in range(0, len(files), 5):

pngFiles.append( folderPath + "/" + ('%d.png' % i) )

GenerateGif( 0.1, gifFilePath, pngFiles )

def GenerateGif(step, gifPath, filterPngs):

images = []

for filePath in filterPngs:

images.append( imageio.imread(filePath) )

imageio.mimsave( gifPath, images, duration = step )

if __name__ == "__main__":

gifPath = "/Users/weiyang/Desktop/test.gif"

AnalysisGif( gifPath )

Combine2Gif( gifPath[:-4], gifPath[:-4]+"_result.gif" )

print( "== finished ==" )

如果对gif的质量要求不高,我们甚至可以用OpenCV把gif转成黑白样式。这需要提前为Python安装OpenCV库。如果你对这种方式感兴趣,可以浏览:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值