首页 > 编程语言 >python | 使用PIL压缩图片并使用字节流输出

python | 使用PIL压缩图片并使用字节流输出

时间:2023-02-23 19:47:17浏览次数:36  
标签:PIL 字节 python 压缩 param out quality size

python | 使用PIL压缩图片并使用字节流输出

因为自己服务器上的博客流量比较小,所以加了这个用来压缩图片,不改变图片大小,将图像质量降低。

直接丢代码了:

import os
from io import BytesIO
from PIL import Image
# 压缩图片函数,减轻网络压力
def compress_image(infile, mb=500, step=10, quality=80):
	"""不改变图片尺寸压缩到指定大小
	:param infile: 压缩源文件
	:param mb: 压缩目标,KB
	:param step: 每次调整的压缩比率
	:param quality: 初始压缩比率
	:return: 压缩文件字节流
	"""
	o_size = os.path.getsize(infile) / 1024
	# print(f'  > 原始大小:{o_size}')
	if o_size <= mb:
		with open(infile, 'rb') as f:
			content = f.read()
		return content      # 大小满足要求,直接返回字节流
		
	im = Image.open(infile)
	im = im.convert("RGB")      # 兼容处理png和jpg
	
	while o_size > mb:
		out = BytesIO()
		im.save(out, format="JPEG", quality=quality)
		if quality - step < 0:
			break
		_imgbytes = out.getvalue()
		o_size = len(_imgbytes) / 1024
		out.close()   # 销毁对象
		# print(f'  > 压缩至大小:{o_size} quality: {quality}')
		quality -= step   # 质量递减
	return _imgbytes


标签:PIL,字节,python,压缩,param,out,quality,size
From: https://www.cnblogs.com/Mz1-rc/p/17149155.html

相关文章

  • python基础知识100题-面试
    1、一行代码实现1--100之和#利用sum()函数求和#res=sum(range(1,101))#print(res)#50502、如何在一个函数内部修改全局变量#利用global修改全局变量'''a=......
  • 离线安装python第三方库
    有些公司,特别是一些大公司,对于网络安全这一块非常重视。上班用的电脑,系统都是公司标装系统,访问外网有很多限制,甚至只允许访问内网环境,不允许直接访问外网环境。这就导致我......
  • Python之通用装饰器的使用
    1.装饰带有参数的函数#添加输出日志的功能deflogging(fn):definner(num1,num2):print("--正在努力计算--")fn(num1,num2)returninner#使用......
  • python 操作 ES 一、基础操作
    示例代码环境python:3.8es:7.8.0环境安装pipinstallelasticsearch==7.8.0fromelasticsearchimportElasticsearch#1、创建ES对象,创建连接es=Elasticsearch(......
  • python 操作 ES 二、mappings
    环境python:3.8es:7.8.0环境安装pipinstallelasticsearch==7.8.0  fromelasticsearchimportElasticsearch#环境python:3.8es:7.8.0#环境安装#pipinstal......
  • python next() iter()使用
    说明:next()、iter()这两个函数一般配套使用。下面先介绍用法,后说明用途。用法:iter(object):生成可迭代对象的迭代器;object必须是可迭代对象,比如list、tuple、dict等;next(i......
  • Python字典 values() 方法
    ​​dict.keys()​​​、dict.values()和 ​​dict.items()​​ 返回的都是视图对象(viewobjects),提供了字典实体的动态视图,这就意味着字典改变,视图也会跟着变化。视图对......
  • adaboost方法步骤和python实现捏
    标准AdaBoost算法只适用于二分类任务AdaBoost(AdaptiveBoosting)是一种常用的集成学习算法,用于提高分类器的准确性。其基本思想是根据训练数据的分类情况调整分类器权重,从......
  • python爬虫篇1:爬妹子图片
    爬虫学习伊始,参考网上素材,自己写出来的,比较简单:主要运用了request爬取,正则表达式解析importrequestsimportreimportosfromurllibimporterrordefmain():dirPath=......
  • Python的八个实用脚本,需要的赶紧码住
    脚本写的好,下班下得早!程序员的日常工作除了编写程序代码,还不可避免地需要处理相关的测试和验证工作。例如,访问某个网站一直不通,需要确定此地址是否可访问,服务器返回什么,进......