Python-压缩gif图片大小
2021/6/26 14:27:05
本文主要是介绍Python-压缩gif图片大小,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
使用PIL、imageio,将gif拆帧、压缩、合成。博主使用的是PyCharm工具。
1、安装imageio。File-->Settings-->Project: pro-->Project Interpreter-->点击 右上角的“+”搜索“imageio”安装。
2、提取gif每一帧并保存jpg格式,这里使用.convert('RGB')是因为frame.save不能保存png格式的图片,下同。
def getFrames(im): #非动画 if False == im.is_animated : return index = 1 for frame in ImageSequence.Iterator(im): frame = frame.convert('RGB') frame.save("g%d.jpg" % index) compressImg('g%d.jpg'% index) index = index + 1 return index
3、压缩图片。
def compressImg(ImgName): im = Image.open(ImgName) im.convert('RGB') if max(im.size[0], im.size[1]) > 780: im.thumbnail((780, 780)) im.save('f-'+ImgName, quality=50) return 'OK'
4、将之前拆开的jpg文件合成gif。
def compressGif(ind,dur): images = [] for i in range(1, ind): images.append(imageio.imread('f-g%d.jpg' % i)) imageio.mimsave('c001.gif', images, duration = dur)
5、计算帧之间的频率,获取到的是毫秒,duration是秒,所以除以1000。
def calDuration(im): return (im.info)['duration']/1000
6、移除图片。
def removeImg(ind): for i in range(1,ind): af = 'f-g' + str(i) + '.jpg' f = 'g' + str(i) + '.jpg' if os.path.exists(af): os.remove(af) if os.path.exists(f): os.remove(f)
调用函数的代码(主函数)
gif = Image.open("gav27.gif") #读取文件 cnt = getFrames(gif) #提取每一帧,保存为jpg格式,返回总帧数,此过程会生成许多jpg文件 duration = calDuration(gif) #计算帧之间的频率,间隔毫秒 compressGif(cnt, duration) # 压缩jpg,合并jpg成gif removeImg(cnt) # 删除中间jpg文件
总体代码如下:
import imageio import os from PIL import Image, ImageSequence import moviepy.editor as mpy def getFrames(im): #非动画 if False == im.is_animated : return index = 1 for frame in ImageSequence.Iterator(im): frame = frame.convert('RGB') frame.save("g%d.jpg" % index) compressImg('g%d.jpg'% index) index = index + 1 return index def compressImg(ImgName): im = Image.open(ImgName) im.convert('RGB') if max(im.size[0], im.size[1]) > 780: im.thumbnail((780, 780)) im.save('f-'+ImgName, quality=50) return 'OK' def compressGif(ind,dur): images = [] for i in range(1, ind): images.append(imageio.imread('f-g%d.jpg' % i)) imageio.mimsave('c001.gif', images, duration = dur) def calDuration(im): return (im.info)['duration']/1000 def removeImg(ind): for i in range(1,ind): af = 'f-g' + str(i) + '.jpg' f = 'g' + str(i) + '.jpg' if os.path.exists(af): os.remove(af) if os.path.exists(f): os.remove(f) gif = Image.open("gav27.gif") #读取文件 cnt = getFrames(gif) #提取每一帧,保存为jpg格式,返回总帧数,此过程会生成许多jpg文件 duration = calDuration(gif) #计算帧之间的频率,间隔毫秒 compressGif(cnt, duration) # 压缩jpg,合并jpg成gif removeImg(cnt) # 删除中间jpg文件
效果如下所示:
这篇关于Python-压缩gif图片大小的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门