Python 实现图片大小压缩

起因

截图组件配合验证码使用优化建议
既然没人帮忙解决只能自己动手了

小白先直接献上代码

from PIL import Image
import os
def compress_image(infile, outfile='', mb=150, step=10, quality=80):
    """不改变图片尺寸压缩到指定大小
    :param infile: 压缩源文件
    :param outfile: 压缩文件保存地址
    :param mb: 压缩目标,KB
    :param step: 每次调整的压缩比率
    :param quality: 初始压缩比率
    :return: 压缩文件地址,压缩文件大小
    """
    o_size  = os.path.getsize(infile)/1024
    if o_size <= mb:
        return infile
    if not outfile:
        dir, suffix = os.path.splitext(infile)
        outfile = '{}-out{}'.format(dir, suffix)
    while o_size > mb:
        im = Image.open(infile)
        im.save(outfile, quality=quality)
        if quality - step < 0:
            break
        quality -= step
        o_size = get_size(outfile)
    return outfile, get_size(outfile)

调用函数执行

Python 实现图片大小压缩

查看压缩效果

查看大小

Python 实现图片大小压缩

压缩前

Python 实现图片大小压缩

压缩后

Python 实现图片大小压缩

当然我这里的选择的图片本来也不大,验证码组件最大识别 200K, 这里将 mb 参数调整到 200 就能解决问题了。