Imagemagickで色深度を落とす(複数ファイルをバッチ処理)

パソコン・インターネット

 PNGファイルのファイルサイズを小さくしたい。色深度を落とせばいいのだろうと思う。Microsoft Copilotに聞いてみた。

 今回はOUTというフォルダを作って、変換後のファイルはそこに出力する。OUTフォルダの作成もバッチファイルにまかせる方向で(こういうのもうまいことCopilotが作ってくれる)。

 いろいろエラーが出たので、「こういうエラーメッセージが出たんだけど」と聞き直してくと、エラーが出ないやつができあがった。

@echo off
setlocal enabledelayedexpansion
set "output_dir=%~dp0OUT"
if not exist "%output_dir%" mkdir "%output_dir%"
for %%f in (%*) do (
    echo Processing: %%f
    set "absolute_path=%%~f"
    set "filename=%%~nf"
    set "extension=%%~xf"
    magick "%%~f" -depth 8 "%output_dir%\%%~nf%%~xf"
    if !errorlevel! neq 0 (
        echo Error processing %%~f
    ) else (
        echo Processed %%~f successfully
    )
)
echo All files have been processed and output to %output_dir%
pause

 エラーが出てた原因は絶対パスを渡せてなかったからっぽい。最後は絶対パスで指定して、っていうのも書いたかと思う。ここまでのやりとりで返ってきたメッセージをいくつか列挙。

このスクリプトのポイントは以下の通りです:
ファイルが存在するか確認します。
magickコマンドを使って色深度を変更し、OUTフォルダに保存します。
if %errorlevel% neq 0を使用して、magickコマンドの実行中にエラーが発生した場合の処理を追加しました。
これで、エラーが発生した場合にも適切に対応し、出力ファイルをOUTフォルダに保存することができます。試してみてくださいね!他に質問や修正が必要な点があれば教えてください。


このスクリプトは、以下のように動作します:
%%~dpnx0でバッチファイル自身の絶対パスを表示し、%%~dpnxで各ファイルの絶対パスを取得します。
%%~dpnxを使って入力ファイルの絶対パスを設定します。
magickコマンドを使って色深度を変更し、OUTフォルダに保存します。
この方法でエラーが回避できるか試してみてください。他にご質問や修正したい点があれば教えてくださいね!


このスクリプトの変更点は以下の通りです:
setlocal enabledelayedexpansionを追加して遅延環境変数展開を有効にしました。これにより、ループ内で設定された変数を正しく展開できます。
変数の呼び出しに!を使用して、遅延展開を行うようにしました。
これで、ファイルが正しく処理されるか試してみてください。他に質問や修正が必要な点があれば教えてくださいね!


修正点:
%%~dpnx0を %%~f に変更して、ファイルの絶対パスを取得するようにしました。
absolute_path の設定を %%~f を使用して正しく取得できるように変更しました。
magick "%%~f" を使用して、絶対パスを直接指定するようにしました。
これでエラーが回避できるか試してみてください。うまくいくことを願っています!他にも質問や修正があれば教えてくださいね。

 これでエラーがなくなり、ファイルサイズは最初の1/3くらいになった。

コメント

タイトルとURLをコピーしました