質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

ImageMagick

ImageMagickとは、画像の表示や操作を行うオープンソースのソフトウェアです。プログラムはCで書かれており、GIFやJPEG、PDFなど画像ファイルフォーマット100種類以上に対応しています。

Q&A

解決済

1回答

4111閲覧

Imagemagickで差分画像を一括で合成したい

d09982

総合スコア11

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

ImageMagick

ImageMagickとは、画像の表示や操作を行うオープンソースのソフトウェアです。プログラムはCで書かれており、GIFやJPEG、PDFなど画像ファイルフォーマット100種類以上に対応しています。

0グッド

0クリップ

投稿2017/04/01 19:56

###前提・実現したいこと
質問させて頂きます。何卒よろしくお願いします。

imagemagickでベース画像と差分画像を合成する為に<1>のバッチファイルを書きましたが、差分画像が多くなると1枚1枚処理するのが不便な為、自分で調べて<2>のように繰り返し処理を考えてみたのですが、出力されたファイルの名前をうまく変更できずに躓いてしまっております。何かヒントだけでも構わないのでご教授頂きたいです。

###繰り返したい処理内容
convert ベース画像.png 差分画像.png -composite ベース画像_差分画像.png

ベース画像部分は兼用で差分画像部分を指定したディレクトリから一括で処理したいです。

###<1>

@echo off set /p BASE_INPUT= rem ベース画像の場所を入力 set /p DIFF_INPUT= rem 差分画像の場所を入力 set str=%BASE_INPUT:~0,-4%_%DIFF_INPUT::~0,-4% rem ベース画像の拡張子を除くファイルネーム_差分画像の拡張子を除くファイルネーム convert %BASE_INPUT% %DIFF_INPUT% -composite %str%.png

###<2>

@echo off dir *.png /b >list.txt set /p BASE_INPUT= rem ベース画像の場所を入力 set PROC=convert %BASE_INPUT% set str1=%BASE_INPUT:~0,-4% for /f %%i in (list.txt) do %PROC% %%i -composite %str1%_

カレントのディレクトリ内のpngの一覧をlist.txtで保存し、txt内のpngファイルを1行1行処理しようと思ったのですが、-composite以降をどう書けばいいかわからず上書きで出力されてしまいます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

近々、バッチを組むことになりそうなので、思い出しがてら。

@echo off set /p BASE_INPUT= @rem ベース画像のパスが入力されることを想定 @rem 例: baseimage.jpg, base\image.jpg, C:\images\base\image.jpg set PROC=.\convert.exe @rem ImageMagickのconvertコマンドのパスを指定 @rem convertだけだと、WindowsのFAT->NTFS変換コマンド(convert) @rem が呼ばれる危険があるため。 @rem ファイルのパスからファイル名のみを取得 call :GetBaseName %BASE_INPUT% set BASE_NAME=%RETURN_VAL% for /f "delims=" %%i in ('dir *.jpg /b') do ( %PROC% "%BASE_INPUT%" "%%i" -composite %BASE_NAME%_%%~ni.jpg @rem %%~ni については コマンドプロンプトで"for /?"を打つと @rem ヘルプが出るので、そちらを参照。 ) exit /b 0 :GetBaseName set RETURN_VAL=%~n1 exit /b 0

投稿2017/11/21 14:34

sa-yu

総合スコア201

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問