PYTHON 自动化办公:压缩图片(PIL)

1、介绍

在办公还是学习过程中,难免会遇到上传照片的问题。然而照片的大小限制一直都是个问题,例如照片限制在200Kb之内,虽然有很多图像压缩技术可以实现,但从图像处理的专业来说,可以利用代码实现

这里使用的库函数是python的PIL库(Pillow),pillow安装命令如下

pip install pillow

这里使用PIL.Image.save()方法内部使用压缩算法对图片进行的压缩处理。

form PIL import Image
img = Image.open("demo.jpg")
img.save(img_name, quality=95)

quality参数: 保存图像的质量,值的范围从1(最差)到95(最佳), 默认值为75。

值如果高于100,会禁用部分JPEG压缩算法,并导致大文件图像质量几乎没有任何增益。

提示:subsampling参数:子采样,通过实现色度信息的分辨率低于亮度信息来对图像进行编码的实践。可以配合quality使用,具体实现可以自己上网查询

2、压缩单张图片

代码如下:因为保存需要文件名,不同的图片后缀啊、名称啊各不相同,这里简单提供了一个,也可以直接在img.save 里面自己指定

from PIL import Imagedef main(img_path):ret_path = img_path.split('.jpg')[0]        # .jpg 根据后缀更改ret_path = ret_path + '_result.jpg'         # 返回的图片名img = Image.open(img_path)img.save(ret_path,quality=15)if __name__ == '__main__':root = 'test.jpg'         # 传入图片的路径main(img_path=root)

效果展示:

一般quailty 值放到30-45就差不多了,图片质量看不出啥区别

3、多张图片压缩(单个文件夹)

如果压缩多张图片的话,直接把图片放在同一个文件夹目录下即可

这里的测试代码(demo.py)测试文件夹(demo)在同一级路径,或者指定路径也行

代码差不多,这里不介绍,直接展示了:

这里会返回新的目录,不会改变图片的文件名或者后置

如果不满意压缩结果,这样多次运行程序,会自动将之前的结果替换

from PIL import Image
import os
from tqdm import tqdmdef main(folder_path):ret_folder_path = folder_path + '_ret'              # 返回父目录if not os.path.exists(ret_folder_path):             # 建立目录os.makedirs(ret_folder_path)img_path= [i for i in os.listdir(folder_path)]      # 所有图片路径for i in tqdm(img_path):img = os.path.join(folder_path,i)img = Image.open(img)                   # 打开图片img.save(os.path.join(ret_folder_path,i),quality=15)if __name__ == '__main__':root = './demo'             # 多个图片的父目录main(folder_path=root)

运行过程:

结果:

这里的图片肉眼看不出区别,就不展示了

4、 多个文件夹的图片压缩

如果有多个文件夹,每个文件夹下都有图片的话,可以新建个父目录,将所有文件夹放进去

代码类似的,这里直接展示:

这里会返回新的目录,不会改变子文件夹的名称或者图片的名称和后缀

如果不满意压缩结果,需要将返回的父目录删除,否则会报错!!!

from PIL import Image
import os
from tqdm import tqdmdef main(folder_path):ret_folder_path = folder_path + '_ret'  # 返回父目录if not os.path.exists(ret_folder_path):  # 建立目录os.makedirs(ret_folder_path)sub_folder_path= [i for i in os.listdir(folder_path)]       # 次级目录for i in sub_folder_path:           # 遍历次级目录os.makedirs(os.path.join(ret_folder_path,i))    # 建立子目录for j in tqdm(os.listdir(os.path.join(folder_path,i)),desc=i):       # 遍历当前次级目录的所有图片img_path = os.path.join(folder_path,i,j)            # 图片路径img = Image.open(img_path)img.save(os.path.join(ret_folder_path,i,j),quality=15)if __name__ == '__main__':root = './demo'             # 父目录main(folder_path=root)

运行过程:

结果:

压缩的图片和之前的看不出啥区别,就不展示了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/504056.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于正态分布的序列选择策略及其在因果关系和平衡定律中的应用

题目:基于正态分布的序列选择策略及其在因果关系和平衡定律中的应用 摘要: 本文提出了一种基于正态分布的序列选择策略,并将其应用于因果关系和平衡定律的研究中。通过对一个长度为1000的序列进行随机打乱,并选择使序列的方差和均…

1.亿级积分数据分库分表:总体方案设计

项目背景 以一个积分系统为例,积分系统最核心的有积分账户表和积分明细表: 积分账户表:每个用户在一个品牌下有一个积分账户记录,记录了用户的积分余额,数据量在千万级积分明细表:用户每次积分发放、积分扣…

【leetcode】 剑指 Offer学习计划(java版本含注释)(下)

目录 前言第十六天(排序)剑指 Offer 45. 把数组排成最小的数(中等)剑指 Offer 61. 扑克牌中的顺子(简单) 第十七天(排序)剑指 Offer 40. 最小的k个数(简单) 第…

Redis 之五:Redis 的主从复制

概念 主从复制,是指将一台 Redis 服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。 默认情况下,每台Redis服务器都是主节…

Pytorch中张量的高级选择操作

在某些情况下,我们需要用Pytorch做一些高级的索引/选择,所以在这篇文章中,我们将介绍这类任务的三种最常见的方法:torch.index_select, torch.gather and torch.take 我们首先从一个2D示例开始,并将选择结果可视化&am…

日志到filebeat-->logstash-->elastic-->kibana

1、日志到filebeat。 cat /etc/filebeat/filebeat.yml filebeat.inputs: - type: syslog format: rfc3164 protocol.udp: host: "0.0.0.0:514" output.logstash: hosts: ["localhost:5044"] 验证方式: tcpdump -i 网卡名称 udp port 514 2、…

跨境知识分享:什么是动态IP?和静态IP有什么区别?

对于我们跨境人来说,清楚地了解IP地址、代理IP等这些基础知识,并学会正确地使用IP地址对于保障店铺的安全性和稳定性至关重要,尤其是理解动态IP和静态IP之间的区别,以及如何利用这些知识来防止账号关联,对于每个电商卖…

计算机网络(2)-----数据链路层

目录 一.数据链路层的基本概念 二.数据链路层的功能概述 功能一:为网络层提供服务。无确认无连接服务,有确认无连接服务,有确认面向连接服务。 功能二:链路管理,即连接的建立、维持、释放(用于面向连接的服务)。 功能三:组帧 透明传输:…

【LeetCode:2368. 受限条件下可到达节点的数目 + BFS】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

MBR20100FCT-ASEMI适配开关电源MBR20100FCT

编辑:ll MBR20100FCT-ASEMI适配开关电源MBR20100FCT 型号:MBR20100FCT 品牌:ASEMI 封装:ITO-220AB 最大平均正向电流(IF):20A 最大循环峰值反向电压(VRRM)&#xf…

stm32学习笔记:IIC通信(未完)

概述 第一块:介绍协议规则,然后用软件模拟的形式来实现协议。 第二块:介绍STM32的iic外设,然后用硬件来实现协议。 程序一现象:通过软件I2C通信,对MPU6050芯片内部的寄存器进行读写,写入到配…

界面控件DevExpress .NET MAUI v23.2新版亮点 - 拥有全新的彩色主题

DevExpress拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。屡获大奖的软件开发平台DevExpress 今年第一个重要版本v23.1正式发布,该版本拥有众多…