Pythonで大量の画像ファイルをExcelに貼り付け

こんにちは、技術研究所の山﨑です。

ブログ初投稿!

さて、私は深層学習を活用した画像処理など行っておりますが、検証結果で大量の画像のアウトプットがあります。それらを検証結果のまとめとしてExcelに貼り付けたりするのですが、一つ一つ画像ファイルを挿入するのが・・・メンドイ。

そこで、指定したディレクトリ内の画像ファイルをすべてExcelに貼り付けるプログラムを、Pythonで作ってみました。

貼り付け要件

  • 指定したディレクトリ内の画像をすべて貼り付け
  • 指定したディレクトリにサブディレクトリがある場合、サブディレクトリ内の画像も再帰的に検索して貼り付け
  • Excelに画像を貼り付ける際、ディレクトリ毎に縦に並べて配置
  • Excelに画像を貼り付ける際、画像の大きさがまちまちでも、それぞれが重ならないようにセルの大きさを調整

作成したプログラム

プログラムの補足

4~8行目

必要なライブラリのインポート文です。「openpyxl」がExcelを操作するのに必要なライブラリです(ありがたい!)。また、「imghdr」はファイルが画像ファイルかどうかを判別する際に使用しています。

16~17行目

変数として配列「max_height」を定義しています。ディレクトリ毎に画像をExcelの列に縦に並べていくわけですが、各列の”とある行”の画像ファイルの大きさが異なる場合、一番大きい画像ファイルの高さの値を保持するためのものです。この値を利用して、各行の画像同士の重なりを防ぎます。

35行目

変数「max_width」を定義しています。その列に配置する画像で一番大きい画像ファイルの幅の値を保持するためのものです。この値を利用して、各列の画像同士の重なりを防ぎます。

50~51行目

画像の大きさに合わせて、Excelのセルの大きさを設定している部分になります。セルの単位はポイント、画像の単位はピクセルであることから、各式の最後に変換のために係数が掛けられています。画像が重ならないように、適宜値を変更ください。

細かい話になりますが、Excelでは高さはポイントで設定されているのに対し、幅は表示できる文字数で設定されているそうです。そのため、幅は標準のスタイルのフォントによるようです。ただ、その辺を調査するより、実際係数を変えてみて、画像が重ならないかどうかを見てみる方が早いと思います。

プログラムの実行例

例として、以下のように画像ファイルを配置して、プログラムを動かした後のExcelファイルへの出力結果を記載します。

画像ファイルがあるディレクトリ構造の例

画像ファイルがあるディレクトリ構造の例

画像ファイルがあるディレクトリ構造の例

出力結果の例

出力結果の例

出力結果の例

各列の1行目にはディレクトリ名が表示され、その下にそのディレクトリ内の画像ファイルが貼り付けられています。また、各画像が重ならないように並べることができました。

 

以上、備忘録を兼ねてちょっとしたプログラムのご紹介でした。何かのお役に立てたなら幸いです。

それでは。。。

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