Python将图片批量从png格式转换至WebP格式


Posted in Python onAugust 22, 2020

实现效果

将位于/img目录下的1000张.png图片,转换成.webp格式,并存放于img_webp文件夹内。

Python将图片批量从png格式转换至WebP格式
源图片目录

Python将图片批量从png格式转换至WebP格式
目标图片目录

关于批量生成1000张图片,可以参考这篇文章:利用Python批量生成任意尺寸的图片

实现示例

import glob
import os
import threading

from PIL import Image


def create_image(infile, index):
 os.path.splitext(infile)
 im = Image.open(infile)
 im.save("img_webp/webp_" + str(index) + ".webp", "WEBP")


def start():
 index = 0
 for infile in glob.glob("img/*.png"):
  t = threading.Thread(target=create_image, args=(infile, index,))
  t.start()
  t.join()
  index += 1


if __name__ == "__main__":
 start()

注意:该项目需要引用PIL库。

考虑到是大量的线性密集型运算,因此使用了多线程并发。通过threading.Thread()创建线程对象时注意,args参数仅接受元祖。

在这里,我们使用Image.open()函数打开图像。

最终调用save("img_webp/webp_" + str(index) + ".webp", "WEBP")方法,以指定格式写入指定位置。其中format参数为目标格式。

下面是其他网友的补充

WebP与PNG, JPEG的转换

webp文件是的谷歌制定的文件,编码和解码当然要用谷歌自己提供的工具libwebp,别整那些有的没的的方法。
如果再pc上的浏览器(如Chrome,Edge等)打开微信的推送,爬虫爬取到图片可能就是webp格式的

1、下载对应平台的libwebp

2、解压得到二进制文件,在bin目录下(编程的使用include和lib目录下的文件),以下是以windows 64bit为例,摘自readme.txt。详细的可以使用-h选项查看具体的用法。

path/to/file description
bin/cwebp.exe encoding tool
bin/dwebp.exe decoding tool
bin/gif2webp.exe gif conversion tool
bin/vwebp.exe webp visualization tool
bin/webpinfo.exe webp analysis tool
lib/ static libraries
include/webp headers
test.webp a sample WebP file
test_ref.ppm the test.webp file decoded into the PPM format

3、其他 --> webp: cwebp [-preset <...>] [options] in_file [-o out_file]
4、webp --> 其他: dwebp in_file [options] [-o out_file]

  • 不指明格式默认转成PNG格式
  • webp文件名不能有空格

5、批量转的话那就是脚本的事了,例如Python3脚本批量将webp转png(转换成png后再转成其他格式就很简单了):

import os
import sys

decoder_path = r"path/to/dwebp.exe" # Windows10下其实也支持斜杠/路径
webp_path = r"path/to/webp" # webp文件所在目录,webp文件名不能有空格!
res_path = r"path/to/png_res" # 存储转换后图片的目录,假设是png

if not os.path.exists(res_path) :
  os.mkdir("result")

for f in os.listdir(webp_path):
  res_f = str(f).replace(".webp", ".png") # 若webp文件命名有特殊,这里需要改改映射规则
  cmd = "{0} {1} -o {2}".format(
    decoder_path, os.path.join(webp_path, f), os.path.join(res_path, res_f))
  os.system(cmd)

好了,这篇文章的内容到这就基本结束了,大家都学会了吗?希望对大家的学习和工作能有一定的帮助。

Python 相关文章推荐
python目录操作之python遍历文件夹后将结果存储为xml
Jan 27 Python
Python socket编程实例详解
May 27 Python
python爬虫框架scrapy实战之爬取京东商城进阶篇
Apr 24 Python
Python下载网络文本数据到本地内存的四种实现方法示例
Feb 05 Python
Python 访问限制 private public的详细介绍
Oct 16 Python
python将txt文件读取为字典的示例
Dec 22 Python
Python常见数字运算操作实例小结
Mar 22 Python
Python实现获取系统临时目录及临时文件的方法示例
Jun 26 Python
python调试神器PySnooper的使用
Jul 03 Python
python3 assert 断言的使用详解 (区别于python2)
Nov 27 Python
Python数组拼接np.concatenate实现过程
Apr 18 Python
python游戏开发Pygame框架
Apr 22 Python
利用Python批量生成任意尺寸的图片
Aug 29 #Python
Python自定义类的数组排序实现代码
Aug 28 #Python
Python 基于Twisted框架的文件夹网络传输源码
Aug 28 #Python
Django URL传递参数的方法总结
Aug 28 #Python
python 网络编程常用代码段
Aug 28 #Python
Fabric 应用案例
Aug 28 #Python
Python两个内置函数 locals 和globals(学习笔记)
Aug 28 #Python
You might like
计算2000年01月01日起到指定日的天数
2006/10/09 PHP
PHP添加MySQL数据记录代码
2008/06/07 PHP
php获取URL中带#号等特殊符号参数的解决方法
2014/09/02 PHP
php从完整文件路径中分离文件目录和文件名的方法
2015/03/13 PHP
php检测apache mod_rewrite模块是否安装的方法
2015/03/14 PHP
PHP-FPM和Nginx的通信机制详解
2019/02/01 PHP
PHP PDOStatement::getColumnMeta讲解
2019/02/01 PHP
js输出列表实现代码
2010/09/12 Javascript
js中将具有数字属性名的对象转换为数组
2011/03/06 Javascript
容易被忽略的JS脚本特性
2011/09/13 Javascript
UI Events 用户界面事件
2012/06/27 Javascript
node.js中的fs.statSync方法使用说明
2014/12/16 Javascript
原生js实现返回顶部缓冲效果
2017/01/18 Javascript
分分钟玩转Vue.js组件(二)
2017/03/01 Javascript
JS实现在文本指定位置插入内容的简单示例
2017/12/22 Javascript
在 Angular6 中使用 HTTP 请求服务端数据的步骤详解
2018/08/06 Javascript
[02:20]DOTA2亚洲邀请赛 IG战队出场宣传片
2015/02/07 DOTA
python动态监控日志内容的示例
2014/02/16 Python
Python的Django框架中TEMPLATES项的设置教程
2015/05/29 Python
python3 中文乱码与默认编码格式设定方法
2018/10/31 Python
将python图片转为二进制文本的实例
2019/01/24 Python
解决python执行不输出系统命令弹框的问题
2019/06/24 Python
python抓取多种类型的页面方法实例
2019/11/20 Python
PyCharm无法引用自身项目解决方式
2020/02/12 Python
印度和世界各地的精美产品:Ikka Dukka
2018/02/12 全球购物
人力资源部副职的竞聘演讲稿
2014/01/07 职场文书
大学社团活动策划书
2014/01/26 职场文书
招聘与培训专员岗位职责
2014/01/30 职场文书
银行青年文明号事迹材料
2014/05/31 职场文书
伦敦奥运会的口号
2014/06/21 职场文书
2014年远程教育工作总结
2014/12/09 职场文书
工作失误检讨书
2015/01/26 职场文书
胡桃夹子观后感
2015/06/11 职场文书
2016年学习贯彻十八届五中全会精神心得体会
2016/01/05 职场文书
MySQL 表空间碎片的概念及相关问题解决
2021/05/07 MySQL
Python中glob库实现文件名的匹配
2021/06/18 Python