后台回复【入门资料】

送你十本Python电子书

之前有篇推文分享了如何在 Matplotlib 中生成 GIF 可视化图表,有一定的限制。本文将介绍如何用 Pillow 创建 GIF,可以将任意多张图片组合在一起,成为一张可播放的 GIF 图。

这种方式的适用场景更多,而且 PyPI 上也没有专门的库可以生成 GIF,所以推荐大家收藏本文的代码。

什么是 GIF 图?

GIF(“图形交换格式”)是一种位图图像格式,于1987年开发。

GIF基本上是一系列具有不同设置的图像,例如:

  • 循环播放

  • 每帧的持续时间(图片)

  • 其他…

GIF 也可以是静态图像。

Pillow

Pillow 是 Python 图形处理库 PIL 的一个分支,引入了许多更改和增强功能,以使API易于使用或处理更多图像格式和要求。支持打开、处理和保存多种不同格式的图片文件。

利用 Python 生成 GIF

安装 Pillow

第一步,我们需要先安装 Pillow:

pip install Pillow

生成 GIF

我们生成一张红球往下坠落的 GIF 动图,作为文章示例。

首先,编写一个函数,利用 Pillow 在一张图片上画一个红球。

fromPILimportImage,ImageDraw

defcreate_image_with_ball(width, height, ball_x, ball_y, ball_size):

img = Image.new('RGB', (width, height), (255,255,255))

draw = ImageDraw.Draw(img)

# draw.ellipse takes a 4-tuple (x0, y0, x1, y1) where (x0, y0) is the top-left bound of the box

# and (x1, y1) is the lower-right bound of the box.

draw.ellipse((ball_x, ball_y, ball_x + ball_size, ball_y + ball_size), fill='red')

returnimg

上述代码中,我们使用 Image.new创建了一张 RGB 图片,并设置背景为白色,指定了图片大小。

接着,通过 ImageDraw在图片中的指定参数位置,画了一个红色的圆圈。

所以,我们要做的就是创建多张图片,不断让红球往下坠。

# Create the frames

frames =

x, y = 0,0

foriinrange(10):

new_frame = create_image_with_ball(400,400, x, y,40)

frames.append(new_frame)

x += 40

y += 40

# Save into a GIF file that loops forever

frames[0].save('moving_ball.gif', format='GIF', append_images=frames[1:], save_all=True, duration=100, loop=0)

解释下上面的代码:

  1. 初始化一个空列表 frames,以及 0点坐标xy

  2. 用一个运行十次的 for 循环,每次创建一张 400x400 大小的图片,图片中红球的位置不同

  3. 更改红球的坐标,让红球沿着对角线往下坠

  4. 设置参数 format='GIF'append_images=frames[1:],保存 GIF 图片

    • 每帧图片播放100毫秒( duration=100)

    • GIF图片一直重复循环( loop=0,如果设置为 1,则循环1次,设置为2则循环2次,以此类推)

最终生成的 GIF 图大概是下面这样的:

参考链接:https://blog.zhaytam.com/2018/08/21/creating-gifs-using-python-pillow/

题图:pexels,CC0 授权。

使用pil读取gif图有些位置为黑色_使用 Pillow 快速创建 GIF 动图相关推荐

  1. 怎样裁剪动图的尺寸?教你一招快速裁剪gif动图

    当我遇到下载的gif动图尺寸不合适需要通过裁剪gif图来改变尺寸时,就会使用[GIF中文网]的gif裁剪(https://www.gif.cn/)功能来裁剪动图的大小,非常的简单.最大可上传30m的g ...

  2. 用ffmpeg把gif动图分离成多张图片和ffmpeg多张图片合成gif动图

    用ffmpeg把gif动图分离成多张图片和ffmpeg多张图片合成gif动图(20190214) 文章目录: 一.ffmpeg把gif动图分离成多张图片 二.ffmpeg多张图片合成gif动图 三.把 ...

  3. 百度地图gif图标_华为手机误删照片怎么找回?手机怎么快速制作GIF动图

    对于华为手机,国内的很多人群都是非常喜欢的,特别是哪些花粉们简直就是疯狂,但是当我们使用华为手机误删了照片应该怎么办?如何才能找回误删的照片?误删手机照片怎么找回?不用担心,下面就让我们跟随小编一起来 ...

  4. 如何在Ubuntu 16.04中创建GIF动图

    大 家经常在新浪微薄.QQ.facebook.twitter 中看到有趣的 GIF 动图吧,GIF 文件比视频小.比静态 JPG 图片形像生动,非常适于互联网上的搞笑帖子.产品展示和功能步骤演示,所以 ...

  5. linux中打开gif图片命令,在Linux终端中安装使用Gifski创建GIF动图

    Gifski 是一款跨平台的高质量 GIF 编码器,在 Linux 终端中可以安装及使用 Gifski 来创建高质量的 GIF 动图及使用 Gifski 从视频创建 GIF 动图. Gifski 简介 ...

  6. 怎样快速制作GIF动图?教你一分钟在线制作GIF

    相信有不少新媒体行业的伙伴们在平时写文章的时候,都喜欢在文章中插入好玩的GIF动图来给文章增加趣味.但是当我们想要将自己拍摄制作的图片制作成GIF的时候,应该如何制作gif动图呢?这时候,大家就可以使 ...

  7. 视频怎么变成gif?快速巧妙生成动图的方法介绍

    视频怎么变成gif?很多人看到gif因为它是动图,可能会觉得它是视频格式的一种.其实不然,gif它是一种图像互换格式,它采用的是一种压缩文档的样式,能够有效地减少图片传输的时间.那么我们应该如何制作g ...

  8. 小白怎样快速制作gif动图?图片在线合成gif该如何做?

    想要制作动图,那么对于懂得专业设计的小伙伴来说非常的简单,但是对于不懂设计的人而言,就有点迷茫了.那么,想要快速制作gif动图的话,有什么好方法呢?接下来给大家分享一款在线gif合成(https:// ...

  9. ae导出gif插件_AE脚本-一键快速输出GIF动图格式插件脚本 GifGun 1.7.15 Win/Mac 支持AE 2020...

     [脚本简介] 还记得以前AE能直接输出GIF动画格式,但软件更新到 AE CS5 后就取消了直接输出GIF的功能,其实很多时候还是会用到输出GIF格式的这个格式.GifGun 脚本可以一键输出G ...

最新文章

  1. Visual C++ MFC/ATL开发-高级篇(一)
  2. php rss xml,php – 如何使用simplexml解析RSS中的标记
  3. SqlServer在安装时提示:需要Microsoft.NET Framework 3.5 Service Pack 1 规则失败
  4. 使用animate实现页面过度_很多人都在使用的开源CSS动画效果库——animate.css
  5. mysql5.7.23版本环境配置
  6. Spark Streaming在Spark Web UI上的显示办法
  7. 数据产品-数据可视化大作“数据大屏”
  8. c语言双精度百分号,C语言输出百分号%的方法和示例
  9. ios kvo 要引入_iOS中KVO的使用
  10. CSS基础——盒子模型【学习笔记】
  11. struts2 struts.xml 配置(转载)
  12. 《Thinking in Java》Ten 内部类
  13. 11月6日云栖精选夜读:阿里云双11访谈之云安全
  14. 四、时间 .认知 .迭代
  15. Ubuntu运行坦克大战
  16. python turtle库详解_Python turtle库详解
  17. java生成图表_【JAVA】POI生成EXCEL图表(柱状图、折线等)
  18. 对九个超级程序员的采访
  19. ctf入门——实验吧
  20. 优维助力国内某省级商业银行同城异地灾备自动化建设

热门文章

  1. AI入门:不用任何公式把Embedding讲清楚
  2. 震惊了!每30秒学会一个Python小技巧,Github星数6000+
  3. 图像反光能被一键去除了?港科大开源RFC,仅用一个操作,强反光也能完美去除|CVPR2021
  4. 网易云信荣获2021年度智慧教育典型案例奖项,并入选《智慧教育发展及产业图谱研究报告》...
  5. 视频编解码的理论和实践1:基础知识介绍
  6. WebRTC实时音视频技术基础:基本架构和协议栈
  7. 项望烽:移动 IM 开发之心跳​
  8. MySQL利用存储过程清除所有表中的所有记录
  9. 如何成为一名数据科学家?(二)
  10. Nancy之Forms验证