python保存图片到指定路径_使用Python将不同大小照片制作为GIF动画2

导读:本文介绍如何使用Python将不同大小的照片制作为GIF动画,文末附源代码。阅读完本文,你将学会使用Python编写程序,将不同大小的照片制作为心仪的GIF动画。

在上一篇文章里,介绍了使用Python和imageio,不改变图片大小,把相同大小(分辨率)的多张照片制作为GIF的方法。一般来说,只有从视频提取的帧序列的分辨率才保持一致。此时使用该方法是没有问题的。

一、问题的引出

不过在大部分情况下,你面对的是不同分辨率的图片,有竖版照片、横版照片、高宽相同的照片,即使是竖版或横版,其高宽比也不相同。那么,如何将不同分辨率的照片制作为GIF动画呢?

由于GIF动画要求所有帧的分辨率必须相同,因此要先把不同分辨率的图片调整为相同的分辨率。一种简单粗暴的方法是直接将所有源图片resize到相同大小。

下面介绍将不同大小照片制作为GIF的方法和过程。这个过程和上一篇文章所介绍的过程类似,只不过增加了使用图像处理模块scikit image的resize()方法来改变图片分辨率的步骤。

二、使用的编程语言和库

关于编程工具,推荐使用Anaconda Python. 它集成了许多常用的库,当然包括图像处理模块scikit-image、制作GIF用的imageio模块。用户不必另行安装,非常方便初学者使用。如果你还没使用过Anaconda Python,请到本号的免费专栏Anaconda Python的安装和使用,了解它的下载、安装、使用方法。

三、准备工作

首先准备2张以上的照片。照片的大小可以不同。为验证本文介绍的方法和代码,建议准备至少一张竖版、一张横版照片。所有的照片要为相同的格式。这里我们使用jpg格式。将照片放到一个文件夹里,按照你希望的播放顺序将各张照片按升序命名。另外再建立一个文件夹,用来保存制作好的GIF文件。当然也可以在程序中动态创建文件夹,以后再撰文说明如何来创建。做好这些准备,就可以编写程序,逐个读取照片制作GIF。

四、GIF制作思路

首先导入os模块,用于获取指定文件夹下所有文件的名字;从scikit-image模块(skimage)的transform子模块导入resize()方法,用于改变图片的分辨率;导入imageio模块,用于读取图片和制作GIF。

其实关于读取图片和改变其分辨率,还有更好的库可以用,例如OpenCV. 但是OpenCV需要用户自己安装。等以后大家对Python比较熟悉了,再介绍使用OpenCV的方法。它不但能处理照片,还可以处理视频。比如从视频提取帧,将照片制作为视频,等等。

然后,使用os.listdir()方法来获取指定路径下所有图片的名字列表。

第三步,创建一个初始化为空的列表,用于保存读取的每张图片。

第四步,创建一个循环体,遍历图片名字列表,拼出每张照片的全路径名称,使用imageio.imread()方法读取每张照片,使用resize()方法将每张图片改变为你希望的分辨率。为便于从手机观看,建议将图片的高:宽比例设置为16:9. 然后使用append()方法将resize后的图片添加到图片列表,直至所有图片处理并添加到图片列表完毕。

第五步,使用mimsave()方法将图片列表保存为GIF。mimsave()方法主要有4个参数,第1个参数是要保存的GIF文件全路径名称,包括后缀名.gif;第2个参数是图片列表;第3个参数是保存类型,设置为字符串'GIF';第4个参数为每张图片播放持续时间,单位为秒。

五、示例源代码

将不同大小jpg格式的照片制作为GIF动画的示例源代码如下。

import os,imageiofrom skimage.transform import resizepath_source='.../images/'     #源照片位置path_dest='.../gif/'           #GIF要保存的位置source_file_list = os.listdir(path_source)  #读取文件夹下所有文件名称frames = []  #保存帧的列表for file in source_file_list:    full_name=path_source+file #照片的全路径名称    frame=imageio.imread(full_name) #读取照片    frame=resize(frame, (800,450,4)) #高宽比16:9    frames.append(frame) #将照片添加到列表       #duration:单帧持续时间,单位simageio.mimsave(path_dest+'mygif2.gif', frames, 'GIF', duration=0.8)

这个程序代码比上一篇文章制作GIF动画的代码也就多了导入resize方法和使用resize()改变图片分辨率这两行语句,总共12行。制作的GIF效果如下图所示。

809ae619-3815-eb11-8da9-e4434bdf6706.png

可以看出,照片的比例失真了。这是由于对原始照片,只是简单的使用resize()方法将其改为为指定的分辨率,改变后的分辨率与原照片不一致,因此看起来高宽比例失真。

照片比例失真将影响观赏效果,那么该如何做到既能够将不同大小的照片改变为具有相同分辨率,又能够保证原照片的比例不失真呢?这个解决方法将在下一篇文章中进行介绍。请继续关注本号的后续文章。欢迎转发评论,有任何问题请在评论区留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/567532.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GitHub访问慢-FastGithub下载及使用

很多需要用到的脚本及软件会先发布在GitHub上,所以经常需要访问GitHub,但是每次都会卡在跳转到GitHub的步骤,就是还没开始就可以结束了。 之前尝试过手动修改host文件来解决网站的访问问题 以及更换网络但还是有时候无法如愿的访问GitHub Fa…

android r 编译找不到头文件_「投稿」iOS逆向——砸壳与反编译

作者:疯狂的蛋神近来对iOS逆向十分感兴趣,就在业余时间里自己在上网找了各种资料学习,发现许多资料对于一些细节描述的不够详细,所以也踩了很多坑,我也将自己踩的一些坑总结出来,希望对大家有所帮助。注&am…

python-类思想-实现简单增删查改

class Person:def __init__(self,name, phone):self.UserInfo {name: name,phone: phone}class Opt:def __init__(self):self.person []def add_person(self, user_info):print(增加)self.person.append(user_info)def delete_person(self):print(删除)self.person.pop()def …

vb microsoft.xmlhttp 获取所有超链接_编写我的第一个VB程序

若不是因为新冠肺炎疫情影响,下面的内容应该是在学校的课堂上给学生们讲解的,如今采用这种方法,也是迫不得已。软件的使用在中学信息学科课堂中,往往普遍存在于小学和初中课堂,而在高中课堂上演示软件操作,…

C++ 偏微分数值计算库_Windows下RTCGAToolbox库下载TCPA数据(RPPA)学习笔记

1. RTCGAToolbox库加载library(RTCGAToolbox)2. 下载TCPA数据2.1 下载代码# Get the last run dates lastRunDate <- getFirehoseRunningDates()[1]# get RPPA data and clinical data for LGG lgg.data <- getFirehoseData(dataset "LGG",gistic2_Date getF…

MySQL安装之没有配置向导

解决方案&#xff1a; <1>安装MySQL服务 首先我们先进入mysql的安装目录下的bin目录 之后打开DOS命令窗口&#xff0c;进入该目录下&#xff08;一定要进入该目录&#xff0c;否则操作错误&#xff09;&#xff0c;然后执行mysqld --install命令&#xff0c;如下&…

unet图像分割_UNet++解读 + 它是如何对UNet改进 + 作者的研究态度和方式

UNet论文: 地址UNet论文翻译:地址UNet源代码: 地址UNet作者在知乎上进行了解读,里面还有视频的讲解,深入人心.里面有一句话令我印象深刻,我总结下: 很多论文给出了他们建议的网络结构&#xff0c;其中包括非常多的细节&#xff0c;比如用什么卷积&#xff0c;用几层&#xff0c…

python中0、1、True、False、if条件

总结&#xff1a; 无论是python还是C&#xff0c;true1&#xff0c;false0 非零就是true&#xff0c;此说法只应用在判断条件中 1、python中0、1、True、False >>> print(True 1) >>> print(True 2) >>> print(False 0) >>> print(…

labview my_fpga开发套件下载_LabVIEW面向对象的ActorFramework(1)

本系列文章主要阐述以下几个问题&#xff1a;&#xff08;1&#xff09;什么是面向对象编程&#xff1f;&#xff08;2&#xff09;为什么要学习面向编程&#xff1f;&#xff08;3&#xff09;LabVIEW面向编程学习为什么有点难&#xff1f;&#xff08;4&#xff09;LabVIEW面…

Python-类与文件读取结合

目录 作业1&#xff1a; 知识点1&#xff1a;eval使用 知识点1&#xff1a;类对象数组定义 知识点2&#xff1a;文件读取 知识点3&#xff1a;内容解包 知识点4&#xff1a;列表排序 作业2&#xff1a; 知识点1&#xff1a;类继承后 初始化管理 知识点2&#xff1a;文件…

乌龟量化估值怎么看_推荐几个查询指数估值的网址

首先说一下&#xff0c;因为每一家网站的数据来源不同&#xff0c;因此在不同的网站上&#xff0c;相同指数的估值数据未必相同。但这不重要&#xff0c;只要大方向没错&#xff0c;对指数所处的估值区域有一个大致的概念&#xff0c;保持“模糊的正确”即可。以下推荐几个可以…

机器学习-01regression

主要内容&#xff1a; 1.回归模型的出现 2.回归模型的选择--使得损失最小 3.损失最小时&#xff0c;参数求值 梯度下降法 4.损失不理想&#xff0c;重新调整模型 5.添加正则表达式&#xff0c;即学习率 import numpy as np import matplotlib.pyplot as plt x_data [338.…

unity 草 可以一棵棵种吗?_这种野草人称“瓜子金”,1斤能卖50多,拔1棵少棵很珍贵...

欢迎来到“农民爱花草”&#xff0c;这里每天都会分享一些有关花草绿植的小知识&#xff0c;喜欢的朋友请“关注”今日导读&#xff1a;这种野草人称“瓜子金”&#xff0c;1斤能卖50多&#xff0c;拔1棵少棵很珍贵在我们广大的农村地区生活着很多的植物&#xff0c;有很多的植…

安装IntelliJ IDEA 2019.2激活

所有教程就是下载完成后&#xff0c;配置 我下载完jetbrains-agent-latest.rar将后缀名改为jar。添加----失败 百度了很多 都没有 最后把jetbrains-agent-latest.rar进行解压&#xff0c;将解压内容复制到IntelliJ中。再进行添加即可。 ps:刚开始安装完成后安装路径下没有im…

pytorch tensor查找0_Pytorch简单教程

2019 年&#xff0c;ML 框架之争只剩两个实力玩家&#xff1a;PyTorch 和 TensorFlow。研究者大批涌向 PyTorch&#xff0c;而业界的首选仍然是 TensorFlow。Pytorch和TensorFlow的区别&#xff1a;TensorFlow是基于静态计算图的&#xff0c;静态计算图是先定义后运行&#xff…

白盒测试-条件覆盖-短路陷阱

条件覆盖 ​要求设计足够多的测试用例&#xff0c;使得每一个判定的​每一个条件的每一个取值&#xff08;真或假&#xff09;至少各执行一次。 对于示例来说​&#xff0c;可以设计&#xff1a; {x4,y4,z11} 条件取值&#xff1a;TFTF {x2,y6,z9} 条件取值&#xff1a;F…

抖音2020研究报告_抖音音乐发布2020抖音音乐生态数据报告

近几年&#xff0c;随着原创音乐产业规模逐年递增及数字音乐4.0时代觉醒&#xff0c;拓宽了原创音乐创作与宣发渠道&#xff0c;真正实现了大众娱乐生活从“听音乐”到“看音乐”到“玩音乐”的多重共振。11月5日&#xff0c;抖音音乐正式发布《2020抖音音乐生态数据报告》。报…

mysql主备切换 自动_核电生产管理信息系统EAM完成首次备用环境切换演练

安全是核电事业稳步发展的基石&#xff0c;中国核电始终将安全放在第一位&#xff0c;在系统设计及日常管理中&#xff0c;注重安全备用及安全冗余的考虑。核电生产管理信息系统作为核电现场业务的主要承载工具&#xff0c;在核电日常生产运行中发挥着越来越重要的作用。近日&a…

外星人台式电脑_戴尔 XPS 和外星人大更新,一边是生产力,一边是游戏

十代酷睿的到来&#xff0c;也催促着终端厂商更迭着旗下的产品线&#xff0c;而今年特殊的情况更让不少居家办公的人意识到生产工具和生产力的可贵。在学生们即将返校&#xff0c;白领们陆续回到办公室的当口&#xff0c;戴尔对旗下产品进行了大更新&#xff0c;全新的 XPS15 和…

string 中的offset_【Java基础】String常量的长度有限制吗?

备注&#xff1a;JDK版本&#xff1a;1.8.0最近同事问了我一个问题&#xff0c;String常量有长度限制吗&#xff1f;为什么会问起这个问题呢&#xff0c;因为同事在开发中确实遇到了IDEA编译器编译过程中提示字符串常量过长的异常。异常的出现也就证明了String常量是有长度限制…