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

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

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

概述

隨著站點(diǎn)的內(nèi)容越來(lái)越多,圖片所占據(jù)項(xiàng)目的空間越來(lái)越大,需要開(kāi)始考慮到幽絡(luò)源圖像的壓縮了,本教程將會(huì)提供一個(gè)圖像的壓縮腳本來(lái)實(shí)現(xiàn)對(duì)png、jpg、jpeg、webp圖像的壓縮,另外試過(guò)自己壓縮圖像的用戶可能會(huì)特別注意png的壓縮,png是一種無(wú)損圖像,普通的pillow庫(kù)已不足以實(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覆蓋寫(xiě)入)
        subprocess.run([
            "optipng",
            "-o5",
            "-quiet",
            "-clobber",  # 允許覆蓋原文件
            input_path
        ], check=True)
    except subprocess.CalledProcessError as e:
        print(f"壓縮失敗(已保留原文件): {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"壓縮過(guò)程中出錯(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"開(kāi)始?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? 壓縮過(guò)程中發(fā)生嚴(yán)重錯(cuò)誤: {e}")
        sys.exit(1)  # 異常退出

腳本解釋

在上面的腳本中

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

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

腳本使用

安裝必備庫(kù)

對(duì)于linux系統(tǒng),執(zhí)行如下對(duì)應(yīng)命令即可安裝pngquant、optipng庫(kù),這兩個(gè)庫(kù)主要是特定針對(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庫(kù)

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

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

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

pngquant --version
optipng -version

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

使用腳本

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

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

執(zhí)行后,開(kāi)始自動(dòng)批量壓縮,輸出如下

查看結(jié)果

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

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

相關(guān)文章

最新評(píng)論