ImageMagick を使って画像を結合する方法

公開日: : 最終更新日:2014/01/26 ImageMagick ,

前回に引き続き ImageMagick ネタです。今回は画像を結合する方法を調べてみました。

icatch-puzzle-212154_640

画像を結合するコマンド

ImageMagick の montage コマンドを使うと画像を結合することができます。ImageMagick のサイトに結合のサンプルページがあるのでリンクしておきます。

やりたかったのは複数の画像を 2×2 などタイル状に並べて結合するというものだったので More Montage Settings を参考に次のオプションを使いました。

  • -tile {cols}x{rows}
  • -geometry {W}x{H}+{X}+{Y}

実行するコマンド例は次のようになります。

$ montage in_file_1 in_file_2 in_file_3 in_file_4 -tile 2×2 -geometry 100×100 out_file

  • in_file_1,,,_4 → 結合したい元画像ファイル
  • -tile 2×2 → 画像を2行2列に並べる
  • -geometry 100×100 → 元画像ファイルの大きさ(縦x横)を指定する
  • out_file → 結合した画像ファイル

Java から ImageMagick を使って画像を結合する

前回の Exif 削除もそうでしたが、今回の画像結合も Java から実行できるように実装してみました。

ソースコードはこんな感じです。

/**
 * 画像をタイル状に結合する。
 * 
 * @param commandPath
 *            montage コマンドの絶対パス。
 * @param srcFiles
 *            結合用画像ファイルを格納したリスト。
 * @param tile
 *            結合する形式(2x2 とか 9x5 といった形式で指定する)
 * @param geometry
 *            結合元画像ファイルの大きさ(100x100 といった形式で指定する)
 * @param dest
 *            生成先のファイル。このファイルに画像を作成する
 * @throws IOException
 *             commandPath に指定されているパスが montage コマンドではなかった場合
 * @throws InterruptedException
 *             ImageMagick の操作に失敗した場合
 */
public static void createMontage(String commandPath, List<File> srcFiles,
        String tile, String geometry, File dest) throws IOException, InterruptedException {

    if (log.isDebugEnabled()) {
        String message = String
                .format("commandPath:%s, srcFiles:%s, tile:%s, geometry:%s, dest:%s",
                        commandPath, srcFiles.toString(), tile, geometry, dest);
        log.debug(message);
    }

    List<String> command = new ArrayList<String>();
    command.add(commandPath);
    command.add("-tile");
    command.add(tile);
    command.add("-geometry");
    command.add(geometry);
    for (File src : srcFiles) {
        command.add(src.getAbsolutePath());
    }
    command.add(dest.getAbsolutePath());

    ProcessBuilder builder = new ProcessBuilder(command);
    Process process = builder.start();
    process.waitFor();
}

第一引数の commandPath は ImageMagick の montage コマンドのパスを指定します。パスはプロパティファイルなどに切り出しておきました。

ライブラリ作りました

前回の記事でも次のライブラリを紹介させてもらいました。

このライブラリでも画像を結合する処理を実装してあります。

  • ImageMagick#createMontage

自分が使う分には特に問題ないのですが、何かあればご指摘いただけると助かります。

Googleアドセンス用(PC)

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

関連記事

no image

ImageMagick を使って画像の縦横サイズを縮小する

ガラケーを使った案件で、100KB制限のために画像ファイルを縮小する必要があった。ImageMagi

記事を読む

icatch-lock-6311261312401

ImageMagick を使って Exif を取り除く方法

プライベートで撮影した写真をブログとかどこかの Web サービスにアップロードしたり、人に渡すときは

記事を読む

icatch-man-thumbs-up

ImageMagick を使ってサムネイル画像を作成する方法

またまた ImageMagick ネタです。今回はサムネイル画像を作成する方法を調べてみました。

記事を読む

Googleアドセンス用(PC)

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


八 × = 8

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Googleアドセンス用(PC)

icatch-jersey_multi_pathparams
Jerseyの@PathParamはスラッシュの間に複数指定できる

http://hoge-api/user/{id}.{format}

icatch-vagrant_box_customize
VagrantのBoxファイルをカスタマイズして独自のBoxファイルを作成する

配布されている Vagrant の Box ファイルを使って検証環境を

icatch-2015-006-1
バリデーションチェックにJava8のOptionalを使ってスマートに書く(自分比)

Web アプリのバリデーションチェックにアノテーションを使うことが増え

icatch-2015-005-1
ユニットテストの偏りを防ぐ命名規則の付け方

ユニットテスト名に以下の命名規則を付けるようにして二ヶ月ぐらい経った。

icatch-2015-004-1
Vagrantで起動したCentOS上のOctopressをホストOSから確認する設定

タイトルの通りだが、Vagrant を使って起動した CentOS に

→もっと見る

PAGE TOP ↑