from PIL import Image
import os
# 获取图片文件大小
def get_size(file):
# 获取文件大小
size = os.path.getsize(file)
return size / 1024
# 拼接输出文件位置
def get_outfile(infile, outfile):
if outfile:
return outfile
dir, suffix = os.path.splitext(infile)
outfile = '{}-out{}'.format(dir, suffix)
print('outfile:', outfile)
return outfile
# 压缩文件到指定大小
def compress_image(infile, outfile='', mb=50, step=10, quality=80):
"""
不改变图片尺寸压缩到指定大小
infile: 压缩源文件
oufile: 压缩文件保存地址
mb: 压缩目标, KB
setp: 每次调整的压缩比率
return: 压缩文件地址, 压缩文件大小
"""
o_size = get_size(infile)
if o_size <= mb:
print('infile:', infile)
return infile
outfile = get_outfile(infile, outfile)
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)
print(get_size(outfile))
return outfile, get_size(outfile)
# 修改图片尺寸, 先修改尺寸, 在压缩大小
def resize_image(infile, outfile='', x_s=1080):
"""
infile: 图片源文件
outfile: 重设尺寸文件保存地址
x_s: 设置的宽度
"""
im = Image.open(infile)
x, y = im.size
y_s = int(y * x_s / x)
out = im.resize((x_s, y_s), Image.ANTIALIAS)
outfile = get_outfile(infile, outfile)
out.save(outfile)
if __name__ == '__main__':
compress_image(r'C:\Users\x_gh\Desktop\1.jpg')
resize_image(r'C:\Users\x_gh\Desktop\1.jpg')
图片压缩
最新推荐文章于 2024-09-15 22:31:42 发布