经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Python » 查看文章
Python实现Gif图片分解的示例代码
来源:jb51  时间:2022/8/16 19:28:21  对本文有异议

在前面做过一个Gif图片合成的小工具,老朋友应该有所印象。但是,近段时间有人反映合成了的Gif图片该如何进行分解呢?

于是,再次了解了一下PIL模块的Image,果真是可以做动图分解的。

1、模块安装

使用PIL库,实际上是来源于pillow库的兼容,因此需要安装pillow非标准库。

  1. pip?install?-i?https://pypi.tuna.tsinghua.edu.cn/simple?pillow

2、模块导入

安装好pillow非标准库之后,将PIL模块中Image图像处理模块导入到代码块中即可。

  1. from?PIL?import?Image

同时,将os系统操作模块导入进来用于对文件夹或文件来进行操作。

  1. import?os

导入一个日志模块loguru来记录日志打印,在之前的文章中也介绍过,由于这个模块导入即用比较方便我们这里直接使用它来打印日志。

  1. from?loguru?import?logger

3、分解动图

这里,我们的目的是将一个Gif图片直接分解成png格式的多个图片。首先对单张动态图片完成分解。

创建一个函数sptGif,来实现对单张Gif图片分解的过程。

  1. def?spt_gif_one(gif_path,?tar_dir,?format="png"):
  2. ????'''
  3. ????分解单张Gif图片
  4. ????:param?gif_path:?Gif?图片路径
  5. ????:param?tar_dir:?分解后的存储路径
  6. ????:param?format:?分解成的图片格式,默认为PNG格式的图片
  7. ????:return:
  8. ????'''
  9. ????gif_file_name?=?os.path.basename(gif_path)
  10. ????logger.info("当前gif动态图片路径:{}".format(gif_file_name))
  11. ????base_name?=?str(gif_file_name).split('.')[0]
  12. ????image?=?Image.open(gif_path)
  13. ????for?n?in?range(image.n_frames):
  14. ????????gen_file_name?=?base_name?+?'_'?+?str(n)
  15. ????????image.seek(n)
  16. ????????image_new?=?Image.new("RGBA",?image.size)
  17. ????????image_new.paste(image)
  18. ????????image_new.save(os.path.join(tar_dir,?"%s.%s"?%?(gen_file_name,?format)))
  19. ????????logger.info('文件名称:{}已生成!'.format(gen_file_name))

4、批量分解

若是在gif图片比较到的情况下,则可以选择批量分解的方式来进行分解。

一般选择将所有需要分解的gif图片直接放在统一的文件夹下面来完成批量分解。实现思路是通过遍历该文件夹下面的所有的gif图片挨个对其完成分解。

  1. def?spt_gif_batch(gif_dir,?tar_dir):
  2. ????'''
  3. ????批量分解Gif动态图片
  4. ????:param?gif_dir:
  5. ????:param?tar_dir:
  6. ????:return:
  7. ????'''
  8. ????if?os.path.isdir(gif_dir):
  9. ????????files?=?os.listdir(gif_dir)
  10. ????????for?file?in?files:
  11. ????????????gif_path?=?os.path.join(gif_dir,?file)
  12. ????????????if?os.path.splitext(gif_path)[1]?in?'.gif':
  13. ????????????????spt_gif_one(gif_path,?tar_dir)
  14. ????????????else:
  15. ????????????????logger.info('{}?文件格式检查不正确!'.format(gif_path))
  16. ????else:
  17. ????????logger.info('{}?文件夹不存在!'.format(gif_dir))

5、生成效果

我调用批量生成的函数spt_gif_batch进行了效果测试。

从Google上面直接下载一张Gif的动态图片,原图是这样的效果。

随后,对其进行了批量分解的执行,os.getcwd()表示生成的图片放在当前的路径下面。

  1. spt_gif_batch(os.getcwd(),?os.getcwd())

控制台这时也按照预期打印出了日志,日志还是比较漂亮的,哈哈~

完成后,总共生成了25张png格式的图片,我下面跳了其中的几张展示出来。

到此这篇关于Python实现Gif图片分解的示例代码的文章就介绍到这了,更多相关Python Gif图片分解内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号