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

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

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

概述

隨著站點(diǎn)的內(nèi)容越來越多,圖片所占據(jù)項(xiàng)目的空間越來越大,需要開始考慮到幽絡(luò)源圖像的壓縮了,本教程將會(huì)提供一個(gè)圖像的壓縮腳本來實(shí)現(xiàn)對(duì)png、jpg、jpeg、webp圖像的壓縮,另外試過自己壓縮圖像的用戶可能會(huì)特別注意png的壓縮,png是一種無損圖像,普通的pillow庫已不足以實(shí)現(xiàn)對(duì)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. 直接運(yùn)行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"未知錯(cuò)誤: {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':
            # 對(duì)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"壓縮過程中出錯(cuò): {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"開始?jí)嚎s目錄: {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("警告: 請(qǐng)先安裝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)  # 工具未安裝時(shí)直接退出
    directory = r"/www/wwwroot/www.youluoyuan.com/wp-content/uploads/2025/01" #含有圖片的目錄
    try:
        quality = 60 #壓縮質(zhì)量 范圍1~100,建議50~75,數(shù)字越小則壓縮越強(qiáng),但圖片質(zhì)量會(huì)更低
        if not 0 <= quality <= 100:
            raise ValueError
    except ValueError:
        print("錯(cuò)誤: 質(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)重錯(cuò)誤: {e}")
        sys.exit(1)  # 異常退出

腳本解釋

在上面的腳本中

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

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

腳本使用

安裝必備庫

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

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

對(duì)于windows系統(tǒng),方式之一是手動(dò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í)行后,開始自動(dòng)批量壓縮,輸出如下

查看結(jié)果

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

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

相關(guān)文章

  • Python基于歐拉角繪制一個(gè)立方體

    Python基于歐拉角繪制一個(gè)立方體

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

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

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

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

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

    Python?使用BeautifulSoup庫的方法

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

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

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

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

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

    Python中按鍵來獲取指定的值

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

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

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

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

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

    python 合并表格詳解

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

最新評(píng)論

曲靖市| 昌平区| 清流县| 瓦房店市| 本溪| 兴和县| 池州市| 夏邑县| 化德县| 宿迁市| 许昌市| 琼中| 蓝山县| 东乡族自治县| 湘阴县| 桃园市| 榆树市| 连南| 德惠市| 霍州市| 南靖县| 西乌珠穆沁旗| 罗定市| 九龙县| 井研县| 兴义市| 德安县| 陇西县| 玉田县| 丰顺县| 兖州市| 石景山区| 攀枝花市| 巩义市| 乐清市| 什邡市| 小金县| 定兴县| 宣城市| 项城市| 彭泽县|