最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

從入門到實(shí)戰(zhàn)詳解Python壓縮圖片的完整方法

 更新時(shí)間:2026年06月03日 08:28:03   作者:detayun  
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)壓縮圖片的常見方法,主要是Python庫(kù)Pillow,OpenCV及tinify,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下

圖片太大,上傳慢、存儲(chǔ)貴、加載卡?用 Python 幾行代碼就能搞定。

為什么要壓縮圖片

  • 網(wǎng)站加速:圖片占網(wǎng)頁(yè)流量的 60%+,壓縮后加載速度提升明顯
  • 節(jié)省存儲(chǔ):一張 10MB 的照片壓到 500KB,硬盤壓力小很多
  • 符合平臺(tái)限制:微信、微博、電商平臺(tái)都有圖片大小上限

方案一:Pillow(最推薦,簡(jiǎn)單夠用)

Pillow 是 Python 最主流的圖像處理庫(kù),壓縮圖片只需幾行代碼。

1. 按質(zhì)量壓縮(有損)

from PIL import Image

def compress_image(input_path, output_path, quality=85):
    """
    quality: 1-100,越小文件越小,畫質(zhì)越差
    推薦值:70-85 之間性價(jià)比最高
    """
    img = Image.open(input_path)
    
    # JPEG 不支持透明通道,需要轉(zhuǎn)換模式
    if img.mode in ('RGBA', 'P'):
        img = img.convert('RGB')
    
    img.save(output_path, 'JPEG', optimize=True, quality=quality)
    
    original_size = os.path.getsize(input_path) / 1024
    new_size = os.path.getsize(output_path) / 1024
    print(f"原大小: {original_size:.1f}KB → 壓縮后: {new_size:.1f}KB,節(jié)省 {100 - new_size/original_size*100:.1f}%")

compress_image("photo.jpg", "photo_compressed.jpg", quality=80)

2. 按尺寸壓縮(縮小分辨率)

def resize_image(input_path, output_path, max_width=1200):
    img = Image.open(input_path)
    
    w, h = img.size
    if w > max_width:
        ratio = max_width / w
        new_size = (max_width, int(h * ratio))
        img = img.resize(new_size, Image.LANCZOS)  # LANCZOS 是高質(zhì)量縮放算法
    
    img.save(output_path, 'JPEG', optimize=True, quality=85)

3. 批量壓縮整個(gè)文件夾

import os
from PIL import Image

def batch_compress(input_dir, output_dir, quality=80):
    os.makedirs(output_dir, exist_ok=True)
    
    for filename in os.listdir(input_dir):
        if filename.lower().endswith(('.jpg', '.jpeg', '.png', '.webp')):
            input_path = os.path.join(input_dir, filename)
            output_path = os.path.join(output_dir, filename)
            
            img = Image.open(input_path)
            if img.mode in ('RGBA', 'P'):
                img = img.convert('RGB')
            img.save(output_path, 'JPEG', optimize=True, quality=quality)
            print(f"? {filename}")

batch_compress("./photos", "./photos_compressed", quality=75)

方案二:OpenCV(適合需要更多控制的場(chǎng)景)

import cv2

def compress_with_cv2(input_path, output_path, quality=80):
    img = cv2.imread(input_path)
    # quality 參數(shù)范圍 0-100
    cv2.imwrite(output_path, img, [cv2.IMWRITE_JPEG_QUALITY, quality])

OpenCV 優(yōu)勢(shì)是可以順便做裁剪、旋轉(zhuǎn)、加水印等操作,再一起壓縮。

方案三:tinify(API 壓縮,效果最好)

如果追求極致壓縮比,可以用 tinify 的 API,它用的是有損+無(wú)損混合算法。

import tinify

tinify.key = "你的API_KEY"
source = tinify.from_file("photo.jpg")
source.to_file("photo_tiny.jpg")

免費(fèi)額度每月 500 張,超出后付費(fèi),但壓縮效果確實(shí)比 Pillow 好 20%-40%。

幾個(gè)實(shí)用技巧

技巧說(shuō)明
quality=85 是 sweet spot低于 70 肉眼可見模糊,高于 90 壓縮效果很弱
先縮尺寸再壓質(zhì)量效果翻倍,比如先 resize 到 1200px 寬,再 quality=80
PNG 轉(zhuǎn) JPEG如果不需要透明通道,PNG 轉(zhuǎn) JPEG 體積能縮小 70%+
用 WebP 格式同等畫質(zhì)下比 JPEG 小 30%,現(xiàn)代瀏覽器全支持
optimize=True 別忘加Pillow 的這個(gè)參數(shù)會(huì)額外做一次無(wú)損優(yōu)化,白撿的壓縮

到底選哪個(gè)?

需求推薦方案
快速搞定、批量處理Pillow
要同時(shí)做圖像處理(裁剪/旋轉(zhuǎn))OpenCV
追求最小體積、不差錢tinify API
面向 Web 前端輸出轉(zhuǎn)為 WebP 格式

完整實(shí)戰(zhàn)腳本(直接復(fù)制就能用)

import os
from PIL import Image

def smart_compress(input_path, output_path, max_width=1920, quality=80):
    img = Image.open(input_path)
    
    # 1. 轉(zhuǎn)換模式
    if img.mode in ('RGBA', 'P'):
        img = img.convert('RGB')
    
    # 2. 縮小尺寸
    w, h = img.size
    if w > max_width:
        ratio = max_width / w
        img = img.resize((max_width, int(h * ratio)), Image.LANCZOS)
    
    # 3. 壓縮保存
    img.save(output_path, 'JPEG', optimize=True, quality=quality)
    
    original = os.path.getsize(input_path) / 1024
    compressed = os.path.getsize(output_path) / 1024
    print(f"{os.path.basename(input_path)}: {original:.0f}KB → {compressed:.0f}KB")

# 使用
smart_compress("large_photo.jpg", "small_photo.jpg")

圖片壓縮的核心就一句話:先縮尺寸,再調(diào)質(zhì)量,能轉(zhuǎn)格式就轉(zhuǎn)格式。掌握這三步,90% 的場(chǎng)景都?jí)蛴昧恕?/p>

到此這篇關(guān)于從入門到實(shí)戰(zhàn)詳解Python壓縮圖片的完整方法的文章就介紹到這了,更多相關(guān)Python壓縮圖片內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python二維列表一維列表的互相轉(zhuǎn)換實(shí)例

    python二維列表一維列表的互相轉(zhuǎn)換實(shí)例

    今天小編就為大家分享一篇python二維列表一維列表的互相轉(zhuǎn)換實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Flask之pipenv虛擬環(huán)境的實(shí)現(xiàn)

    Flask之pipenv虛擬環(huán)境的實(shí)現(xiàn)

    這篇文章主要介紹了Flask之pipenv虛擬環(huán)境的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • python中不規(guī)則字符串模糊匹配(fuzzywuzzy)

    python中不規(guī)則字符串模糊匹配(fuzzywuzzy)

    本文主要介紹了python中不規(guī)則字符串模糊匹配(fuzzywuzzy),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-08-08
  • Python實(shí)現(xiàn)將中文大寫金額轉(zhuǎn)數(shù)字金額

    Python實(shí)現(xiàn)將中文大寫金額轉(zhuǎn)數(shù)字金額

    在日常的財(cái)務(wù)處理、票據(jù)識(shí)別或金融系統(tǒng)開發(fā)中,我們常常需要將中文大寫的金額轉(zhuǎn)換為阿拉伯?dāng)?shù)字形式,下面我們就來(lái)看看如何使用Python實(shí)現(xiàn)這一需求吧
    2025-09-09
  • Python中super()函數(shù)簡(jiǎn)介及用法分享

    Python中super()函數(shù)簡(jiǎn)介及用法分享

    本文給大家分享的是Python中的super函數(shù)的簡(jiǎn)單介紹以及用法和注意事項(xiàng),有需要的小伙伴可以參考下
    2016-07-07
  • 基于Python中Remove函數(shù)的用法討論

    基于Python中Remove函數(shù)的用法討論

    這篇文章主要介紹了基于Python中Remove函數(shù)的用法討論,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • 以windows service方式運(yùn)行Python程序的方法

    以windows service方式運(yùn)行Python程序的方法

    這篇文章主要介紹了以windows service方式運(yùn)行Python程序的方法,可實(shí)現(xiàn)將Python程序變成windows服務(wù)的功能,需要的朋友可以參考下
    2015-06-06
  • Python基礎(chǔ)之操作MySQL數(shù)據(jù)庫(kù)

    Python基礎(chǔ)之操作MySQL數(shù)據(jù)庫(kù)

    這篇文章主要介紹了Python基礎(chǔ)之操作MySQL數(shù)據(jù)庫(kù),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-05-05
  • PyQt彈出式對(duì)話框的常用方法及標(biāo)準(zhǔn)按鈕類型

    PyQt彈出式對(duì)話框的常用方法及標(biāo)準(zhǔn)按鈕類型

    這篇文章主要為大家詳細(xì)介紹了PyQt彈出式對(duì)話框的常用方法及標(biāo)準(zhǔn)按鈕類型,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • python 使用csv模塊讀寫csv格式文件的示例

    python 使用csv模塊讀寫csv格式文件的示例

    這篇文章主要介紹了python 使用csv模塊讀寫csv格式文件的示例,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-12-12

最新評(píng)論

镇坪县| 偏关县| 西城区| 咸宁市| 泸定县| 镶黄旗| 疏勒县| 神池县| 揭阳市| 宿州市| 视频| 湘潭县| 上蔡县| 吴堡县| 宜都市| 长海县| 芦溪县| 淅川县| 青海省| 沁水县| 新沂市| 平和县| 色达县| 云梦县| 墨玉县| 合川市| 尼木县| 临朐县| 平湖市| 齐齐哈尔市| 汶上县| 南丰县| 长子县| 分宜县| 辽宁省| 石泉县| 三江| 平罗县| 东阿县| 加查县| 乐陵市|