方式一(推荐)
使用
1 放在project根目录
2 执行脚本
#coding=utf-8
# 遍历目标文件夹内所有的 jpg 图片,转换成 webp 格式,可自行配置压缩比,默认75
# 环境:python 2.7或3.0
# 本脚是基于PIL(Python Imaging Library)基础上实现的,而 Pillow是PIL一个分支,提供更加强大的功能,执行脚本之前需要安装 Pillow 模块
# 执行脚本:**python image2webp.py [option] [arg] ...**
# 以option与arg参数配置脚本:
# -q:图片压缩率, 整形:1-100, 默认:75。例子:python image2webp.py -q 80
# -d:删除原文件,默认不删除。例子python image2webp.py -d
# -h:打印帮助
#
import os
import sys, getopt
from PIL import Image
# 以目标文件夹为起点的输出目录
output_file = '.'
# 目标文件目录
input_file = '.'
# 是否只展示帮助
is_help = False
# 是否删除原文件
is_delete_origin = False
# 压缩率
quality = 75
# 总数(可转成webp的文件总数)
total = 0
# 记录转换成功的个数
count = 0
# 支持处理的图片格式
image_ext = ['.png', '.jpg']
def deleteFile(file):
if not is_delete_origin:
return
try:
os.remove(file)
except (Exception) as e:
print('delete ' + file + ' message:' + e.message)
def convert(file):
global total
global count
# 获取文件名与文件后缀
fname,fext = os.path.splitext(file.split("/")[-1])
# 检测是否为支持的图片格式
if not fext in image_ext:
return
#过滤掉.9图片
if '.9.png' in file:
return
# 如果是png图片,检测是否有透明与半透明区域
if fext == '.png':
try:
im = Image.open(file).convert("RGBA")
alpha = im.split()[-1]
alphadata = list(alpha.getdata())
length = len(alphadata)
for x in range(0, length-1):
a = alphadata[x]
if a < 255:
# 有透明区域,直接跳过此图片
return
except (Exception) as e:
print(e)
path = os.path.split(os.path.abspath(file))[0]
#统计个数
total += 1
try:
im = Image.open(file).convert("RGB")
# 拼接文件名
webpfile = '%s/%s.webp'%(path, fname)
#print(webpfile)
# 获取文件路径
filepath = os.path.dirname(webpfile)
# 若目标文件夹不存在创建
if not os.path.exists(filepath):
os.makedirs(filepath)
# 保存webp格式,指定压缩率
im.save(webpfile, "WEBP", quality = quality)
count +=1
print('convert %s success'%file)
# 根据需要删除原文件,默认不删除
deleteFile(file)
except (Exception) as e:
print(file+' fail: ' + e.message)
def listDir(rootDir):
# 迭代变量文件夹及子文件夹
for lists in os.listdir(rootDir):
pathformat = '%s/%s'
if rootDir == './':
pathformat = '%s%s'
path = os.path.join(pathformat % (rootDir, lists))
if not 'intermediates' in path:
convert(path)
if os.path.isdir(path):
listDir(path)
def handleArguments():
# 获取所有命令
opts, args = getopt.getopt(sys.argv[1:], "hdq:")
global input_file
global output_file
global is_help
global is_delete_origin
global quality
for op, value in opts:
option = op
if op == "-q":
quality = value
# 删除原文件
elif op == "-d":
is_delete_origin = True
elif op == "-h":
is_help = True
print("\
usage: python jpg2webp.py [option] [arg] ...\n\
Options and arguments (and corresponding environment variables): \n\
-q: image quality, Integer:1-100, Defaults to 75. \n\
-d: delete origin image file\n\
-h: print this help message")
if __name__ == '__main__':
handleArguments()
if not is_help:
print('quality is %d, start...'%quality)
listDir(input_file)
print('finish! total:%d, success:%d' % (total,count))
方式二
import glob
import os
import threading
from PIL import Image
def create_image(infile, index):
file_name, extension_name = os.path.splitext(infile)
im = Image.open(infile)
im.save("img_webp/" + file_name.split('/')[1] + ".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()
WeChat11401230be365979323fbdcffe5bbedd.png
PIL找不到
pip3 install Pillow
使用
1 创建img、img_webp统一目录
2 同级目录下执行脚本
python3 png2webp.py
网友评论