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

python不改变图片尺寸压缩到指定大小

时间:2019-07-05 16:20:47

相关推荐

python不改变图片尺寸压缩到指定大小

python不改变图片尺寸压缩到指定大小

import base64import ioimport osfrom PIL import Imagefrom PIL import ImageFile# 压缩图片文件def compress_image(outfile, mb=190, quality=85, k=0.9):"""不改变图片尺寸压缩到指定大小:param outfile: 压缩文件保存地址:param mb: 压缩目标,KB:param step: 每次调整的压缩比率:param quality: 初始压缩比率:return: 压缩文件地址,压缩文件大小"""o_size = os.path.getsize(outfile) // 1024print(o_size, mb)if o_size <= mb:return outfileImageFile.LOAD_TRUNCATED_IMAGES = Truewhile o_size > mb:im = Image.open(outfile)x, y = im.sizeout = im.resize((int(x*k), int(y*k)), Image.ANTIALIAS)try:out.save(outfile, quality=quality)except Exception as e:print(e)breako_size = os.path.getsize(outfile) // 1024return outfile# 压缩base64的图片def compress_image_bs4(b64, mb=190, k=0.9):"""不改变图片尺寸压缩到指定大小:param outfile: 压缩文件保存地址:param mb: 压缩目标,KB:param step: 每次调整的压缩比率:param quality: 初始压缩比率:return: 压缩文件地址,压缩文件大小"""f = base64.b64decode(b64)with io.BytesIO(f) as im:o_size = len(im.getvalue()) // 1024if o_size <= mb:return b64im_out = imwhile o_size > mb:img = Image.open(im_out)x, y = img.sizeout = img.resize((int(x*k), int(y*k)), Image.ANTIALIAS)im_out.close()im_out = io.BytesIO()out.save(im_out, 'jpeg')o_size = len(im_out.getvalue()) // 1024b64 = base64.b64encode(im_out.getvalue())im_out.close()return str(b64, encoding='utf8')

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