Python实现图片压缩的案例详解

 更新时间:2022年1月13日 16:46  点击:393 作者:Carl_奕然

1、引言

小屌丝:鱼哥,求助,求助

小鱼:啥情况,这火急火燎的?

小屌丝: 我要在某站进行认证,上传图片时提示,图片超过本站最大xxx限制。

小鱼:就这??

小屌丝:对啊,我又不想换照片,又不像照片失真。

小鱼:就这要求?

小屌丝:对,能赶紧帮我不处理不?

小鱼:嗯~ 理论上是可以。

小屌丝:什么都别说,我懂,枸杞一袋!

小鱼:懂我,五分钟后,来撩 拿图片!

我们先来看一下,小屌丝的自拍照原图。

图片大小是 53KB

接下来,就是展示真正技术的时候了。

2、PIL模块

2.1 quality 方式

2.1.1 普通图片压缩

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

代码展示:

# -*- 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

运行代码

# -*- 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的两个方法,限制因超大而报错:

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方式进行图片压缩

我们同样使用超大图片。

这次用唐三的女神照片。

代码展示

# -*- 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 执行代码

# -*- 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的值不固定,是因为图片类型不一样,图片大小也不一样。

到此这篇关于Python实现图片压缩的案例详解的文章就介绍到这了,更多相关Python图片压缩内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!

原文出处:https://blog.csdn.net/wuyoudeyuer/article/details/122450381

[!--infotagslink--]

相关文章

  • python opencv 画外接矩形框的完整代码

    这篇文章主要介绍了python-opencv-画外接矩形框的实例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-04
  • 使用PHP+JavaScript将HTML页面转换为图片的实例分享

    这篇文章主要介绍了使用PHP+JavaScript将HTML元素转换为图片的实例分享,文后结果的截图只能体现出替换的字体,也不能说将静态页面转为图片可以加快加载,只是这种做法比较interesting XD需要的朋友可以参考下...2016-04-19
  • Python astype(np.float)函数使用方法解析

    这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08
  • 最炫Python烟花代码全解析

    2022虎年新年即将来临,小编为大家带来了一个利用Python编写的虎年烟花特效,堪称全网最绚烂,文中的示例代码简洁易懂,感兴趣的同学可以动手试一试...2022-02-14
  • python中numpy.empty()函数实例讲解

    在本篇文章里小编给大家分享的是一篇关于python中numpy.empty()函数实例讲解内容,对此有兴趣的朋友们可以学习下。...2021-02-06
  • C#从数据库读取图片并保存的两种方法

    这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
  • python-for x in range的用法(注意要点、细节)

    这篇文章主要介绍了python-for x in range的用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-10
  • Python 图片转数组,二进制互转操作

    这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • Python中的imread()函数用法说明

    这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • Photoshop古装美女图片转为工笔画效果制作教程

    今天小编在这里就来给各位Photoshop的这一款软件的使用者们来说说把古装美女图片转为细腻的工笔画效果的制作教程,各位想知道方法的使用者们,那么下面就快来跟着小编一...2016-09-14
  • python实现b站直播自动发送弹幕功能

    这篇文章主要介绍了python如何实现b站直播自动发送弹幕,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下...2021-02-20
  • php抓取网站图片并保存的实现方法

    php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
  • python Matplotlib基础--如何添加文本和标注

    这篇文章主要介绍了python Matplotlib基础--如何添加文本和标注,帮助大家更好的利用Matplotlib绘制图表,感兴趣的朋友可以了解下...2021-01-26
  • 解决python 使用openpyxl读写大文件的坑

    这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
  • Go语言压缩和解压缩tar.gz文件的方法

    这篇文章主要介绍了Go语言压缩和解压缩tar.gz文件的方法,实例分析了使用Go语言压缩文件与解压文件的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-05-03
  • jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮

    jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮...2013-10-13
  • python 计算方位角实例(根据两点的坐标计算)

    今天小编就为大家分享一篇python 计算方位角实例(根据两点的坐标计算),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-27
  • python实现双色球随机选号

    这篇文章主要为大家详细介绍了python实现双色球随机选号,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-05-02
  • python中使用np.delete()的实例方法

    在本篇文章里小编给大家整理的是一篇关于python中使用np.delete()的实例方法,对此有兴趣的朋友们可以学习参考下。...2021-02-01
  • 使用Python的pencolor函数实现渐变色功能

    这篇文章主要介绍了使用Python的pencolor函数实现渐变色功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-09