「大量の画像をまとめて表示したい」
「タイル画像を生成するために怪しいフリーソフトやオンラインツールを使いたくない」
このような場合には、この記事の内容が参考になります。
この記事では、大量の画像からタイル画像を簡単に作成する方法を解説しています。
本記事の内容
- タイル画像とは?
- ファイル名の一括変更(連番化)
- ファイルの結合
それでは、上記に沿って解説していきます。
タイル画像とは?
使うシーンによって、タイル画像にはいろいろな意味があるでしょう。
ここでは、複数の画像をまとめた画像をタイル画像と表現します。
この記事のアイキャッチ画像(サムネイル)が、まさにタイル画像になります。
このようなタイル画像を作成するには、いろいろな方法があります。
根気よく1枚づつ結合する場合が、あるかもしれません。
また、専用のツールを使って一気に結合することもあるでしょう。
今回は、ImageMagickを利用した方法を説明します。
そのための準備として、Pythonも利用します。
手順として、以下となります。
- ファイル名の一括変更(連番化)
- ファイルの結合
したがって、開発者やITに詳しい人向けの内容になります。
ただ、次のツールがインストールできているなら、問題なく対応はできるはずです。
以上、タイル画像について説明しました。
次は、ファイル名の一括変更(連番化)について説明します。
ファイル名の一括変更(連番化)
ImageMagickを使ってファイルを結合するには、結合するファイルの名前が連番である必要があります。
しかし、通常ファイル名は連番というわけではありません。
AUTOMATIC1111版web UIでは、最近では連番のように出力されるようにはなっています。
ただ、ImageMagickで扱いやすい連番ではありません。
したがって、まずはファイル名を扱いやすい連番にリネームします。
その際、画像は特定のフォルダにまとめて保存されていることが前提です。
その状況であれば、次のコードで一撃となります。
import os def rename_files_in_folder(folder_path): i = 1 for file_name in os.listdir(folder_path): file_path = os.path.join(folder_path, file_name) if not os.path.isfile(file_path): continue file_ext = os.path.splitext(file_name)[1].lower() if file_ext not in ['.jpg', '.jpeg', '.png', '.gif']: continue new_file_name = '{}{}'.format(i, file_ext) new_file_path = os.path.join(folder_path, new_file_name) os.rename(file_path, new_file_path) i += 1 folder_path = 'フォルダのパス' rename_files_in_folder(folder_path)
上記コードにフォルダのパスを設定して、実行します。
そうすると、一瞬で次のようにファイル名が変更されます。
以上、ファイル名の一括変更(連番化)を説明しました。
次は、ファイルの結合を説明します。
ファイルの結合
ImageMagickは事前にインストールしておきましょう。
準備が整ったら、画像が保存されているフォルダに移動します。
そこで、次のコマンドを実行するだけです。
montage -geometry 80% -tile 6x3 %d.png[1-18] output.png
今回の例では、画像は全部で18枚あります。
だから、[1-18]と設定しています。
そして、タイルは横に6枚並べます。
結果的に3行となり、「-tile 6×3」という設定になります。
「-geometry 80%」は、元の画像を80%のサイズに変更しています。
80%のサイズに変更してから、結合することになります。
コマンドの処理自体は、すぐに終わります。
処理が終わっても、何も表示はしてくれません。
>montage -geometry 80% -tile 6x3 %d.png[1-18] output.png
ただ、このままだとサイズがバカでかいです。
よって、ImageMagickを利用して画質とサイズを落とします。
同時にPNGからJPGにも変換しましょう。
convert output.png -quality 80 -resize 1000 output_1000.jpg
タイル画像ができました。
画像の区切りが欲しい場合は、次のようなコマンドを実行します。
montage -geometry 80% -border 1x1 -bordercolor #FFFFFF -tile 6x3 %d.png[1-18] output_border.png convert output_border.png -quality 80 -resize 1000 output_border_1000.jpg
以上、ファイルの結合を説明しました。