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 -blur 0.05x0.05 -define png:compression-level=9 图2.png
尺寸欺诈术:magick 图1.png -resize 80% -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

posted @ 2025-09-24 15:53  小周^^  阅读(11)  评论(0)    收藏  举报