使用说明:
在开发过程中,碰到图片太大,加载缓慢的问题,需要将图片格式转换为webg,在此使用python的Pillow包进行处理,使用下面命令安装Pillow,注意P为大写
pip install Pillow
如果安装失败,可以选择访问,手动下载安装
> https://pypi.org/project/Pillow/
将该代码使用python编辑器打开,放置到指定路径下即可完成该路径及其子文件夹下的所有指定格式图片的转换,格式包括png、JPEG、jpg。
# -*- coding : utf-8-*-
# coding:utf-8
"""
@root: 当前目录路径,以及目录下的子文件名
@dirs: 目录下的子文件夹名
@files:所有目录下的文件名,迭代的方式取出子文件夹下的所有文件的文件名
@file_name: 文件名,不包括后缀
@file_type:文件后缀,即文件类型
@file_path:文件全路径名
@save_path:文件存储目标路径,包括文件名.webp
"""
import os
from PIL import Image
# 获取当前路径
dir_path = os.path.dirname(os.path.abspath(__file__))
# 遍历目录下的所有文件和子目录
for root, dirs, files in os.walk(dir_path):
# 遍历当前目录下的所有文件
for file in files:
file_name = os.path.basename(file).split('.')[0]
file_type = os.path.basename(file).split('.')[1]
file_path = os.path.join(root, file)
save_path = os.path.join(root) + '\\' + file_name + '.webp'
# if (file_type == 'svg') | (file_type == 'gif') | (file_type == 'webp') | (file_name == 'png2webp'):
# continue
if (file_type == 'png') | (file_type == 'jpg') | (file_type == 'webp') | (file_type == 'jpeg'):
try:
with Image.open(file_path) as im:
# 转换为WebP格式并保存
im.save(save_path, 'webp')
print(f"Convert File to Webp:{save_path}")
except:
print("只支持png,jpg,webp,jpeg格式!")
对于svg等其他格式的图片,需要使用python将其处理成为png格式,然后再使用Pillow包进行转换。
处理python的CairoSVG包,示例代码:
import cairosvg
svg_path = '/path/to/myfile.svg'
png_path = '/path/to/myfile.png'
cairosvg.svg2png(url=svg_path, write_to=png_path)
Tips:
Windows在import cairosvg处如果出现OSError: no library called “cairo-2” was found ,
请点击OSError: no library called “cairo-2” was found
完整代码如下:
import os
import cairosvg
# 获取当前路径
dir_path = os.path.dirname(os.path.abspath(__file__))
# 遍历目录下的所有文件和子目录
for root, dirs, files in os.walk(dir_path):
# 遍历当前目录下的所有文件
for file in files:
file_name = os.path.basename(file).split('.')[0]
file_type = os.path.basename(file).split('.')[1]
file_path = os.path.join(root, file)
png_path = os.path.join(root) + '\\' + file_name + '.png'
# if (file_type == 'svg') | (file_type == 'gif') | (file_type == 'webp') | (file_name == 'png2webp'):
# continue
if file_type == 'svg':
try:
cairosvg.svg2png(url=file_path, write_to=png_path)
except Exception as e:
print(e)
finally:
print(f"转换完成:{png_path}")