ImageMagick(イメージマジック)を使ってWindows, Mac環境で「複数の画像をGrid上に並べて結合する方法」をご紹介したいと思います。ImageMagickは、あらゆる言語(Python, PHP, GO, C言語, Java, Rust)に対応していますが、今回はコマンドライン上で実行する方法に加え、Rubyを使ってプログラム上でも実行する方法をご紹介していこうと思います。

ImageMagickってなに?

ImageMagickは、コマンドラインで起動できる画像処理ツールで、JPEG、PNGはもちろん、WebPやPDF, GIF, TIFFなどのあらゆる画像フォーマットに対応している最強のツールです。

どんな事に使える?

  • フォーマット(形式)の変換
  • 解像度、サイズの変換
  • 画像合成、画像分析

上記が主な用途です。一般的な画像形式の変換やサイズ変換だけでなく、機械学習や深層学習などの研究目的にも多く使用されています。インターネット上では、OGPやサムネイル画像の自動生成などにも使用されています。

ImageMagickのインストール方法

ImageMagick for Windows インストール

公式ページからインストールファイルをダウロード

上記リンクからPC環境に合うインストールファイルをダウンロードします。

「I accept the agreement」のチェックボックスを選択してライセンスに同意して「Next」をクリックします。

インストールディレクトリを指定し、「Next」をクリックしていきます。

FFmpegなどの関連ツールをインストールするチェックボックスが表示されますが、基本的にはそのまま「Next」で問題ありません。最後に「Install」をクリックしてインストールを開始します。

インストール確認

magick

上記コマンドをターミナルで実行してオプションが表示されたら問題なく動作しています。

ImageMagick for Mac インストール

brew install imagemagick

HomeBrewを使ってインストールしてきます。上記コマンドをターミナルから実行します。

brewコマンドが使えない場合はHomeBrewを先にインストールしてから、上記コマンドを実行してください。

Macの場合は、以上でインストールが完了します。

インストール確認

magick

上記コマンドをターミナルで実行してオプションが表示されたら問題なく動作しています。

『montage』コマンドで複数画像をグリッド上に並べて結合

基本コマンド

montage [画像パス] [画像2パス] … -tile [列数]x[行] -geometry [width]X[height]+[縦margin]+[横margin] [出力画像名]

元画像のサイズに合わせて結合し画像同士の間隔を15px開ける

montage ./9.png ./8.png ./7.png .6.png .5.png ./4.png ./3.png .2.png ./1.png -tile 3X3 -geometry +15+15 ./img.png

画像: ./9.png ./8.png ./7.png .6.png .5.png ./4.png ./3.png .2.png ./1.png

列数: 3

行数: 3

縦margin: 15(px)

横margin: 15(px)

出力画像名(形式、パス): out.png

正方形にサイズを指定して画像同士の間隔を指定せずに結合する

montage ./9.png ./8.png ./7.png .6.png .5.png ./4.png ./3.png .2.png ./1.png -tile 3X3 -geometry 1000X1000 ./img.png

画像: ./9.png ./8.png ./7.png .6.png .5.png ./4.png ./3.png .2.png ./1.png

列数: 3

行数: 3

横width: 1000(px)

縦height: 1000(px)

出力画像名(形式、パス): out.png

RMagickを使って複数画像をグリッド上に並べて結合する方法 – Ruby

gem 'rmagick'

プロジェクト内のGemfileに「gem ‘rmagick’」を追加するか

gem install rmagick

ローカル環境にgem install rmagickでインストールしてください。

require 'rmagick'

images = Magick::ImageList.new
clip_images = ["./img_1.png", "./img_2.png"...]
clip_images.each do |i|
    img_rmagic << Magick::Image.read(File.open(i))
end

montaged_image = images.montage do |img| 
    img.tile="3x3", self.geometry = "+0+0"
end
montaged_images.write("./img.webp")

clip_images内の配列に格納されているimg.pngをeachしてimg_rmagicに格納していきます。

次に、montageメソッドでimgを取り出し、3×3のグリッドで画像間隔0pxで結合し、最後にimg.webpとしてアウトプットしています。

最後に

ImageMagickのmontageコマンドを使って、複数画像をグリッド上に並べて結合する方法をご紹介しました。座標をずらして画像を重ねずに、簡単に整列画像を作る事ができました。各オプションを変更し、他の機能と組み合わせる事で、更にクオリテイの高い画像を自動で生成することができるようになります。

ぜひ、試してみてください!最後まで見ていただきありがとうございました。

Tagged in:

, ,