700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > python --压缩图片不改变图片尺寸

python --压缩图片不改变图片尺寸

时间:2019-03-29 07:03:20

相关推荐

python --压缩图片不改变图片尺寸

方法1

from PIL import Imageimport osdef compress_image(infile, outfile, quality=50):"""压缩图片文件大小:param infile: 原始图片文件:param outfile: 压缩后图片文件:param quality: 压缩质量,默认为50:return: 无"""try:with Image.open(infile) as im:im.save(outfile, quality=quality)except Exception as e:print(f"压缩图片失败:{e}")returnif __name__ == '__main__':infile = 'test.jpg'outfile = 'test_compressed.jpg'compress_image(infile, outfile, quality=50)print(f"压缩前文件大小:{os.path.getsize(infile)}")print(f"压缩后文件大小:{os.path.getsize(outfile)}")

在这个示例中,我们使用了Pillow库中的Image类来打开原始图片文件,然后使用save方法将其保存为压缩后的图片文件。quality参数指定了压缩质量,值越小,压缩后的图片文件大小越小。最后,我们使用os.path.getsize函数来获取压缩前和压缩后的文件大小。

方法2

不改变图片尺寸

from PIL import Imageimport osdef get_size(file):# 获取文件大小:KBsize = os.path.getsize(file)return size / 1024def get_outfile(infile, outfile):if outfile:return outfiledir, suffix = os.path.splitext(infile)outfile = '{}-out{}'.format(dir, suffix)return outfiledef compress_image(infile, outfile='', mb=150, step=10, quality=80):"""不改变图片尺寸压缩到指定大小:param infile: 压缩源文件:param outfile: 压缩文件保存地址:param mb: 压缩目标,KB:param step: 每次调整的压缩比率:param quality: 初始压缩比率:return: 压缩文件地址,压缩文件大小"""o_size = get_size(infile)print(o_size)if o_size <= mb:return infileoutfile = get_outfile(infile, outfile)while o_size > mb:im = Image.open(infile)# 出现 OSError: cannot write mode RGBA as JPEG 错误时加入下方语句im = im.convert("RGB")im.save(outfile, quality=quality)if quality - step < 0:breakquality -= stepo_size = get_size(outfile)return outfile, get_size(outfile)if __name__ == '__main__': print(compress_image(r'C:\Users\Administrator\Desktop\100000.png',r'C:\Users\Administrator\Desktop\888.jpg'))

修改图片尺寸,如果同时有修改尺寸和大小的需要,可以先修改尺寸,再压缩大小

def resize_image(infile, outfile='', x_s=1376):"""修改图片尺寸:param infile: 图片源文件:param outfile: 重设尺寸文件保存地址:param x_s: 设置的宽度:return:"""im = Image.open(infile)x, y = im.sizey_s = int(y * x_s / x)out = im.resize((x_s, y_s), Image.ANTIALIAS)outfile = get_outfile(infile, outfile)out.save(outfile)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。