导读:本文介绍了如何使用Python将各种大小的照片制作为GIF动画。 文末附有源代码。 阅读本文后,您将学习使用Python编写程序,将各种大小的照片创建为用心的GIF动画。
上一篇文章介绍了如何使用Python和imageio将多个相同大小(分辨率)的照片转换为GIF,而不改变图像大小。 一般来说,只有从视频中提取的帧序列的分辨率匹配。 在这种情况下,使用此方法没有问题。
一.引出问题
但大多数情况下,你面对的是不同分辨率的照片,有竖版照片、横版照片、高度相同的照片。 竖版和横版的长宽比也不同。 那么,如何将不同分辨率的照片制作成GIF动画呢?
首先将不同分辨率的图像调整为相同的分辨率,因为GIF动画要求所有帧的分辨率都相同。 一个简单粗暴的方法是直接将所有源图像resize为相同的大小。
介绍将不同尺寸的照片制成GIF的方法和流程。 此过程与上一篇文章中介绍的过程类似,但添加了使用图像处理模块scikit image的resize )方法更改图像分辨率的步骤。
二.使用的编程语言和库
关于编程工具,推荐使用Anaconda Python。 综合了很多常用的库。 当然,它还包括图像处理模块scikit-image和用于创建GIF的imageio模块。 不需要用户另外安装,方便了初学者。 如果您还没有使用过Anaconda Python,请在安装和使用本期的免费专栏Anaconda Python时,了解其下载、安装和使用方法。
三.准备工作
首先准备两张以上的照片。 照片的大小可以不同。 为了验证本文介绍的方法和代码,建议至少准备一张竖版和横版照片。 所有照片必须采用相同的格式。 这里使用jpg格式。 将照片放入文件夹,按照希望的播放顺序按升序对各照片进行命名。 此外,还将创建一个文件夹以存储已创建的GIF文件。 当然,也可以在程序中动态创建文件夹,并编写以后如何创建。 做好这些准备之后,就可以写程序,一张张地读取照片来制作GIF了。
四. GIF制作构想
首先导入操作系统模块,获取指定文件夹下所有文件的名称; 导入scikit-image模块( skimage )的“transform”子模块到“resize”)方法以更改图像的分辨率。 导入imageio模块,用于读取图像和创建GIF。
其实关于图像的读取和分辨率的变更,有像OpenCV .这样更好的库,但是OpenCV需要用户自己安装。 接下来大家熟悉Python后,我将介绍如何使用OpenCV。 不仅能处理照片,还能处理视频。 例如从视频中提取帧,将照片制作为视频等。
然后,使用os.listdir ( )方法获取指定路径下所有图像的名称列表。
在第三步中,创建一个初始化为空的列表以存储每个导入的图像。
第四步,创建循环体,检查图像名称列表,为每张照片创建完整路径名,然后使用imageio.imread (方法读取每张照片,并使用resize )方法将每张图像更改为所需的分辨率。 为了方便您在手机上查看,建议您将图像高度设置为16:9,直到所有图像都经过处理并添加到图像列表中。 然后,append (使用方法将resize后的图像添加到图像列表中。
第五步是mimsave (使用方法将图像列表另存为GIF )。 mimsave ) )方法主要有四个参数,第一个参数是要存储的GIF文件的完整路径名,其中包含扩展名为. GIF的文件。 第二个参数是图像列表;第三个参数是保存类型,字符串’ GIF ‘; 第四个参数是各图像的播放时间,单位为秒。
五.示例源代码
以下是将不同大小的jpg格式照片创建为GIF动画的示例源。
import os, imageiofromskimage.transformimportresizepath _ source=’ ./images/’ #源照片位置path_dest=’./gif/’ #GIF要保存的位置保存帧列表forfileinsource _ file _ list:full _ name=path _ source file #照片的完整路径名frame=imageio.imread (读取照片的frames 4 )纵横比16:9frames.append ) frame ) #将照片添加到列表#duration帧的持续时间,单位为simageio.mimssion ‘GIF ‘, duration=0.8 )与上一篇文章相比,此程序代码包含12行用于创建GIF动画的代码,包括导入resize方法和使用resize ( )更改图像分辨率的两行语句。 制作的GIF效果如下图所示。
可以看出照片的比例失真了。 这是因为,对于原始照片,只是用resize ( )的方法变更为指定的分辨率,变更后的分辨率与原始照片不一致,因此看起来会以高纵横比失真。
照片比例失真会影响观赏效果,但是如何将不同大小的照片更改为相同的分辨率,同时避免原始照片的比例失真呢? 这个解决方法将在下一篇文章中介绍。 请继续关注这一期的后续文章。 欢迎转发评论。 如果有什么问题的话请在评论区留言。