动态

详情 返回 返回

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 -- 覆蓋前是否備份源圖片, 添加該參數則表示備份。

注意:如果配置了命令行參數則以命令行參數為準,否則讀取助手工具配置文件中對應參數配置

Add a new 评论

Some HTML is okay.