Portfolio

画像の幅と高さを取得するツール

  • Co
  • De
  • Ph
  • Il
  • Ot

今回はちょっとプログラミングの話題。width-height

サイトの制作でスライスした画像のサイズを取得してimg要素に含めたい時ってしょっちゅうなんですがこれがめんどくさい。
そこで私はちょっとしたツールを作って利用しています。

画像ファイルを選択しておいて右クリックの「送る」でこのツールに放り込むと、画像サイズが含まれたimgタグを作ってクリップボードに張ってくれます。
ちなみに私の作業環境はウィンドウズのVistaと7です。

このツールちょっと前にVisualStudioのC#で作ったものですが、さきほどPythonで作り変えてみました。
Pythonも使うの久しぶりだったので文法思い出しつつ。

どってことないプログラムですが一つ工夫しているのは複数選択した画像をいっぺんに処理できることかな?

一つ注意はクリップボードへの処理にcopy.exeを使っているのでVista以降のウィンドウズじゃないとうごきません。
他の環境の方はクリップボードの処理の部分を変えてみてください。
それとPythonだけじゃなくてPython Imaging Library (PIL)も必要です。

ファイルでも置いておきます。
get_image_size.txt

以下の記事参考にさせて頂きました。ありがとう。(ってほとんどそのまんまなんだよね)
ヲドリテヒヅル クリップボードにテキストをコピーする + subprocess
画像サイズをPythonで取得してみた – 牌語備忘録 – pygo

これもよく忘れるので参考に。
Windows7で右クリック「送る」メニューの編集方法(SendToフォルダの在り処) – 半端な日記

# coding:utf-8
import subprocess
import sys
import os
import PIL.Image

argvs = sys.argv
argvs.pop(0)

def get_image_size(path,dir = '/images/'):
 try:
  f = PIL.Image.open(path)
  file_name = dir + os.path.basename(path)
  img = '<img alt="" src="%s" width="%d" height="%d" />' % (file_name, f.size[0], f.size[1])
  print img
  return img
 except Exception as e:
  print e.message
  return ''

def copy_to_clipboard(text):
 try:
  p = subprocess.Popen(['clip'], stdin=subprocess.PIPE)
  p.stdin.write(text)
  p.stdin.close()
  retcode = p.wait()
  return True
 except Exception as e:
  print e.message
  return False

copy_to_clipboard("\n".join(map(get_image_size,argvs)))

開発環境:Python2.7 、PIL1.17、win Vista