首页 > 编程语言 >Python高保真高压缩图片

Python高保真高压缩图片

时间:2023-08-22 19:11:33浏览次数:27  
标签:高保真 img Python pic cv2 高压缩 np byte size

'''
pip install numpy
pip install opencv-python
'''
from io import BytesIO

import cv2
import numpy as np


def pic_compress(pic_path, out_path, target_size=199, quality=90, step=5, pic_type='.jpg'):
    # 读取图片bytes
    with open(pic_path, 'rb') as f:
        pic_byte = f.read()

    img_np = np.frombuffer(pic_byte, np.uint8)
    img_cv = cv2.imdecode(img_np, cv2.IMREAD_ANYCOLOR)

    current_size = len(pic_byte) / 1024
    print("图片压缩前的大小为(KB):", current_size)
    while current_size > target_size:
        pic_byte = cv2.imencode(pic_type, img_cv, [int(cv2.IMWRITE_JPEG_QUALITY), quality])[1]
        if quality - step < 0:
            break
        quality -= step
        current_size = len(pic_byte) / 1024

    # 保存图片
    with open(out_path, 'wb') as f:
        f.write(BytesIO(pic_byte).getvalue())

    return len(pic_byte) / 1024


def main():
    pic_size = pic_compress('img.png', '01new_test.jpg', target_size=100)
    print("图片压缩后的大小为(KB):", pic_size)


if __name__ == '__main__':
    main()

 

标签:高保真,img,Python,pic,cv2,高压缩,np,byte,size
From: https://www.cnblogs.com/zwnsyw/p/17649448.html

相关文章

  • python · SQL | MySQL 配置与 python 连接数据库
    来存档一下搞sql的过程,方便以后查阅。安装与配置mysqlserver:https://blog.csdn.net/zhende_lan/article/details/129318514在同一个网页下载mysqlworkbench(数据库可视化);打开workbench,新建一些表,用来测试:https://zhuanlan.zhihu.com/p/260139380python连接sql的代......
  • 使用 Python ssh 远程登陆服务器的最佳方案
    在使用Python写一些脚本的时候,在某些情况下,我们需要频繁登陆远程服务去执行一次命令,并返回一些结果。在shell环境中,我们是这样子做的。sshpass-p${passwd}ssh-p${port}-l${user}-oStrictHostKeyChecking=noxx.xx.xx.xx"ls-l"然后你会发现,你的输出有很多你并不......
  • Python学习日记 2023年8月22日
    importglobimportargparseimportcv2importnumpyfromtqdmimporttqdmfromitertoolsimportproductdefparsArgs():parser=argparse.ArgumentParser('拼接马赛克图片')parser.add_argument('--targetpath',type=str,default='3.jp......
  • python新手小白 初入 第一节
    建议:先基础,后入门常用功能:如何书写标题:六级标题(1~6)  1.几个警号就是代表几级标题例如##########2.ctrl+0可让标题回到普通文本状态。3.快捷键方式:ctrl+数字#数字是几就是几级标题如何书写无序标题1.*加空格 快捷键ctrl+shift+]2.连续按两下回车键退出无序标题如何......
  • python中的类型转换
    int(x[,base])将x转换为一个整数long(x[,base])将x转换为一个长整数float(x)将x转换到一个浮点数complex(real[,imag])创建一个复数str(x)将对象x转换为字符串repr(x)将对象x转换为表达式字符串eval(str)用来计算在字符串中的有效Python表达式,并返回一个对象t......
  • Python工具箱系列(四十)
    使用gzip对数据进行压缩这是python提供的压缩模块,便于用户对数据、文件进行压缩。功能类似于GNU应用程序gzip和gunzip。以下代码压缩一段字节流。importgzip#压缩一段英文originstr='TheWorldHealthOrganizationofficiallydeclaredonSaturdaythatthecurrentmul......
  • python 使用re模块,配合正则表达式来查找字符串的想要的字符串
    一,首先:我们现了解一下python中正则表达式的基本规则有那些?1,字符串"\d"匹配0~9之间的一个数值eg:'dsas212b321321'使用r'\d'结果:(它会一次匹配一个数字依次查找)212321321  2,字符"+"重复前面一个匹配字符一次或者多次eg:'dsas212b321321'方式1:使用r'\d+'结果:(......
  • Python工具箱系列(四十)
    使用gzip对数据进行压缩这是python提供的压缩模块,便于用户对数据、文件进行压缩。功能类似于GNU应用程序gzip和gunzip。以下代码压缩一段字节流。importgzip#压缩一段英文originstr='TheWorldHealthOrganizationofficiallydeclaredonSaturdaythatthecurrent......
  • 全网最不墨迹解决方法,使用python3 worksheet.save()方式 出现:Test_list.worksheet.save(
    这是因为Worksheet对象没有save方法。要保存Excel工作簿,你需要使用Workbook对象的save方法。下面是一个修正后的示例代码:fromopenpyxlimportWorkbook#创建一个工作簿workbook=Workbook()#选择默认的活动工作表worksheet=workbook.active#定义要写入的数据列......
  • python实现"对修改封闭, 对扩展开放"
    对修改封闭,对扩展开放是架构设计的基本原则.意思是如果程序增加新的功能,则不应该修改老的代码,只需要增加新的代码就可以了,这样可以避免对老功能的破坏,新增功能如果有问题,也很容易回退.python语言如何实现这个设计目标呢?可以使用我们之前提到的消息机制来实现:pyt......