Python 基于python實現的圖片壓縮助手
程序及源碼下載地址:
https://gitee.com/ishouke/image-optimizer
圖片壓縮助手使用說明
適用環境
win11
imageOptimizer.zip
備注:win7可能存在兼容性問題,其它版本未驗證
Centos7
imageOptimizer.tar
用途
批量壓縮圖片,開發時間有限,目前僅支持圖片格式:.jpg, .jpeg, .png
使用方法
助手工具配置
image_optimizer.conf
[OPTIMIZER_CONF]
# ###### 通用配置 ######
# 壓縮后的圖片的存儲路徑 默認為當前目錄下的 compressedImages目錄
# 注意:如果指定了輸出目錄,會在該目錄下,按文件所在路徑,創建對應層級的目錄結構,比如 output_dir設置為D:\testdir
# 檢索到的文件在E:\somedir\subdir\target\file.png,那么壓縮后的file.png位于 D:\testdir\somedir\subdir\target目錄下
# 注意:指定的輸出目錄不能是輸入目錄的子路徑,否則會造成死循環(雖然代碼已做判斷),因為會在子目錄下新建目錄,導致遍歷輸入目錄時,會無限遍歷
output_dir =
# 合法文件擴展名,如果有多個,英文逗號分隔
# 目前僅支持 .jpg, .jpeg, .png
valid_extensions = .jpg, .jpeg, .png
# 最大線程數(默認: 本機cpu核數)
workers =
# 是否遍歷輸入目錄的子目錄
# 1 -- 是 0 -- 否 默認為 0
traverse_sub_dir = 1
# 是否支持正則識別待排除路徑
# 1 -- 是 0 -- 否 默認為0
check_path_by_regex = 1
# 輸入文件名稱是和源文件名保持一致
# 1 -- 是 0 -- 否 默認為 0 默認輸出文件格式:源文件名(不帶后綴)-compressed
# 注意:僅 override_src_image 不等于 1 該配置才有效
keep_name_unchanged = 0
# 是否覆蓋源圖片
# 1 -- 覆蓋 0 -- 不覆蓋,默認為 0
# 注意:該配置項為1時,指定輸出目錄路徑不起作用,即 output_dir 配置項不起作用
override_src_image = 0
# 覆蓋前是否備份源圖片
# 1 -- 備份 0 -- 不備份,默認為 0 在文件所在目錄下創建bak目錄,然后拷貝源文件到該目錄下
# 僅 override_src_image = 1 該配置才有效
backup_src_image = 1
# 備份目錄名稱
backup_dir_name = bak
# 過濾器--按大小過濾--文件大小大于等于該配置項的文件才壓縮
# 單位KB,要求整數,默認為0
filter_file_size = 512
###### 工具差異化配置 ######
# png壓縮工具
# 可選值: pngquant 默認 pngquant(有損壓縮)
png_comp_tool = pngquant
# pngquant壓縮命令模板
# 參數說明:
# -f | --force 強制覆蓋已有的輸出文件
# --skip-if-larger 僅在轉換后的文件小于原始文件時保存
# --output {output_image_path} 指定輸出圖片路徑
# --quality min-max 不保存低于最小值,高于最大值(0-100)時使用更少的顏色
# --speed N 表示速度與質量的權衡。1代表慢速,4代表默認速度,11代表快速且粗糙
# --nofs 禁用Floyd-Steinberg抖動算法
# --posterize N 輸出低精度顏色(例如,用于ARGB4444輸出)
# --strip 移除可選元數據(在Mac上默認為開啟)
# 注意:{}為英文輸入
pngquant_compress_cmd_template = {bin_tool} --force --skip-if-larger --speed 4 --output "{output_image_path}" "{input_image_path}"
# jpg, jpeg 壓縮工具
# 目前僅支持 cv2
jpg_comp_tool = cv2
# jpg,jpeg cv2壓縮配置
# 說明:
# -- 控制整體質量:數值越低,壓縮率越高(文件越小),但畫質損失越明顯。 要求整數(0-100),默認值 95。適用所有 JPEG 壓縮場景(核心參數)。
cv2_jpeg_quality = 42
# 是否優化霍夫曼編碼表(0=關閉,1=開啟)
# 開啟后可進一步減小文件體積(約 5-10%),但編碼時間略增加。要求整數(0/1),默認值 1。適用需要更小文件體積時(推薦開啟)
cv2_jpeg_optimize = 1
# 是否生成漸進式 JPEG(0=基線 JPEG,1=漸進式)。漸進式 JPEG 加載時先顯示模糊輪廓,再逐步清晰,適合網頁。 要求整數(0/1),默認值 0。適用網頁/移動端圖片(需瀏覽器支持漸進式解碼)。
cv2_jpeg_progressive =
# 單獨控制亮度(Luma)通道的質量。亮度對視覺影響更大,可優先降低此值以壓縮。要求整數(0-100),無默認值。適用灰度圖或顏色簡單的圖像(如監控截圖)。
# 注意:配置該參數,該參數值越大,圖片體積越大
cv2_jpeg_luma_quality =
#單獨控制色度(Chroma)通道的質量。色度對視覺敏感度較低,可大幅降低此值。要求整數(0-100),無默認值。適用顏色變化少的圖像(如風景照、卡通圖)。
cv2_jpeg_chroma_quality =
輸入圖片路徑配置
待壓縮圖片所在目錄路徑
conf/image_path_included.conf
# 需要檢索的路徑,每行代表一個路徑
# # 代表注釋,空行或者注釋會自動過濾
# 示例:D:\test、/opt/data/images
待排除圖片路徑配置
不需要壓縮的圖片所在目錄路徑、不需要壓縮的圖片文件路徑
conf/image_path_excluded.conf
# 需要排除的路徑,每行代表一個路徑
# # 代表注釋,空行或者注釋會自動過濾
# 注意,配置支持目錄、文件路徑
# 示例:bak$ -- 以bak結尾的路徑都排除
日志配置
一般不用改
conf/log.conf
[LOGGING]
log_file =
max_bytes_each = 512000
backup_count = 10
fmt = |(asctime)s |(filename)s[line: |(lineno)d] |(levelname)s: |(message)s
logger_name = test_logger
log_level_in_console = 10
log_level_in_logfile = 20
console_log_on = 1
logfile_log_on = 1
[README]
log_level = '日志級別:CRITICAL = 50 ERROR = 40 WARNING = 30 INFO = 20 DEBUG = 10 NOTSET = 0'
log_on = 'console_log_on = 1 開啟控制臺日志,0則關閉,logfile_log_on = 1 開啟文件日志, 0則關閉'
log_file = 'log.txt所在的目錄必須已存在'
運行
windows
cd imageOptimizer
imageOptimizer.exe
linux
# chmod +x bin_tools/pngquant
# ./imageOptimizer
命令行參數
工具支持部分命令行參數,例如以下:
./imageOptimizer --input_dir=/root/testdir --output_dir=/root/mydir
參數介紹:
--input_dir=image_dir_paths-- 待壓縮圖片所在目錄路徑,如果有多個采用英文逗號分隔(默認:inputImages)--output_dir=image_dir_paths-- 壓縮后圖片存儲目錄路徑(默認:compressedImages)--workers=Num-- 最大線程數(默認: 本機cpu核數)--png_comp_tool=tool-- png圖片壓縮工具, 默認pngquant--jpg_comp_tool=tool-- jpg/jpeg圖片壓縮工具, 默認cv2--traverse_sub_dir-- 是否遍歷輸入目錄的子目錄, 添加該參數,則表示遍歷子目錄--check_path_by_regex-- 是否支持正則識別待排除路徑。添加該參數則表示支持正則識別。--override_src_image-- 是否覆蓋源圖片,添加該參數則表示覆蓋。--backup_src_image-- 覆蓋前是否備份源圖片, 添加該參數則表示備份。
注意:如果配置了命令行參數則以命令行參數為準,否則讀取助手工具配置文件中對應參數配置
作者:授客
微信/QQ:1033553122
全國軟件測試QQ交流群:7156436
Git地址:https://gitee.com/ishouke
友情提示:限于時間倉促,文中可能存在錯誤,歡迎指正、評論!
作者五行缺錢,如果覺得文章對您有幫助,請掃描下邊的二維碼打賞作者,金額隨意,您的支持將是我繼續創作的源動力,打賞后如有任何疑問,請聯系我!!!
微信打賞
支付寶打賞 全國軟件測試交流QQ群
浙公網安備 33010602011771號