欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實現(xiàn)圖片壓縮的案例詳解

 更新時間:2022年01月13日 16:08:26   作者:Carl_奕然  
這篇文章主要介紹了如何用最簡潔的Python代碼實現(xiàn)圖片壓縮效果,還可以保證照片不失真,感興趣的小伙伴可以跟隨小編一起動手試試

1、引言

小屌絲:魚哥,求助,求助

小魚:啥情況,這火急火燎的?

小屌絲: 我要在某站進(jìn)行認(rèn)證,上傳圖片時提示,圖片超過本站最大xxx限制。

小魚:就這??

小屌絲:對啊,我又不想換照片,又不像照片失真。

小魚:就這要求?

小屌絲:對,能趕緊幫我不處理不?

小魚:嗯~ 理論上是可以。

小屌絲:什么都別說,我懂,枸杞一袋!

小魚:懂我,五分鐘后,來撩 拿圖片!

我們先來看一下,小屌絲的自拍照原圖。

圖片大小是 53KB

接下來,就是展示真正技術(shù)的時候了。

2、PIL模塊

2.1 quality 方式

2.1.1 普通圖片壓縮

我們使用PIL模塊的 quality方法來進(jìn)行壓縮

代碼展示:

# -*- 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 是設(shè)置壓縮比
im.save('pico-ouo.jpg',quality = 20)

運行結(jié)果

嗯,結(jié)果還是比較滿意的。

即滿足的小屌絲不想換圖片的要求,

又滿足了小屌絲圖片被壓縮后不失真的要求。

2.1.2 超大圖片壓縮

我們看看超大的圖片,能不能被壓縮。

這里我們就用小屌絲的女神照片來進(jìn)行壓縮。

原圖 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 是設(shè)置壓縮比
im.save('king-letter-ouo.jpg',quality = 20)

運行結(jié)果,我們看看圖片大小

完美。

我們在打開圖片看看

完美 二連擊。

因為我們使用的圖片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方式進(jìn)行圖片壓縮

我們同樣使用超大圖片。

這次用唐三的女神照片。

代碼展示

# -*- 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
#圖片進(jìn)行50%的壓縮
im.thumbnail ?= ((w // 2, h // 2))
#保存
im.save('king-letter-oua.jpg')

運行結(jié)果

我們可以看到,thumbnail方式 雖然把圖片壓縮到50%,但是圖片的大小并不會小太多。

3、OpenCV模塊

除了PIL模塊,還有OpenCV模塊也可以壓縮圖片

3.1 安裝

opencv模塊需要安裝

老規(guī)矩,直接pip安裝:

pip install opencv-python

其他方式安裝:

《Python3,選擇Python自動安裝第三方庫,從此跟pip說拜拜!!》

《Python3:我低調(diào)的只用一行代碼,就導(dǎo)入Python所有庫!!》

3.2 執(zhí)行代碼

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

運行結(jié)果

原圖

壓縮后圖片

4、總結(jié)

寫到這里,今天的分享就差不多結(jié)束了。

主要通過PIL 和openCV模塊,對圖片進(jìn)行壓縮。

關(guān)于quality的壓縮比例值,需要自己不斷的調(diào)試,否則會出現(xiàn)失真的情況。

quality的值不固定,是因為圖片類型不一樣,圖片大小也不一樣。

到此這篇關(guān)于Python實現(xiàn)圖片壓縮的案例詳解的文章就介紹到這了,更多相關(guān)Python圖片壓縮內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python實現(xiàn)代理服務(wù)功能實例

    python實現(xiàn)代理服務(wù)功能實例

    本文分析了代理服務(wù)的原理,并使用PYTHON實現(xiàn)了一個簡單的代理服務(wù)功能供大家參考使用
    2013-11-11
  • Python使用Selenium爬取淘寶異步加載的數(shù)據(jù)方法

    Python使用Selenium爬取淘寶異步加載的數(shù)據(jù)方法

    今天小編就為大家分享一篇Python使用Selenium爬取淘寶異步加載的數(shù)據(jù)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • MySQL中表的復(fù)制以及大型數(shù)據(jù)表的備份教程

    MySQL中表的復(fù)制以及大型數(shù)據(jù)表的備份教程

    這篇文章主要介紹了MySQL中表的復(fù)制以及大型數(shù)據(jù)表的備份教程,其中大表備份是采用添加觸發(fā)器增量備份的方法,需要的朋友可以參考下
    2015-11-11
  • python3 http提交json參數(shù)并獲取返回值的方法

    python3 http提交json參數(shù)并獲取返回值的方法

    今天小編就為大家分享一篇python3 http提交json參數(shù)并獲取返回值的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • python實現(xiàn)各種插值法(數(shù)值分析)

    python實現(xiàn)各種插值法(數(shù)值分析)

    這篇文章主要介紹了python實現(xiàn)各種插值法(數(shù)值分析),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python configparser模塊配置文件過程解析

    Python configparser模塊配置文件過程解析

    這篇文章主要介紹了Python configparser模塊配置文件過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • python datetime時間格式的相互轉(zhuǎn)換問題

    python datetime時間格式的相互轉(zhuǎn)換問題

    這篇文章主要介紹了python datetime時間格式的相互轉(zhuǎn)換問題,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • 在python3中使用Supervisor的詳細(xì)教程

    在python3中使用Supervisor的詳細(xì)教程

    Supervisor是用Python開發(fā)的一個client/server服務(wù),是Linux/Unix系統(tǒng)下的一個進(jìn)程管理工具,不支持Windows系統(tǒng),本文給大家介紹在python3中使用Supervisor的方法,感興趣的朋友一起看看吧
    2022-01-01
  • MATLAB中print函數(shù)使用示例詳解

    MATLAB中print函數(shù)使用示例詳解

    print函數(shù)的功能是打印圖窗或保存為特定文件格式,這篇文章主要介紹了MATLAB中print函數(shù)使用,需要的朋友可以參考下
    2023-03-03
  • python通過yield實現(xiàn)數(shù)組全排列的方法

    python通過yield實現(xiàn)數(shù)組全排列的方法

    這篇文章主要介紹了python通過yield實現(xiàn)數(shù)組全排列的方法,實例分析了全排列的概念及yield實現(xiàn)的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03

最新評論