Python3,3行代码,我把120M图片压缩到40M,从此再也不怕图片上传限制了。

news/2024/7/21 5:43:20 标签: python, 图像识别, 图像处理, opencv

图片压缩方式

  • 1、引言
  • 2、PIL模块
    • 2.1 quality 方式
      • 2.1.1 普通图片压缩
      • 2.1.2 超大图片压缩
    • 2.2 thumbnail方式
  • 3、OpenCV模块
    • 3.1 安装
    • 3.2 执行代码
  • 4、总结

1、引言

小屌丝:鱼哥,求助,求助
小鱼:啥情况,这火急火燎的?
小屌丝: 我要在某站进行认证,上传图片时提示,图片超过本站最大xxx限制。
小鱼:就这??
小屌丝:对啊,我又不想换照片,又不像照片失真。
小鱼:就这要求?
小屌丝:对,能赶紧帮我不处理不?
小鱼:嗯~ 理论上是可以。
小屌丝:什么都别说,我懂,枸杞一袋!
小鱼:懂我,五分钟后,来 拿图片!

我们先来看一下,小屌丝的自拍照原图。
在这里插入图片描述

图片大小是 53KB
在这里插入图片描述
接下来,就是展示真正技术的时候了。

2、PIL模块

2.1 quality 方式

2.1.1 普通图片压缩

我们使用PIL模块的 quality方法来进行压缩

代码展示:

python"># -*- coding: utf-8 -*-
# @ auth : carl_DJ
# @ time : 2022-01-12

from PIL import Image

#读取img文件
img_file = './pico.jpg'
im = Image.open(img_file)

#quality 是设置压缩比
im.save('pico-ouo.jpg',quality = 20)

运行结果
在这里插入图片描述
嗯,结果还是比较满意的。

  • 即满足的小屌丝不想换图片的要求,
  • 又满足了小屌丝图片被压缩后不失真的要求。

2.1.2 超大图片压缩

我们看看超大的图片,能不能被压缩。

这里我们就用小屌丝的女神照片来进行压缩。

原图 120M,
在这里插入图片描述

我们看看压缩后能有多少M
运行代码

python"># -*- coding: utf-8 -*-
# @ auth : carl_DJ
# @ time : 2022-01-12

from PIL import Image,ImageFile

#防止图片超过178956970 pixels 而报错
ImageFile.LOAD_TRUNCATED_IMAGES = True
Image.MAX_IMAGE_PIXELS = None

#读取img文件
img_file = './king-letter.jpg'
im = Image.open(img_file)

#quality 是设置压缩比
im.save('king-letter-ouo.jpg',quality = 20)

运行结果,我们看看图片大小
在这里插入图片描述
完美。

我们在打开图片看看
在这里插入图片描述
完美 二连击。


因为我们使用的图片120M,超过了178956970 pixels
所以,我们需要使用imageFile的两个方法,限制因超大而报错:

python">ImageFile.LOAD_TRUNCATED_IMAGES = True
Image.MAX_IMAGE_PIXELS = None

如果不限制,报错信息:

PIL.Image.DecompressionBombError: Image size (206621200 pixels) exceeds limit of 178956970 pixels, could be decompression bomb DOS attack.

2.2 thumbnail方式

掌握了quality方式,
我们再用PIL的 thumbnail方式进行图片压缩
我们同样使用超大图片。
这次用唐三的女神照片

代码展示

python"># -*- coding: utf-8 -*-
# @ auth : carl_DJ
# @ time : 2022-01-12

from PIL import Image,ImageFile

#防止图片超过178956970 pixels 而报错
ImageFile.LOAD_TRUNCATED_IMAGES = True
Image.MAX_IMAGE_PIXELS = None

#读取img文件
img_file = './king-letter.jpg'
im = Image.open(img_file)

#获取原尺寸图片大小
w,h = im.size
#图片进行50%的压缩
im.thumbnail  = ((w // 2, h // 2))
#保存
im.save('king-letter-oua.jpg')

运行结果
在这里插入图片描述
我们可以看到,thumbnail方式 虽然把图片压缩到50%,但是图片的大小并不会小太多。

3、OpenCV模块

除了PIL模块,还有OpenCV模块也可以压缩图片

3.1 安装

opencv模块需要安装

老规矩,直接pip安装:

pip install opencv-python

其他方式安装

Python3,选择Python自动安装第三方库,从此跟pip说拜拜!!
Python3:我低调的只用一行代码,就导入Python所有库!!

3.2 执行代码

python"># -*- coding: utf-8 -*-
# @ auth : carl_DJ
# @ time : 2022-01-12


from cv2 import cv2

imgs = cv2.imread('./king.jpg')

#图片缩放至原图的1/4
resize_img = cv2.resize(imgs, (0, 0), fx=0.25, fy=0.25, interpolation=cv2.INTER_NEAREST)

#重写图片并保存
cv2.imwrite('king-ouv.jpg', resize_img)

运行结果
在这里插入图片描述
原图
在这里插入图片描述

压缩后图片
在这里插入图片描述

4、总结

写到这里,今天的分享就差不多结束了。
主要通过PIL 和openCV模块,对图片进行压缩。
关于quality的压缩比例值,需要自己不断的调试,否则会出现失真的情况。

quality的值不固定,是因为图片类型不一样,图片大小也不一样。


http://www.niftyadmin.cn/n/1757101.html

相关文章

Python3,掌握这4个自动化脚本,让工作效率提升200%。

4个自动化脚本1、引言2、自动发送多封邮件2.1 模块介绍2.2 代码实战3、自动桌面提示3.1 模块介绍3.2 代码实战4、自动生成素描草图4.1 模块介绍4.2 代码实战5、自动化阅读网页新闻5.1 模块介绍5.2 代码实战6、总结1、引言 最近小屌丝在休假, 难得的清净… 我们直接…

Python3,3行代码,自动为脚本生成命令行,我默默的收藏了。

为python脚本生成命令行1、引言2、常规方法3、Fire模块3.1 模块介绍3.2 代码示例3.2.1 参数替换3.2.2 类支持3.2.3 代码示例4、总结1、引言 小屌丝:鱼哥,请教个问题? 小鱼:可以拒绝吗? 小屌丝:可以拒绝&am…

Python3,2段代码,给pdf文件添加水印,原来watermark还可以这么玩。

pdf添加watermark1、 引言2、指定水印内容输出到pdf文件2.1 模块安装2.2 思路2.3 代码示例3、水印内容批量输出到pdf文件3.1 模块安装3.2 思路3.3 代码示例4、总结1、 引言 小屌丝:鱼哥,新年快乐! 小鱼:无事不登三宝殿&#xff0…

Python3,10行代码,给pdf文件去水印,再也不用花费冤枉钱了。

10行代码给pdf文件去水印1、引言2、代码实战2.1 去除原理2.2 代码解析2.3 代码整合3、总结1、引言 小屌丝:鱼哥,最近有点不像话了。 小鱼:嗯?? 啥个意思嘛~ 小屌丝:一周了,没分享小知识了。 小…

吊打面试官系列之:掌握兼容性测试21个知识点,让面试官也对你膜拜。

兼容性测试21个知识点 1、引言2、21个兼容性测试注意点3、总结1、引言 小鱼:小屌丝,听说你最近作为你公司的面试官,开始进行面试了? 小屌丝:那是~ 小鱼:这给你厉害的, 那我考考你 小屌丝:鱼哥,别扯淡,有几个能经得住你的拷问?? 小鱼:这次就简单的聊几句 小屌丝:…

Python3,早知道3行代码就能提取音频,我把这10块钱买包子吃不香吗?

3行代码提取音频1、引言2、代码实战2.1 第三方库介绍2.2 安装2.3 代码实例3、总结1、引言 小屌丝:鱼哥,我想从视频中单独把音频提取出来,有什么办法吗? 小鱼:你直接用软件就可以实现啊。 小屌丝:那不得用钱…

Python3,此神器,让爬取速率提升10倍。

让爬取速率提升10倍的神器1、引言2、requests_cache2.1 介绍2.2 安装2.3 代码实例2.3.1 CachedSession 方法2.3.2 install_cache方法2.3.3 Cache Headers 方法3、 总结1、引言 小屌丝:有没有能提升 爬取速率的方法, 小鱼:嗯,提升…

Python3,它,会魔法吧,来自最强大的错误重试库。

错误重试库1、 引言2、 tenacity2.1 安装2.2 基本用法2.3 重试最大次数2.4 重试最长时间2.5 组合重试停止条件2.6 相邻重试时间间隔2.6.1 固定时间间隔2.6.2 随机时间间隔2.7 自定义是否触发重试2.7.1 忽略特定错误类型2.7.2 自定义函数结果条件判断函数3、总结1、 引言 小屌丝…