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

目录
  • 1、引言
  • 2、PIL模块
    • 2.1 quality 方式
    • 2.2 thumbnail方式
  • 3、OpenCV模块
    • 3.1 安装
    • 3.2 执行代码
  • 4、总结

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图片压缩内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python如何实现图片压缩

    本工具是通过将图片上传到第三方网站tinypng,进行压缩后下载,覆盖本地图片,tinypng是一个强大的图片处理网站,目前最可靠的无损压缩网站. 代码如下: import requests from idna import unicode from selenium import webdriver import time import os browser = webdriver.Firefox(executable_path='/Users/lyf/Library/Google/gecko

  • python实现图片压缩代码实例

    前言 项目中大量用到图片加载,由于图片太大,加载速度很慢,因此需要对文件进行统一压缩 一:导入包 from PIL import Image import os 二:获取图片文件的大小 def get_size(file): # 获取文件大小:KB size = os.path.getsize(file) return size / 1024 三:拼接输出文件地址 def get_outfile(infile, outfile): if outfile: return outfile dir,

  • python 无损批量压缩图片(支持保留图片信息)的示例

    由于云盘空间有限,照片尺寸也是很大,所以写个Python程序压缩一下照片,腾出一些云盘空间 1.批量压缩照片 新建 photo_compress.py 代码如下 # -*- coding: utf-8 -*- """脚本功能说明:使用 tinypng api,一键批量压缩指定文件(夹)所有文件""" import os import sys from concurrent.futures import ThreadPoolExecutor, Pr

  • python 实现图片批量压缩的示例

    项目中大量用到图片加载,由于图片太大,加载速度很慢,因此需要对文件进行统一压缩 一:导入包 from PIL import Image import os 二:获取图片文件的大小 def get_size(file): # 获取文件大小:KB size = os.path.getsize(file) return size / 1024 三:拼接输出文件地址 def get_outfile(infile, outfile): if outfile: return outfile dir, suf

  • python实现图片批量压缩

    项目中大量用到图片加载,由于图片太大,加载速度很慢,因此需要对文件进行统一压缩 第一种 一:安装包 python -m pip install Pillow 二:导入包 from PIL import Image import os 三:获取图片文件的大小 def get_size(file): # 获取文件大小:KB size = os.path.getsize(file) return size / 1024 四:输出文件夹下的文件 dir_path = r'file_path' items

  • Python无损压缩图片的示例代码

    每个设计师.摄影师或有图片处理需求小编,都会面临批量高清大图的困扰. 因为高清大图放到网站上会严重拖慢加载速度,或是有的地方明确限制了图片大小,因此,为了完成工作,他们总是需要先把图片压缩,再上传. 当需要处理的图片多至十张.百张.千张,则严重影响工作效率.这时候,就可以交给Python啦! 只需要20行Python代码,就可以批量帮你无损压缩数张照片. ---1--- 前期工作 安装Python中现成的图片处理模块,然后将图片打包好导入,用循环的方式自动化处理图片就可以了! ---2--- 运

  • python 批量压缩图片的脚本

    简介 用Python批量压缩图片,把文件夹或图片直接拖入即可 需要 Needs Python 3 Pillow (用pip install pillow来安装即可) 用法 Usage 把文件夹或图片直接拖入即可.如果拖入的是文件夹,则会遍历子文件夹把所有图片都压缩了. 注意,压缩后的文件会直接替换原来的文件,文件名不变,尺寸不变,只改变压缩质量. 文件的开头有两个变量: SIZE_CUT = 4 表示大于4MB的图片都会进行压缩 QUALITY = 90 表示压缩质量90,这个质量基本人眼是看不

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

    目录 1.引言 2.PIL模块 2.1 quality 方式 2.2 thumbnail方式 3.OpenCV模块 3.1 安装 3.2 执行代码 4.总结 1.引言 小屌丝:鱼哥,求助,求助 小鱼:啥情况,这火急火燎的? 小屌丝: 我要在某站进行认证,上传图片时提示,图片超过本站最大xxx限制. 小鱼:就这?? 小屌丝:对啊,我又不想换照片,又不像照片失真. 小鱼:就这要求? 小屌丝:对,能赶紧帮我不处理不? 小鱼:嗯~ 理论上是可以. 小屌丝:什么都别说,我懂,枸杞一袋! 小鱼:懂我,五分钟

  • python实现图片处理和特征提取详解

    这是一张灵异事件图...开个玩笑,这就是一张普通的图片. 毫无疑问,上面的那副图画看起来像一幅电脑背景图片.这些都归功于我的妹妹,她能够将一些看上去奇怪的东西变得十分吸引眼球.然而,我们生活在数字图片的年代,我们也很少去想这些图片是在怎么存储在存储器上的或者去想这些图片是如何通过各种变化生成的. 在这篇文章中,我将带着你了解一些基本的图片特征处理.data massaging 依然是一样的:特征提取,但是这里我们还需要对跟多的密集数据进行处理,但同时数据清理是在数据库.表.文本等中进行.这是如何

  • python读取mnist数据集方法案例详解

    mnist手写数字数据集在机器学习中非常常见,这里记录一下用python从本地读取mnist数据集的方法. 数据集格式介绍 这部分内容网络上很常见,这里还是简明介绍一下.网络上下载的mnist数据集包含4个文件: 前两个分别是测试集的image和label,包含10000个样本.后两个是训练集的,包含60000个样本..gz表示这个一个压缩包,如果进行解压的话,会得到.ubyte格式的二进制文件. 上图是训练集的label和image数据的存储格式.两个文件最开始都有magic number和n

  • Android图片压缩的实例详解

    Android图片压缩的实例详解 在做微信分享的时候,由于分享的缩略图要求不得大于32K,否则不能调起微信,所以总结了一下Android图片的压缩问题,大部分资料都是来自网上各位的分享,自己只是完善或修改了一下,本着继续分享的精神,也方便自己记忆,于是总结如下. android图片压缩主要有两种方式:1.压缩图片分辨率 2.压缩图片质量 一.先看压缩图片分辨率,很好理解,如本来1280*768的图片压缩为640*384大小.废话不说,直接上代码: /** * 按比例压缩图片分辨率 * @para

  • python爬虫破解字体加密案例详解

    本次案例以爬取起小点小说为例 案例目的: 通过爬取起小点小说月票榜的名称和月票数,介绍如何破解字体加密的反爬,将加密的数据转化成明文数据. 程序功能: 输入要爬取的页数,得到每一页对应的小说名称和月票数. 案例分析: 找到目标的url: (右键检查)找到小说名称所在的位置: 通过名称所在的节点位置,找到小说名称的xpath语法: (右键检查)找到月票数所在的位置: 由上图发现,检查月票数据的文本,得到一串加密数据. 我们通过xpathhelper进行调试发现,无法找到加密数据的语法.因此,需要通

  • python爬虫系列网络请求案例详解

    学习了之前的基础和爬虫基础之后,我们要开始学习网络请求了. 先来看看urllib urllib的介绍 urllib是Python自带的标准库中用于网络请求的库,无需安装,直接引用即可. 主要用来做爬虫开发,API数据获取和测试中使用. urllib库的四大模块: urllib.request: 用于打开和读取url urllib.error : 包含提出的例外,urllib.request urllib.parse:用于解析url urllib.robotparser:用于解析robots.tx

  • Python threading Local()函数用法案例详解

    目录 前言 local() 函数是什么? local()函数如何用? 1. 不做标记,不做隔离 2.使用local()函数加以控制 3. 模拟实现local()的功能,创建一个箱子 4. 简化代码操作,进一步模拟实现local()函数 总结 前言 当多线程访问同一个公共资源时,如果涉及到修改该公共资源的操作就可能会出现由于数据不同步导致的线程安全问题.一般情况下我们可以通过给公共资源加互斥锁的方式来处理该问题. 当然,除非必须将多线程使用的资源设置为公共资源的情况.如果一个资源不需要在多个线程之

  • Python字典中items()函数案例详解

    Python3:字典中的items()函数 一.Python2.x中items():   和之前一样,本渣渣先贴出来python中help的帮助信息: >>> help(dict.items) Help on method_descriptor: items(...) D.items() -> list of D's (key, value) pairs, as 2-tuples >>> help(dict.iteritems) Help on method_de

  • python为图片和PDF去水印详解

    目录 安装模块 获取图片的 RGB 图片去水印 PDF 去水印 图片转为 pdf 总结 网上下载的 pdf 学习资料有一些会带有水印,非常影响阅读.比如下面的图片就是在 pdf 文件上截取出来的. 安装模块 PIL:Python Imaging Library 是 python 上非常强大的图像处理标准库,但是只能支持 python 2.7,于是就有志愿者在 PIL 的基础上创建了支持 python 3的 pillow,并加入了一些新的特性. pip install pillow pymupdf

  • Python自动化办公之群发邮件案例详解

    目录 背景 实现过程 总结 背景 想象一下,现在你有一份Word邀请函模板,然后你有一份客户列表,上面有客户的姓名.联系方式.邮箱等基本信息,然后你的老板现在需要替换邀请函模板中的姓名,然后将Word邀请函模板生成Pdf格式,之后编辑统一的邀请话术(邮件正文),再依次发送邀请函附件到客户邮箱,你会怎么做? 正常情况下,我们肯定是复制粘贴Excel表格中的客户姓名,之后挨个Word文档进行替换,之后将Word转Pdf格式,然后复制Excel表格中的邮箱进行发送编辑好的邮件正常,之后附上邀请函附件,

随机推荐