2025/11/03(月) [n年前の日記]
#1 [cg_tools][prog] 画像ファイルを複数のサイズで縮小したい。その2
Windows11 x64 25H2上でbatファイルと ImageMagick を使って、複数の画像を、複数のサイズで縮小して出力したい。
_昨日、 一応それっぽいbatファイルは書けたけれど、出力画像をサブディレクトリを作ってその中に保存するようにしたい。
以下のような感じになった。環境は Windows11 x64 25H2 + ImageMagick 7.1.2-8 portable Q16 HDRI x64。
_resize_image_files.bat
今回、遅延環境変数とやらに見事にハマって、動かないなと悩んでた。面倒臭いな…batファイル…。
_遅延環境変数について #Windows - Qiita
_バッチファイル界の魔境『遅延環境変数』に挑む(おまけもあるよ) - Qiita
_【バッチ】遅延環境変数について
_昨日、 一応それっぽいbatファイルは書けたけれど、出力画像をサブディレクトリを作ってその中に保存するようにしたい。
以下のような感じになった。環境は Windows11 x64 25H2 + ImageMagick 7.1.2-8 portable Q16 HDRI x64。
_resize_image_files.bat
@echo off
@REM 複数の画像ファイルをドラッグアンドドロップで渡して複数の縮小画像を作成する。
@REM 縮小画像の生成には ImageMagick 7.1.2-8 Q16-HDRI x64 (magick.exe) を利用。
chcp 65001 > NUL
@REM 遅延環境変数の使用を宣言
setlocal enabledelayedexpansion
@REM ImageMagick 7.x.x にパスを通す。常にパスを通してあるなら不要
set PATH=%IM7_PATH%;%PATH%
set MAGICKOPTA=-colorspace RGB -filter Lanczos -define filter:blur=.9891028367558475 -distort Resize
set MAGICKOPTB=-colorspace sRGB -quality 90
echo --- 縮小画像 (720ドット、1000ドット) を作成します。 ---
echo.
for %%F in (%*) do (
echo 元画像 : %%F
for %%i in (720,1000) do (
set DIRNAME=resize_%%i
set DIRPATH="%%~dpF!DIRNAME!"
if not EXIST !DIRPATH! (
@REM サブディレクトリが見つからないので作成する
mkdir !DIRPATH!
echo ディレクトリ !DIRPATH! を作成しました。
)
@REM ImageMagick で縮小画像を生成
magick %%F %MAGICKOPTA% %%ix%%i %MAGICKOPTB% "%%~dpF!DIRNAME!\%%~nF_%%i.jpg"
echo 縮小画像 !DIRNAME!\%%~nF_%%i.jpg を作成しました。
)
echo --------
)
endlocal
echo.
echo --- 処理が終わりました。何かキーを押してください。 ---
pause
- for %%i in (720,1000) do ( ) で、%%i の中に 720 と 1000 が入るループ処理ができる。
- 変数の内容が変化していく処理を書く時は、setlocal enabledelayedexpansion を呼んで、遅延環境変数とやらを使うことを宣言する。endlocal で閉じる。
- 通常、batファイルの中で変数を呼び出すときは %hoge% と書くけれど、遅延環境変数を使いたい時は !hoge! と書く。
- if not EXIST hoge ( ) で、hoge というファイル/ディレクトリが無い場合の処理を書ける。
- echo で改行だけ出力したい時は echo. と書く。
- batファイルの中ではインデントもできる。
今回、遅延環境変数とやらに見事にハマって、動かないなと悩んでた。面倒臭いな…batファイル…。
_遅延環境変数について #Windows - Qiita
_バッチファイル界の魔境『遅延環境変数』に挑む(おまけもあるよ) - Qiita
_【バッチ】遅延環境変数について
[ ツッコむ ]
以上です。