- 締切済み
イメージマジックの合成方法
for %%a in (*) do ( for %%b in (*) do ( if not "%%a"=="%%b" ( echo Processing: %%a and %%b magick.exe "%%a" "%%b" -gravity center -composite "%%~na_%%~nb.png" if exist "%%~na_%%~nb.png" ( echo Deleting: %%a and %%b del "%%a" del "%%b" echo Renaming: %%~na_%%~nb.png to %%a rename "%%~na_%%~nb.png" "%%a" ) ) ) ) これだとなぜか合成されません。 どこに問題があるのでしょうか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- _kappe_
- ベストアンサー率68% (1599/2327)
'1.png': No such file or directory(そんな名前のファイルやディレクトリはない)というエラーが出ていますね。つまり、ファイル名の指定が間違っているということです。 1.pngや2.jpgというファイルはC:\Users\ユーザー名\Desktopに存在していますか? その二つのファイルの置き場がC:\Users\ユーザー名\Desktopでない場合は、cd C:\Users\ユーザー名\Desktopする代わりにその二つのファイルが置かれているディレクトリにcdするように変えてください。 あるいは、magick.exeにファイル名を渡す際に1.pngや2.jpgの在り処を下記のようにディレクトリ名からフルパスで指定するのでもいいです。もちろんc:\jikken\imageの部分は例なので、実際のディレクトリ名で置き換えてください。 C:\フォルダ\command\magick.exe c:\jikken\image\1.png c:\jikken\image\2.jpg -gravity center -composite output.png
- _kappe_
- ベストアンサー率68% (1599/2327)
>使用したのはPNGとJPGの2枚の画像 であれば、問題のバッチを使わずにコマンドプロンプト内で下記のコマンドを実行した場合の結果を教えてください。2つのファイル名部分は、合成できなかったというファイルの名前で適宜置き換えてください。もしエラーなどのメッセージが出るならそれをそのまま示してください。 magick.exe ファイル1.png ファイル2.jpg -gravity center -composite output.png バッチが原因の問題なのか、magick.exeにPNGとJPGを同時に渡した場合の問題なのか、あるいはそれ以外の問題なのかをまずは判別する必要があります。 回答No.1に書いたようにバッチの処理内容は怪しいと考えたのですが、ファイル2つだけが処理対象ならそもそも複雑なバッチを使う必要はないと思われます。
補足
合成はできませんでした C:\フォルダ\data\test>cd C:\Users\ユーザー名\Desktop C:\Users\ユーザー名\Desktop>C:\フォルダ\command\magick.exe 1.png 2.jpg -gravity center -composite output.png magick.exe: UnableToOpenBlob '1.png': No such file or directory @ error/blob.c/OpenBlob/3596. C:\Users\ユーザー名\Desktop>pause
- _kappe_
- ベストアンサー率68% (1599/2327)
magick.exeの使い方についての確認はしていませんが、カレントディレクトリの中にX,Y,Zの3つのファイルがあるとして処理を順に追ってみます。 外側ループ1周目 %%a=X 内側ループ1周目 %%b=X %%aと%%bが同じなので何もしない 内側ループ2周目 %%b=Y XとYを合成したファイルを作る XとYを消去 合成したファイルをXにリネーム 内側ループ3周目 %%b=Z X(元のXとYを合成したもの)とZを合成したファイルを作る XとZを消去 合成したファイルをXにリネーム(元のXとYとZを合成したもの) 外側ループ2周目 %%a=Y 内側ループ1周目 %%b=X YとXを合成したファイルを作ろうとするが、Yは消去済みなので失敗する X以外のファイルは残っていないので、内側ループ2周目以降はない 外側ループ3周目 %%a=Z 内側ループ1周目 %%b=X ZとXを合成したファイルを作ろうとするが、Zは消去済みなので失敗する X以外のファイルは残っていないので、内側ループ2周目以降はない 最終的にX(元のXとYとZを合成したもの)だけが残ることになります。 どういう結果になってほしいのか、X,Y,Zを例にして日本語で補足説明してもらえますか。
補足
使用したのはPNGとJPGの2枚の画像ですが、このBATで合成したらファイルが壊れました。 何度やっても同じ結果になり、合成はできませんでした。 これをうまく合成できるようにしたいのです。
補足
合成できました ただ、ファイル名を固定せずに利用したいです つまり変数を用いてFOR文などで処理できるBATが理想です