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

Python實現(xiàn)圖片批量無損壓縮腳本

 更新時間:2025年08月20日 09:57:10   作者:幽絡(luò)源小助理  
隨著站點的內(nèi)容越來越多,圖片所占據(jù)項目的空間越來越大,本教程將會提供一個圖像的壓縮腳本來實現(xiàn)對png,jpg,webp等圖片的壓縮,希望對大家有所幫助

概述

隨著站點的內(nèi)容越來越多,圖片所占據(jù)項目的空間越來越大,需要開始考慮到幽絡(luò)源圖像的壓縮了,本教程將會提供一個圖像的壓縮腳本來實現(xiàn)對png、jpg、jpeg、webp圖像的壓縮,另外試過自己壓縮圖像的用戶可能會特別注意png的壓縮,png是一種無損圖像,普通的pillow庫已不足以實現(xiàn)對png的壓縮,本教程所提供腳本同樣適用于png的壓縮。

壓縮腳本

import os
import sys
from PIL import Image
import subprocess
def compress_png_aggressively(input_path, quality):
    """直接覆蓋源文件的PNG壓縮方案"""
    try:
        # 1. 使用pngquant直接覆蓋源文件(添加--speed 1加快速度)
        subprocess.run([
            "pngquant",
            "--force",
            "--speed", "1",  # 加速處理
            "--quality", f"{max(10, 100 - quality)}-100",
            "--output", input_path,  # 直接輸出到原文件
            "--",
            input_path
        ], check=True)
        # 2. 直接運行optipng覆蓋原文件(添加-clobber覆蓋寫入)
        subprocess.run([
            "optipng",
            "-o5",
            "-quiet",
            "-clobber",  # 允許覆蓋原文件
            input_path
        ], check=True)
    except subprocess.CalledProcessError as e:
        print(f"壓縮失?。ㄒ驯A粼募? {e}")
    except Exception as e:
        print(f"未知錯誤: {e}")
def compress_image_by_quality(input_path, quality):
    """
    按質(zhì)量壓縮圖片并覆蓋原文件
    :param input_path: 圖片路徑
    :param quality: 壓縮質(zhì)量 (0-100)
    """
    if not os.path.isfile(input_path):
        print(f"文件不存在: {input_path}")
        return
    file_ext = os.path.splitext(input_path)[1].lower()
    supported_formats = ['.jpg', '.jpeg', '.png', '.webp']
    if file_ext not in supported_formats:
        print(f"不支持的圖片格式: {input_path}")
        return
    original_size = os.path.getsize(input_path) / 1024  # KB
    try:
        if file_ext in ['.jpg', '.jpeg']:
            img = Image.open(input_path)
            img.save(input_path, quality=quality, optimize=True, progressive=True)
        elif file_ext == '.png':
            # 對PNG使用強(qiáng)力壓縮
            compress_png_aggressively(input_path, quality)
        elif file_ext == '.webp':
            img = Image.open(input_path)
            img.save(input_path, quality=quality, method=6)
        compressed_size = os.path.getsize(input_path) / 1024
        print(
            f"壓縮完成: {os.path.basename(input_path)} 質(zhì)量: {quality} 大小: {original_size:.2f}KB -> {compressed_size:.2f}KB")
    except Exception as e:
        print(f"壓縮過程中出錯: {e}")
def compress_images_in_directory(directory, quality):
    """
    壓縮目錄下的所有圖片
    :param directory: 目錄路徑
    :param quality: 壓縮質(zhì)量 (0-100)
    """
    if not os.path.isdir(directory):
        print(f"目錄不存在: {directory}")
        return
    print(f"開始壓縮目錄: {directory},質(zhì)量設(shè)置: {quality}")
    for filename in os.listdir(directory):
        filepath = os.path.join(directory, filename)
        if os.path.isfile(filepath):
            compress_image_by_quality(filepath, quality)
    print("所有圖片壓縮完成")
if __name__ == "__main__":
    # 檢查必要工具是否安裝
    try:
        subprocess.run(["pngquant", "--version"], check=True, stdout=subprocess.PIPE)
        subprocess.run(["optipng", "--version"], check=True, stdout=subprocess.PIPE)
    except:
        print("警告: 請先安裝pngquant和optipng以獲得最佳PNG壓縮效果")
        print("Ubuntu/Debian: sudo apt-get install pngquant optipng")
        print("CentOS/RHEL: sudo yum install pngquant optipng")
        print("MacOS: brew install pngquant optipng")
        sys.exit(1)  # 工具未安裝時直接退出
    directory = r"/www/wwwroot/www.youluoyuan.com/wp-content/uploads/2025/01" #含有圖片的目錄
    try:
        quality = 60 #壓縮質(zhì)量 范圍1~100,建議50~75,數(shù)字越小則壓縮越強(qiáng),但圖片質(zhì)量會更低
        if not 0 <= quality <= 100:
            raise ValueError
    except ValueError:
        print("錯誤: 質(zhì)量參數(shù)必須是0到100之間的整數(shù)")
        sys.exit(1)
    try:
        compress_images_in_directory(directory, quality)
        print("\n? 已全部壓縮完成")  # 新增完成提示
        sys.exit(0)  # 正常退出
    except Exception as e:
        print(f"\n? 壓縮過程中發(fā)生嚴(yán)重錯誤: {e}")
        sys.exit(1)  # 異常退出

腳本解釋

在上面的腳本中

directory是指包含圖片的目錄,windows與linux系統(tǒng)都可以

quality表示期望壓縮的質(zhì)量,范圍1~100,建議50~75,數(shù)字越小則壓縮越強(qiáng),但圖片質(zhì)量會更低

腳本使用

安裝必備庫

對于linux系統(tǒng),執(zhí)行如下對應(yīng)命令即可安裝pngquant、optipng庫,這兩個庫主要是特定針對png的壓縮

# Ubuntu/Debian
sudo apt-get install pngquant optipng
# CentOS/RHEL
sudo yum install pngquant optipng
# MacOS
brew install pngquant optipng

對于windows系統(tǒng),方式之一是手動下載pngquant、optipng并配置環(huán)境變量,幽絡(luò)源這里已提供適用于windows的pngquant、optipng庫

按照如圖快捷進(jìn)入環(huán)境變量配置

再將optipng和pngquant配置到path中去,如圖

配置保存后,在cmd命令中輸入如下兩條命令

pngquant --version
optipng -version

若成功則能獲取到相應(yīng)的版本信息,如圖

使用腳本

以如下包含圖片的目錄為例,現(xiàn)在大小如下為104MB

再修改腳本中指定的目錄和期望的壓縮質(zhì)量,如圖

執(zhí)行后,開始自動批量壓縮,輸出如下

查看結(jié)果

壓縮后結(jié)果如下,并且圖像的實際質(zhì)量也不低,能夠極大的減少圖像占據(jù)磁盤空間。

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

相關(guān)文章

  • Python基于歐拉角繪制一個立方體

    Python基于歐拉角繪制一個立方體

    這篇文章主要為大家詳細(xì)介紹了Python如何基于歐拉角實現(xiàn)繪制一個立方體,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-02-02
  • 基于python 將列表作為參數(shù)傳入函數(shù)時的測試與理解

    基于python 將列表作為參數(shù)傳入函數(shù)時的測試與理解

    這篇文章主要介紹了基于python 將列表作為參數(shù)傳入函數(shù)時的測試與理解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • python3.4用循環(huán)往mysql5.7中寫數(shù)據(jù)并輸出的實現(xiàn)方法

    python3.4用循環(huán)往mysql5.7中寫數(shù)據(jù)并輸出的實現(xiàn)方法

    下面小編就為大家?guī)硪黄猵ython3.4用循環(huán)往mysql5.7中寫數(shù)據(jù)并輸出的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Python?使用BeautifulSoup庫的方法

    Python?使用BeautifulSoup庫的方法

    BeautifulSoup庫用于從HTML或XML文件中提取數(shù)據(jù),它可以自動將復(fù)雜的HTML文檔轉(zhuǎn)換為樹形結(jié)構(gòu),并提供簡單的方法來搜索文檔中的節(jié)點,使得我們可以輕松地遍歷和修改HTML文檔的內(nèi)容,本文給大家介紹Python?使用BeautifulSoup庫的方法,感興趣的朋友一起看看吧
    2023-10-10
  • 利用Python實現(xiàn)自制文件搜索小工具

    利用Python實現(xiàn)自制文件搜索小工具

    當(dāng)自己電腦文件很多還有點亂,不記得自己文件放哪里的時候,用電腦自帶的搜索文件,這個等待時間可慢了。所以我們不如自己用python做一個搜索工具!犄角旮旯的文件都能一秒鐘搜索出來的那種
    2022-09-09
  • Python全景系列之裝飾器使用的全面講解

    Python全景系列之裝飾器使用的全面講解

    裝飾器在Python中扮演了重要的角色,文將深入探討裝飾器的所有相關(guān)主題,包括裝飾器的基礎(chǔ)知識、實現(xiàn)與使用、工作原理等,需要的可以參考一下
    2023-05-05
  • Python中按鍵來獲取指定的值

    Python中按鍵來獲取指定的值

    今天小編就為大家分享一篇關(guān)于Python中按鍵來獲取指定的值,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Python記錄詳細(xì)調(diào)用堆棧日志的方法

    Python記錄詳細(xì)調(diào)用堆棧日志的方法

    這篇文章主要介紹了Python記錄詳細(xì)調(diào)用堆棧日志的方法,涉及Python調(diào)用堆棧日志的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-05-05
  • python交互式圖形編程實例(一)

    python交互式圖形編程實例(一)

    這篇文章主要為大家詳細(xì)介紹了python交互式圖形編程實例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • python 合并表格詳解

    python 合并表格詳解

    這篇文章主要為大家詳細(xì)介紹了python 合并表格的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10

最新評論

静宁县| 福清市| 句容市| 通山县| 吴旗县| 同心县| 罗江县| 桑植县| 宁海县| 手机| 淳化县| 景洪市| 德昌县| 成武县| 淮安市| 噶尔县| 佛山市| 饶河县| 易门县| 九江市| 班戈县| 尚志市| 昂仁县| 阜城县| 西峡县| 加查县| 忻州市| 获嘉县| 保山市| 星子县| 温泉县| 湖口县| 墨竹工卡县| 呼和浩特市| 洪雅县| 洪洞县| 汝南县| 板桥市| 磐石市| 浦城县| 利川市|