Mac python3 批量转换png为webp

方式一(推荐)

使用

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

你可能感兴趣的:(Mac python3 批量转换png为webp)