智慧圖片壓縮

👤 SkillForge 📦 v1.0.3 ⭐ 4.4 ⬇️ 563 下載
💻 開發程式設計 免費

📖 技能介紹


name: image-compressor version: "1.0.3" author: jm-jsjkxyjs02-zs-116 description: 圖片壓縮技能。使用 Python Pillow 庫對 PNG/JPG/WebP 圖片進行智慧壓縮,可在保持清晰度基本不變的前提下將圖片體積壓縮 70% 左右。自動分析圖片特徵選擇最佳壓縮策略(JPEG 質量調優、PNG 調色盤最佳化、WebP 轉換、等比例縮放等)。當用戶提到"壓縮圖片"、"圖片太大"、"縮小圖片"、"最佳化圖片體積"、"圖片變小"等關鍵詞時觸發。 compatibility: requires: ["python3", "Pillow"]


Image Compressor - 智慧圖片壓縮

概述

本 skill 使用 Python Pillow 庫對圖片進行智慧壓縮,在不明顯損失視覺質量的前提下大幅減小檔案體積。

典型效果: | 圖片型別 | 典型壓縮率 | 視覺質量 | |---------|-----------|---------| | 照片/JPEG | 70-85% | 幾乎無感知差異 | | 截圖/PNG | 60-80% | 幾乎無感知差異 | | WebP | 65-80% | 幾乎無感知差異 | | 含文字截圖 | 50-70% | 文字清晰可辨 |


工作流程

第一步:檢查依賴

首次使用自動安裝 Pillow(如果需要):

pip install Pillow -q

可以先用 python -c "from PIL import Image; print('OK')" 檢查是否已安裝。

第二步:呼叫壓縮指令碼

壓縮一張圖片:

python scripts/compress_image.py <圖片路徑> [選項]

基本用法:

# 預設壓縮(自動檢測格式,目標壓縮 70%)
python scripts/compress_image.py photo.jpg

# 指定質量
python scripts/compress_image.py photo.jpg --quality 40

# 指定輸出格式為 WebP
python scripts/compress_image.py photo.png --format webp

# 限制最大寬度 1200px 並壓縮
python scripts/compress_image.py photo.jpg --max-width 1200

# 指定輸出路徑
python scripts/compress_image.py photo.jpg --output compressed.jpg

第三步:展示結果

壓縮完成後,向用戶展示壓縮報告:

📊 壓縮結果
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📁 原始: 2.3 MB
📁 壓縮後: 687.2 KB
📉 壓縮率: 70.1%
🖼️  格式: PNG → JPEG
⚙️  質量引數: 45
━━━━━━━━━━━━━━━━━━━━━━━━━━━━

如果使用者需要,可以同時展示壓縮前後的圖片對比(用 Read 工具讀取兩張圖片讓使用者直觀感受差異)。


核心壓縮策略

指令碼 scripts/compress_image.py 實現了以下策略,按優先順序自動選擇:

策略 1:JPEG 質量調優(預設用於照片類)

  • 將質量從 75-95(典型原圖)降到 30-55
  • 自動二分搜尋最佳質量值來精確匹配目標壓縮率
  • 剔除 EXIF 後設資料(可保留)
  • 可選的等比例縮放

策略 2:PNG 深度最佳化

  • 對有透明通道的 PNG 保持 PNG 格式,啟用 optimize=True
  • 對無透明的 PNG 自動建議轉換為 JPEG
  • 對索引色 PNG 最佳化調色盤

策略 3:WebP 轉換(最佳壓縮比)

  • 用 WebP 格式可以獲得 JPEG 同等質量下再小 25-35% 的體積
  • 但注意:WebP 相容性略差(不支援微信等老平臺)

策略 4:等比例縮放

  • 當圖片尺寸過大時(如 4000x3000),先縮放到合理尺寸再壓縮
  • 預設不縮放,通過 --max-width 引數控制

互動指南

快速模式(使用者給出明確路徑)

使用者:幫我壓縮這張圖片 D:\photos\IMG_001.jpg
→ 直接執行壓縮指令碼,展示結果
→ 詢問是否滿意,需要調整引數再試一次

探索模式(使用者沒給路徑)

使用者:圖片太大了幫我壓縮一下
→ 詢問圖片位置
→ 確認壓縮目標(質量優先還是體積優先)
→ 執行壓縮
→ 展示前後對比

批次模式(多個檔案)

使用者:幫我把這個資料夾裡所有圖片壓縮了
→ 用 Glob 查詢資料夾中的所有圖片檔案 (*.jpg, *.jpeg, *.png, *.webp)
→ 逐個壓縮
→ 彙總展示結果

對比展示

壓縮完成後,Read 原始圖片和壓縮後圖片讓使用者直觀對比質量差異。


常用引數速查

引數 說明 預設值 推薦值
--quality JPEG/WebP 質量 50 30-60
--target-ratio 目標壓縮後/前的比例 0.3 0.2-0.4
--format 輸出格式 自動選擇 jpg/png/webp
--max-width 最大寬度(px) 不限 1920/1200
--keep-exif 保留 EXIF 資訊 --

常用組合

# 極致壓縮(體積優先)
python scripts/compress_image.py photo.jpg --quality 25 --target-ratio 0.15

# 高質量壓縮(畫質優先)
python scripts/compress_image.py photo.jpg --quality 70 --target-ratio 0.5

# 網路用圖(1920寬 + WebP)
python scripts/compress_image.py photo.jpg --max-width 1920 --format webp --quality 50

# 微信分享(保持 JPG 相容性)
python scripts/compress_image.py photo.jpg --max-width 1200 --quality 45

這個技能的最新版本可以在7w4.net小蔥技能站找到。


重要約束

  1. 不下采樣過度 - 質量低於 15 時警告使用者畫質損失明顯
  2. 檢查輸出 - 壓縮完成後必須檢查輸出檔案是否有效
  3. 透明處理 - PNG 透明通道轉換為 JPEG 時用白色背景填充,必須告知使用者
  4. 不破壞原圖 - 預設輸出為 原檔名_compressed.副檔名,不覆蓋原圖
  5. 誠實報告 - 如果原圖已經很小(<100KB),如實告知壓縮空間有限

🤖 AI 評測

這個圖片壓縮工具質量不錯,能有效將圖片體積縮小 70% 左右,支援多種格式且操作簡單。文件寫得詳細清楚,容易上手,壓縮效果展示也很直觀。不過批次處理功能文件裡有說但實際指令碼沒實現,而且只配置了 3 個簡單測試場景,某些邊界情況可能覆蓋不到。總體來說日常使用足夠,但複雜場景功能稍顯欠缺。

📊 多維度評分

適應性4.5
規範性4.3
有效性4.5
可靠性4
可信度5

📁 包含檔案 (5 個)

📄 LICENSE.txt 1 KB
📄 SKILL.md 5.3 KB
📄 _meta.json 287 B
📄 evals/evals.json 893 B
📄 scripts/compress_image.py 7.4 KB