通过简单例子介绍 Python 快速创建和优化Gif图片
使用python处理Gif图片是一件方便的事情。
这里,主要介绍两个工具库的使用:Pillow库和Gifsicle,以编程方式处理Gif,让我们了解如何使用Python编辑Gif图片。
使用Pillow
用这个动图(src.gif):
阳光太强,所以给马老板戴上个墨镜(glass.png):
首先,我们需要安装Pillow:
pip install Pillow
从Pillow中导入Image类:
from PIL import Image
打开图片代码如下,确保这个代码运行正常:
如果上述代码运行正常,则会打开并且显示图片(gif图片只显示第一帧)。
调整代码,把眼镜“戴”到马老板的图片上,也就是合并两个图片。
因为眼镜图像有一个透明的背景,所以需要使用mask参数,如果非透明背景图片,则无需这个参数。
得到的结果:
可以看到,眼镜的颜色和位置不对(默认(0,0)位置,戴到撒贝宁头上了),下面接着调整。
现在把图像放在一起了。只需要确定眼镜的位置。通过改变paste方法中的box参数来做调整即可:
img.paste(glass, (280, 95), mask = glass)
这里添加了x和y方向上的偏移量作为元组。眼镜图像将在x轴上偏移为280px,在y轴上偏移为95px。
设置box 参数后运行如下:
由于我们处理的是Gif 图片,需要处理到Gif的每一帧的这个位置。通过PIL中的ImageSequence对象可以实现每帧的处理:
from PIL import Image, ImageSequence
在下面的代码中,通过ImageSequence遍历器遍历Gif的每一帧,并把眼镜图片粘贴到每帧上,再保持到另一个列表中。
把“戴上”眼镜的每帧的数据,保持到新文件内:
new_image[0].save("dst.gif",
save_all = True,
append_images = new_image[1:],
loop = 0)
此方法保存第一帧,并附加gif的其他所有帧。loop参数设置循环次数,设置0则为无限循环。保存后,我们得到新的Gif图片:
这样,我们得到了目标文件了。
然而,这样生成的图片可能过大,在一些第三方平台上传,可能因为体积太大而被限制,我们不得不优化一下图片大小。
优化Gif
Pillow没有看到有好的接口实现压缩。尝试了把原来的Gif 拆帧压缩(save设置quality参数)保存,再把它们合并成新的GIf,但效果不是很好。如果通过resize 改变宽高,是可以达到一定的压缩目的,但是我们不期望尺寸变化。
所以,借助另外一个CLI工具——Gifsicle,来做Gif 的优化工作。
下载和安装,参考地址:https://www.lcdf.org/gifsicle/。
安装后,通过Python中运行gifsicle命令,对图片进行压缩即可。
下面加上优化图片的代码:
通过设置有损压缩,限制颜色等,达到压缩的目的。我们得到的图片如下:
Gif的整体大小从3MB下降到1.5MB,减小了一半,而肉眼看不出啥区别。
结论
这是使用Python创建和优化gif的基础知识,组合Image 的其他接口,可以对图片进行各种需求处理,如图片加水印、加logo、图片剪裁等。快速批量处理,大大提高工作效率的工具。
(全文完)
(欢迎转载本站文章,但请注明作者和出处 云域 – Yuccn )