话不多说,看代码,欢迎评论指点!
#这种压缩方法会改变图片的尺寸,我也在寻找一种能够不改变尺寸压缩的方法
#参考链接:
#https://blog.csdn.net/foxqz/article/details/100008721?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-10.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-10.nonecase
#导入压缩图片需要用到的库
import os
from PIL import Image
#开始的文件路径
infile='D69T8VAS0$SW4}6]W4MB%DD.png'
#保存后的路径
outfile='E:\\Desktop\\tu_pian\\xia_g.png'
#指定大小
mb=input('请输入大小(kb):')
mb=int(mb)
# 为了实现能够将图片压缩到指定大小,需要对原图片和压缩后的图片的大小做出判断
#先进行一次压缩,不满足条件的话再调用函数循环压缩
if os.path.getsize(infile)/1024>mb:
im = Image.open(infile)
w, h = im.size
w, h = round(w * 0.8), round(h * 0.8)
im = im.resize((w, h), Image.ANTIALIAS)
im.save(outfile, quality=85)
else:
print('图片比指定的大小还小,不需要压缩!')
exit()
def compression(outfile,mb,step=10,quality=85):
# quality: 初始压缩比率,描述压缩文件的效果名,是文件压缩后的大小与压缩前的大小之比,例如:把100m的文件压缩后是90m,
# 压缩率为90/100*100%=90%,压缩率一般是越小越好,但是压得越小,解压时间越长
# 先进行判断,目标文件比指定的大小更大时再进行压缩,如果压缩后的图片依然比指定的大小大,循环压缩,直到达到要求为止
while os.path.getsize(outfile)/1024>mb:
#打开图片
im = Image.open(outfile)
#获取图片的宽度和高度
w,h=im.size
#改变高度和宽度
w,h=round(w*0.8),round(h*0.8)
#Image.ANTIALIAS是选择高质量缩放滤镜
im=im.resize((w,h),Image.ANTIALIAS)
#修改之后进行保存
im.save(outfile,quality=quality)
print('压缩完成!')
#经过一次压缩后,若不满足条件,继续调用函数循环压缩
if os.path.getsize(outfile)/1024>mb:
compression(outfile,mb)
else:
print('压缩已完成!')
注:这些代码是我综合了两个博主后得来的。附上两个博主的链接。
1、https://www.cnblogs.com/li1992/p/10675769.html
2、https://blog.csdn.net/foxqz/article/details/100008721?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-10.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-10.nonecase