デジカメで撮った写真をブログ等に投稿するにあたって、避けられない(した方がいい)けれど面倒くさい作業に、画像のリサイズがあります。
デジカメの写真は概して容量が大きく、そのままアップロードしてしまうと、読み込み速度を低下させたり、サーバーのアップロード可容量を圧迫してしまいます。
じぶんはこれまでwindowsのpaintツールを使って一枚一枚ちまちまリサイズしていたのですが、これが面倒くさい。
Pythonで数行スクリプトを書くと、あっという間に自動で処理してくれましたので、記録しておこうと思います。
スクリプト
メモ書き
・リサイズしたい写真のファイルパスを取得するには、glob.glob(パス)を用いる。
import globして、上記スクリプトでは、Picturesファルダ以下のAlbumフォルダ以下のすべてのjpgファイルを取得するようになっている。
*がすべて、という意味を表す。
パスのバックスラッシュ(\)はエスケープを入れないと正規表現とみなされてしまうため、\\とする。
globで得られるのは、albumフォルダ内の「ファイル名」ではなく、「ファイルパス」。
・リサイズした画像を保存する場所を新たに作るには、import osして、os.mkdir(パス)を用いる。
上記スクリプトでは、Picturesフォルダ内に、新たにresizeフォルダを作成している。パスの最後に新たに作成したいフォルダ名を記述する。
・imgListにはそれぞれの画像のパスが入っているので、forループで中身を1枚1枚取り出す。
保存するときに、リサイズ画像の名前をつけるときのために、enumerateでindexも取得しておくと便利。
保存は”file{}”.format(n+1)としておくと、1枚目の写真には”file1″2枚目の写真には”file2″といった名前を付けて保存してくれる。
※サイズは、もとの写真が何対何の縦横比であるのか調べておく。もとの写真が4:3なのに、16:9でリサイズしてしまうと残念なことになる。
・リサイズ処理の流れは
Image.open(パス)で画像を指定する → img.resize((サイズ))でリサイズする。
img.resize()の引数には、サイズのほかにフィルタ(LANCZOS等)を指定できる。
高品質∧低速 ⇔ 低品質∧高速 をフィルタで選べる。
詳細はこちら
(とはいえフィルタは設定しなくてもリサイズできる。)