ImageMagick - 关于图片压缩,通过dk整理的一些可用指令 - window64
测试可以通过命令行批量处理指定类型图片,少量图片的话直接搜“图压”就行了,一般图片还是可以的
下载链接:https://imagemagick.org/script/download.php
window系统往下滑找到这个下载

指令:
进入对应文件夹下压缩所有jpg后缀的图片 (直接替换原文件):
magick mogrify -quality 85% *.jpg
压缩指定图片,后面名称跟前面一样的话为覆盖 :
magick 图片.jpg -quality 85% 图片2.jpg
某些图片为扫描件,直接压缩没有效果 采用扫描噪点方式
magick 图片.png -colors 200 -define png:compression-level=9 图片2.png
------------------------------------------
后面的指令没试出啥效果,可能测试图片少了,可以自己试试
自适应调色板+选择性模糊 : magick 图1.png -colors 128 -blur 0.03x0.03 -dither None -define png:compression-level=9 图2.png
需要其它指令直接根据需要问dk吧
2025年9月26日
补充一下可用脚本,新建bat文件代码复制进去,拖到对应文件夹下执行即可
png:
@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion
echo PNG Compression with Time Filter
magick -version >nul 2>&1
if errorlevel 1 (
echo [ERROR] ImageMagick not found!
pause
exit /b 1
)
set LOG_FILE=compression_log.txt
set FAILED_FILE=failed_list.txt
:: ========== 时间范围设置 ==========
set START_DATE=2020-09-20
set END_DATE=2023-09-22
echo Start Date: %START_DATE%
echo End Date: %END_DATE%
echo Start compression task > "%LOG_FILE%"
echo Time range: %START_DATE% to %END_DATE% >> "%LOG_FILE%"
echo Failed files list > "%FAILED_FILE%"
for %%F in (*.png) do (
:: 获取文件修改时间
for %%I in ("%%F") do (
set file_date=%%~tI
set file_date=!file_date:~0,10!
set file_date=!file_date:/=-!
)
:: 时间范围判断
echo File: %%~nxF Date: !file_date!
if "!file_date!" geq "%START_DATE%" (
if "!file_date!" leq "%END_DATE%" (
echo Processing: %%~nxF
copy "%%F" "%%F.bak" >nul
magick "%%F" -colors 200 -blur 0.03x0.03 -define png:compression-level=9 "%%F.tmp"
if errorlevel 1 (
echo %%F >> "%FAILED_FILE%"
echo FAILED: %%F - Compression error >> "%LOG_FILE%"
echo [ERROR] Compression failed
move "%%F.bak" "%%F" >nul
) else (
if exist "%%F.tmp" (
move "%%F.tmp" "%%F" >nul
echo SUCCESS: %%F >> "%LOG_FILE%"
echo [OK] Compression successful
) else (
echo %%F >> "%FAILED_FILE%"
echo FAILED: %%F - Temp file missing >> "%LOG_FILE%"
echo [ERROR] Temp file not created
move "%%F.bak" "%%F" >nul
)
)
if exist "%%F.bak" del "%%F.bak"
) else (
echo SKIPPED: %%F - After end date >> "%LOG_FILE%"
echo [SKIP] File after end date
)
) else (
echo SKIPPED: %%F - Before start date >> "%LOG_FILE%"
echo [SKIP] File before start date
)
)
echo Task completed >> "%LOG_FILE%"
echo.
echo Log file: %LOG_FILE%
echo Failed list: %FAILED_FILE%
pause
-----------------------
jpg:
@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion
echo JPG Compression Task Starting...
set LOG_FILE=jpg_compression_log.txt
echo Start Time: %time% > "%LOG_FILE%"
:: ========== Time Range Settings ==========
set START_DATE=2020-09-20
set END_DATE=2023-09-22
echo Time Range: %START_DATE% to %END_DATE% >> "%LOG_FILE%"
for %%F in (*.jpg) do (
:: Get file modification date
for %%I in ("%%F") do (
set file_date=%%~tI
set file_date=!file_date:~0,10!
set file_date=!file_date:/=-!
)
echo Checking: %%~nxF Date: !file_date!
:: Time range filter
if "!file_date!" geq "%START_DATE%" (
if "!file_date!" leq "%END_DATE%" (
echo Processing: %%~nxF
set "success=false"
copy "%%F" "%%F.bak" >nul
magick.exe "%%F" -quality 85 "%%F.new" >nul 2>&1
if exist "%%F.new" (
magick.exe identify "%%F.new" >nul 2>&1
if !errorlevel! == 0 (
move "%%F.new" "%%F" >nul
echo SUCCESS: %%~nxF >> "%LOG_FILE%"
set "success=true"
echo [OK] Compression successful
)
)
if "!success!"=="false" (
move "%%F.bak" "%%F" >nul
echo FAILED: %%~nxF >> "%LOG_FILE%"
echo [ERROR] Compression failed, file restored
) else (
del "%%F.bak"
)
) else (
echo SKIPPED: After end date >> "%LOG_FILE%"
)
) else (
echo SKIPPED: Before start date >> "%LOG_FILE%"
)
echo.
)
echo Task Completed >> "%LOG_FILE%"
pause

浙公网安备 33010602011771号