Loading... - 如果需求量不大,建议使用TinyPNG的API服务进行无损压缩,PIL是有损压缩,压缩后图片清晰度较差 - TinyPNG API 每月前500次压缩是免费的,需要申请API KEY [TinyPNG-Developer API](https://tinypng.com/developers) ## 调用 TinyPNG API ###安装依赖包 ```Bash pip install --upgrade tinify ``` ###导入依赖包 ```Python import tinify ``` ###压缩图片,保存到指定路径 ```Python def compress_image(src_file, dst_file): """使用TinyPNG API压缩图片 :param src_file: 源文件路径 :param dst_file: 输出文件路径 """ tinify.key = "###api key" source = tinify.from_file(src_file) source.to_file(dst_file) ``` ## 使用PIL库 ###安装依赖包 ```Bash pip install --upgrade Pillow ``` ###导入依赖包 ```Python from PIL import Image import os ``` ###获取图片文件的大小:KB ```Python def get_size(file): size = os.path.getsize(file) return size / 1024 ``` ###压缩文件到指定大小 ```Python def compress_image(src_file, dst_file=None, mb=150, step=10, quality=80): """不改变图片尺寸压缩到指定大小 :param src_file: 压缩源文件 :param dst_file: 压缩文件保存地址 :param mb: 压缩目标,KB :param step: 每次调整的压缩比率 :param quality: 初始压缩比率 :return: 压缩文件地址,压缩文件大小 """ if dst_file is None: dst_file = src_file o_size = get_size(src_file) if o_size <= mb: im = Image.open(src_file) im.save(dst_file) while o_size > mb: im = Image.open(src_file) im.save(dst_file, quality=quality) if quality - step < 0: break quality -= step o_size = get_size(dst_file) ``` © Allow specification reprint Like 1 如果觉得我的文章对你有用,请随意赞赏