ImageMagick

このエントリーをはてなブックマークに追加
1名無しさん@お腹いっぱい。
画像処理を行なうツールImageMagickの使い方、Q&A、
スクリプティング(プログラミング)についてのスレです。
Windows版・UNIX(Linux・FreeBSD)版・Mac OS X版等は問いません。

WSH、バッチファイル、シェルスクリプト等で画像処理を自動化するのに便利です。


関連リンク
ImageMagick(公式サイト)[英語]
http://www.imagemagick.org/
ImageMagick - Wikipedia
http://ja.wikipedia.org/wiki/ImageMagick
ImageMagick
ttp://mechanics.civil.tohoku.ac.jp/soft/node43.html
2名無しさん@お腹いっぱい。:2007/11/16(金) 22:49:29 ID:O1k6DxGW0
>>3が全レスします!!
3名無しさん@お腹いっぱい。:2007/11/16(金) 22:55:19 ID:k4ljKlgI0
http://www.imagemagick.org/script/binary-releases.php から
ImageMagick-6.3.6-10-Q16-windows-dll.exe (32bit版XP等の場合)を
ダウンロードしてインストール。インストールの過程で
□ Install ImageMagickObject OLE Control for VBscript, Visual Basic, and WSH
のチェックを入れてください。
↓をメモ帳等のテキストエディタに貼り付けて jpgborder.js という名前を付けて保存する。
JPGファイルのアイコンをjpgborder.jsのアイコン(ショートカットでもよい)に
ドラッグ&ドロップすると簡単にフチが付く!
フチが付けられたファイル名には"a"が付きます。("$1a$2"という記述により)

// jpgborder.js
var BorderWidth = { X: "3%", Y: "4%" }; // フチの幅。%を付けなければ固定値
var FilenameConverter = { Pattern: /(^|[/\\])(.*?)(\.jpg)$/i, ReplaceText: "$1$2a$3" };
var ImageMagick = new ActiveXObject("ImageMagickObject.MagickImage.1");
var Args = WScript.Arguments;
for (var i = 0; i < Args.length; i++) {
try {
ImageMagick.Convert("-border", BorderWidth.X + "x" + BorderWidth.Y,
"-bordercolor", "white",
Args(i),
Args(i).replace(FilenameConverter.Pattern, FilenameConverter.ReplaceText));
}
catch (e) {
WScript.Echo(Args(i) + " は変換できません。");
}
}
4名無しさん@お腹いっぱい。:2007/11/16(金) 22:58:27 ID:k4ljKlgI0
これはつまるところ、コマンドプロンプトを使わなくてもexeファイルにオプションを付けて実行出来るぞ、ってことですかね?
5名無しさん@お腹いっぱい。:2007/11/16(金) 23:00:28 ID:KgLw0V5I0
>>3
見やすくインデントしときますた

// imgborder.js
var BorderWidth = { X: "3%", Y: "4%" }; // フチの幅。%を付けなければ固定値
var FilenameConverter = { Pattern: /(^|[/\\])(.*?)(\.jpg)$/i, ReplaceText: "$1$2a$3" };
var ImageMagick = new ActiveXObject("ImageMagickObject.MagickImage.1");
var Args = WScript.Arguments;
for (var i = 0; i < Args.length; i++) {
    try {
        ImageMagick.Convert("-border", BorderWidth.X + "x" + BorderWidth.Y,
            "-bordercolor", "white",
            Args(i),
            Args(i).replace(FilenameConverter.Pattern, FilenameConverter.ReplaceText));
    }
    catch (e) {
        WScript.Echo(Args(i) + ": error");
    }
}
6名無しさん@お腹いっぱい。:2007/11/16(金) 23:03:25 ID:KgLw0V5I0
>>3-5
このプログラムのやってることはコマンドプロンプトから

D:\>"c:\Program Files\ImageMagick-6.3.6-Q16\convert.exe" -border 3%x4% -bordercolor white IMG01.JPG IMG01a.JPG

を実行する処理と一緒です。
7名無しさん@お腹いっぱい。:2007/11/16(金) 23:10:12 ID:KgLw0V5I0
これは画像にwhite色のborder(フチ)を付ける処理をします。
8名無しさん@お腹いっぱい。:2007/11/16(金) 23:50:54 ID:KgLw0V5I0
これでフチを付けるとフチの分だけ画像の大きさが大きくなるけど
この大きさ自体を変えないようにフチを付けるにはどうすりゃいいか。

ところで3行目はこれがいいと思う
var FilenameConverter = { Pattern: /(\.jp(?:[eg]|eg))$/i, ReplaceText: "a$1" };
9名無しさん@お腹いっぱい。:2007/11/18(日) 16:41:15 ID:QrKMFzgv0
ちょっと質問です。
6.3.6-10-Q16-windowsで複数のpngとかjpegからpsdファイルを作りたいと思って、
convert hoge.png fuga.jpg out.psd
としたら一応psdファイルは出来たんですが、Photoshop7.0とかGIMP2.4ではエラーが出て開けません。
とりあえず
convert out.psd[0] layer0.png
convert out.psd[1] layer1.png
とやったら元の絵と同じ物が取り出せるのでデータ自体は格納されているようです。
ちなみに、1枚だけをpsdにした場合は問題なく開けます。

ちゃんとPhotoshop等で開ける複数レイヤーのpsdってどうやれば作れるんでしょう?
10:2007/11/19(月) 04:18:34 ID:ws3HxXwM0
>>6
ありがとうございます、了解しました。
11名無しさん@お腹いっぱい。:2007/12/08(土) 14:04:07 ID:UBI8eeWg0
複数の画像ファイルを同一サイズにリサイズってどうやるんですか?
画質落とさずにってできますかね?

12名無しさん@お腹いっぱい。:2007/12/08(土) 23:21:40 ID:QMFQQRzc0
上書きして良いなら
mogrify -resize 640x480 *.jpg
png形式で出力するなら
mogrify -resize 640x480 -format png *.jpg
とか。

基本的に画質を落とさないリサイズは不可能。
縮小する場合は確実に潰れざるを得ないし、
拡大の場合も足りない部分を補間して埋めるからぼやけたりする。
13名無しさん@お腹いっぱい。:2007/12/17(月) 22:25:27 ID:pVHSoM2N0
画像をconvert -rotateで回転させると画像のサイズが変わってしまうんですが
サイズを変えない(回転してはみ出す部分は消滅)で回転させるにはどうしたらいいですか?
14名無しさん@お腹いっぱい。:2007/12/17(月) 23:22:24 ID:ACHLMAKE0
-cropで切り取れば良いんじゃない?
15名無しさん@お腹いっぱい。:2007/12/17(月) 23:43:03 ID:pVHSoM2N0
>>14
すいません
ひとつのファイルであればそれでいいんですが
>>13のような処理をまとめて適用したいんですよ
rotete後のサイズは角度によって違うのでできなくて・・・
16名無しさん@お腹いっぱい。:2007/12/18(火) 00:30:22 ID:6VarwJRX0
もし元画像のサイズも全部バラバラで角度も全部バラバラ、
切り取りたい部分もバラバラってんならまとめて処理するなんて出来ないと思うが。

何か法則性があるなら適当なプログラム言語でバッチファイルを書き出してやれば良いんじゃない?
17名無しさん@お腹いっぱい。:2007/12/18(火) 00:50:30 ID:jSja5zGp0
いえ、サイズは元のままにしたいんですよ?
回転させると大きさが変わってしまって・・・・っていう話ですから
18名無しさん@お腹いっぱい。:2007/12/18(火) 02:11:40 ID:6VarwJRX0
元ファイル達が全部WxHで、それを全部R度回転させてWxHで切り取りたいんなら
mogrify -rotate R -crop WxH+X+Y *.png (X,Yは左上の調整用)
みたいな感じで一括処理できるわけだけど、
元のファイルのサイズが揃ってないなら一旦サイズを取得して
そのサイズでcropしなきゃいけない。
でもそんな機能はマニュアル読んだ限りじゃ載ってない。
だから各画像のサイズを取得してconvert -rotate R -crop WxH+X+Y hoge.pngを実行するようなものを作るしかない。
19名無しさん@お腹いっぱい。
調べていただいてありがとうございます
シェルスクリプトでそういうのを作ろうと思います
元のサイズもそろってますし、
勘違いしてて、回転後のサイズ変化は90度の倍数の時以外は
一定で別にバラバラというわけではなかったので私でもできそうです

説明が足りず情報を小出しにしてしまいすいませんでした