通过简单例子介绍 Python 快速创建和优化Gif图片

通过简单例子介绍 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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注