本日は「【Pythonで画像処理】Pillowを使用してシンボル一覧を作成する」です。Pillowとは、Pythonの画像処理ライブラリで、Python Imaging Library (PIL)のforkプロジェクトです。PILは開発が停滞しPython2.7までの対応にとどまっていますが、PillowはPython3.3に対応しています。これからはPILではなくPillowを使用した方がいいと思います。
さて、GISといえば様々なマップ表現を行うことができますが、その中でもシンボルというのはかなり重要な要素です。通常、マップにポイントを配置した場合、このようになります。
ただのポイントですね。しかし、このポイントが一体何なのかよくわかりませんね。シンボルファイルを使用してこれを一目でどの目標物か識別できるようにすることができます。
ポイントを蛇のマークにしてみました。例えば、コンビニのシンボルはこれ、ガソリンスタンドのシンボルはこれ、といったように定義しておくと直感的にマップがわかりやすくなりますね。実際に業務を行っていると、何十、何百ものシンボルを使用することになりますが、その一覧を作成するのはなかなか難儀な話です(一つ一つが画像になっている場合などは特に)。そこで、対象のシンボルファイルを一覧にした画像を作成してみます。
※今回、元ファイルの拡張子はemfにしますが、通常の画像ファイルなら何でも大丈夫です。
ディレクトリ構成は以下のようなものを前提としています。
各フォルダにこのような画像を配置しています。
まずは以下サイトでPillowをダウロードしてインストールを行います。
https://pypi.python.org/pypi/Pillow/2.7.0
ソースは以下です。
# -*- coding: utf-8 -*- from PIL import Image,ImageDraw,ImageFont import glob #対象ディレクトリ dir = 'D:\python\Symbol' canvas = Image.new('RGB', (1600, 1600), (255, 255, 255)) x = 0 y = 0 #対象ディレクトリをループ for name in glob.glob('D:\python\Symbol/*'): #対象画像でループ for n in glob.glob(name+'/*.emf'): #キャンバスの高さの限界に達したらスライド #対象画像(300×300),テキスト画像(400,100) if y != 0 and y % 1600 == 0: y = 0 x += 400 #対象画像をサムネイルにする a_jpg = Image.open(n, 'r') canvas.paste(a_jpg, (x, y)) y += 300 #対象画像挿し込むテキストの設定 imgTxt = Image.new('RGB', (400,100),(255, 255, 255)) draw = ImageDraw.Draw(imgTxt) #フォントの設定 font = ImageFont.truetype('C:\Windows\Fonts\msgothic.ttc', 48) #ディレクトリ名からファイル名を取得する f = n[n.rfind("\\"):] f = f[1:] #対象画像のファイル名をサムネイルに挿し込む draw.text((0, 0), f.decode('cp932'), font = font, fill='#000000') canvas.paste(imgTxt, (x, y)) y += 100 canvas.save('D:\python\Symbol\sample.jpg', 'JPEG', quality=100, optimize=True)
結果を見てみます。
シンボルファイルが一覧になりました。また、おまけでファイル名も画像として挿し込みました。こんな簡単に画像処理ができるなんて、なんて日だ!
以上、本日は「【Pythonで画像処理】Pillowを使用してシンボル一覧を作成する」でした。