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

news2024/9/24 18:05:08

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 Image


def 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 tqdm


def 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 tqdm


def 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.coloradmin.cn/o/1483293.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【深度学习笔记】5_4 池化层

注:本文为《动手学深度学习》开源内容,部分标注了个人理解,仅为个人学习记录,无抄袭搬运意图 5.4 池化层 回忆一下,在5.1节(二维卷积层)里介绍的图像物体边缘检测应用中,我们构造卷…

python 使用curl_cffi 绕过jax3指纹-Cloudflare 5s盾

现在越来越多的网站已经能够通过JA3或者其他指纹信息,来识别你是不是爬虫了。传统的方式比如换UA,加代理是没有任何意义了,所以这个时候我们就需要使用到curl_cffi 了。 1.TLS 指纹是啥? 在绝大多数的网站都已经使用了 HTTPS&am…

【YOLO v5 v7 v8 小目标改进】ODConv:在卷积核所有维度(数量、空间、输入、输出)上应用注意力机制来优化传统动态卷积

ODConv:在卷积核所有维度(数量、空间、输入、输出)上应用注意力机制来优化传统的动态卷积 提出背景传统动态卷积全维动态卷积效果 小目标涨点YOLO v5 魔改YOLO v7 魔改YOLO v8 魔改 论文:https://openreview.net/pdf?idDmpCfq6Mg…

电商小程序10分类管理

目录 1 分类数据源2 搭建功能3 创建变量读取数据4 绑定数据总结 本篇我们介绍一下电商小程序的分类管理功能的开发,先看我们的原型图: 在首页我们是展示了四个分类的内容,采用上边是图标,下边是文字的形式。使用低代码开发&#…

Redis大数据统计

文章目录 一. 相关面试题1. 面试题一2. 面试题二 二. 统计的类型1. 聚合统计2. 排序统计3. 二值统计4. 基数统计 三. Hyperloglog1. 专业名词2. Hyperloglog使用3. Hyperloglog原理4. Hyperloglog案例 四. GEO1. 面试题2. GEO使用3. GEO案例 五. BitMap1. 面试题2. BitMap使用 …

Java+SpringBoot+Vue:招生宣传的全栈解决方案

✍✍计算机毕业编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java、…

《汇编语言》- 读书笔记 - 第13章-int 指令

《汇编语言》- 读书笔记 - 第13章-int 指令 13.1 int 指令13.2 编写供应用程序调用的中断例程中断例程:求一 word 型数据的平方主程序中断处理程序执行效果 中断例程:将一个全是字母,以0结尾的字符串,转化为大写主程序中断处理程序…

中央处理器CPU中的技术

1 知识加油站 1.1 cpu 指令的执行过程 取指:cpu 获取 程序计数器 中存放的指令地址。读取内存中此地址对应指令并存入指令寄存器译码:指令译码器,解析指令运行:算数逻辑单元计算回写:将执行结果写入对应位置 2. cpu…

如何使用ShellSweep检测特定目录中潜在的webshell文件

关于ShellSweep ShellSweep是一款功能强大的webshell检测工具,该工具使用了PowerShell、Python和Lua语言进行开发,可以帮助广大研究人员在特定目录中检测潜在的webshell文件。 ShellSweep由多个脚本模块组成,能够通过计算文件内容的熵来评估…

xsslabs第四关

测试 "onclick"alert(1) 这与第三关的代码是一样的&#xff0c;但是每一关考的点是不一样的所以我们看一下源代码 <!DOCTYPE html><!--STATUS OK--><html> <head> <meta http-equiv"content-type" content"text/html;ch…

C++string类讲解

大家好鸭 见字如面&#xff0c;已经有好久没有写文章了&#xff0c;这段时间忙着学习&#xff0c;也忙着玩&#xff0c;所以停更了一段时间 今天让我们来谈一谈关于C中的string类 什么是string类&#xff1f; 在c语言中我们操作字符串往往采用指针&#xff0c;这样的访问方式并…

不看后悔的腾讯云优惠券领取入口指南,2024最新代金券

腾讯云代金券领取渠道有哪些&#xff1f;腾讯云官网可以领取、官方媒体账号可以领取代金券、完成任务可以领取代金券&#xff0c;大家也可以在腾讯云百科蹲守代金券&#xff0c;因为腾讯云代金券领取渠道比较分散&#xff0c;腾讯云百科txybk.com专注汇总优惠代金券领取页面&am…

二级医院云HIS系统,云HIS源码,支持分院HIS,集团HIS

云HIS具有可扩展、易共享、易协同、低成本、体验号、更便捷、易维护的优势&#xff0c;重新定义了数字化医院信息系统&#xff0c;实现数字化医院信息系统的转型升级。云 HIS 系统功能完善&#xff0c;涵盖临床各业务部门&#xff0c;采集、抽提、汇总、存贮、展现所有的临床诊…

FL Studio 21.2.3.3586 for Mac中文版新功能介绍及2024年最新更新日志

如果你正计划学习音乐制作&#xff0c;一款强大且易学的音乐制作软件是必不可少的。由于很多小伙伴对音乐制作软件没有实际体验过&#xff0c;到底选择哪一款软件最合适成为当下最纠结的问题。 这里为大家推荐一款功能强大且适合新手小伙伴的音乐编曲软件—FL Studio 21.2.3.35…

[物联网] OneNet 多协议TCP透传

[物联网] OneNet 多协议TCP透传 STM32物联网–ONENET云平台的多协议接入产品创建 : https://blog.csdn.net/qq_44942724/article/details/134492924 Onenet tcp 透传 : https://blog.csdn.net/flyme2010/article/details/107086001 tcp服务端测试工具 : http://tcp.xnkiot.com/…

解决导入项目后在idea中不显示的问题

问题&#xff1a; 今天下午重新打开寒假之前负责的项目&#xff0c;发现打不开了&#xff0c; 从master拉取最新代码到我的分支&#xff0c;发现我的分支上显示就是这样子&#xff0c;无论怎么更新代码都不行。 原因&#xff1a; 在上一次上传代码的时候&#xff0c;我把我分…

YOLOv9改进|使用AKConv改进RepNCSPELAN4

专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;主力高效涨点&#xff01;&#xff01;&#xff01; 一、改进点介绍 AKConv是一种具有任意数量的参数和任意采样形状的可变卷积核&#xff0c;对不规则特征有更好的提取效果。 RepNCSPELAN4是YOLOv9中的…

JAVA的学习日记

JAVA的学习日记&#xff08;2024.3.1&#xff09;&#xff08;b站韩顺平老师课程学习笔记版&#xff09; ps:捡起忘光光的Java语言 Sublime //1. public是公有&#xff0c;class是类 //2. public class Hello表示Hello是一个类&#xff0c;是一个public公有的类 //3. Hello{…

【框架】MyBatis 框架重点解析

MyBatis 框架重点解析 1. MyBatis 执行流程 会话工厂生产的 SqlSession 对象提供了对数据库执行SQL命令所需的所有方法&#xff0c;包括但不限于以下功能&#xff1a; 数据库操作&#xff1a;SqlSession可以执行查询&#xff08;select&#xff09;、插入&#xff08;insert&a…

桥接模式(Bridge Pattern) C++

上一节&#xff1a;适配器模式&#xff08;Adapter Pattern&#xff09; C 文章目录 0.理论1.组件2.使用场景 1.实践 0.理论 桥接模式&#xff08;Bridge Pattern&#xff09;是一种结构型设计模式&#xff0c;它的核心思想是将抽象部分与其实现部分分离&#xff0c;使它们可…