事情起因:
本人是一名测试,单位里的测试时不时要测试上传图片的大小边界值,每次找图片都很不方便,所以我想自己写个python脚本去实现它。
事情经过:
经过不断百度+csdn,发现也有不少前辈有着类似的需求,也有做了类似的脚本,用的pillow库,思路是通过循环另存一张图片,如果另存后大小不符合自己的要求,就把压缩比率(参数为quality)降低再保存,思路挺好的,效果也有,但似乎不太稳定,我copy脚本玩了一会,发现只支持jpg格式,像png,bmp好像是什么无损格式,不支持这样的压缩,用5M的图片测试是成功的,换成一张15M的图片就失败了,不知道为什么。
事情结果:
我自己在这个基础上,用同样的思路,换了一种方法,不通过压缩比率,通过循环降低分辨率的方法去实现,测试结果良好,比通过压缩比率的稳定,无论是png格式还是15M的大图片都支持。目前已经打包成了exe程序在用,后续有没有其他问题,暂且还不清楚。
import os
from PIL import Image
def get_size(file):
# 获取文件大小:KB
size = os.path.getsize(file)
return int(size / 1024)
def get_outfile(file):
file_name, file_suffix = os.path.splitext(file)
outfile = '{}(压缩后){}'.format(file_name, file_suffix)
return outfile
def compress_image(infile, target_size):
"""
:param infile: 压缩源文件路径
:param target_size: 压缩到目标大小
"""
if '\\' not in i