ほぼ老人のプログラミング日記

定年後の平凡なサラリーマンの趣味の日記

Python でイメージの回転と切り抜き

最近、本の整理をはじめました。大した量は持っていませんが、2LDK の賃貸マンションで置く場所がないので定期的に整理しています。
整理の方法としては、ブックオフに持っていって売ってしまうのが簡単なのですが、ハンコが押してあったり、技術書が多かったりしてなかなか売りづらいものがあるので、可能なものはスキャンして PDF にして保存するようにしています。
ただ、専用のドキュメントスキャナのような気の利いたものは持っていないので複合機の ASF を利用してちまちまとスキャンしています。
ちなみにこれです。

cweb.canon.jp

スキャン自体は時間をかければできるので問題ないのですが、ブルーバックス等の小さめの本だとスキャンサイズが設定できないため大きめの用紙サイズを指定してスキャンした後に切り抜くようなことをする必要があります。真っ直ぐにスキャンできていれば適当なユーティリティを探してくれば良いと思うのですが、下の図のように傾いてスキャンされてしまっているものが多く、傾きを直してから切り抜く必要があります。

すこし、フリーソフトウェアを探して見たのですが、良さそうなのが簡単に見つからなかったので Python で作ることにしました。
Python 画像 回転」とかで Google で検索すると Pillow というものを使うと回転や切り抜きができそうでしたので試してみました。

from PIL import Image

with Image.open('./image_cropping/input/IMG01_0015.jpg') as im:
    rotated = im.rotate(-2, resample=Image.Resampling.BICUBIC, expand=1)

    cropped = rotated.crop((100, 235, 1850, 3057))
    cropped.save('./image_cropping/output/IMG01_0015.jpg')
  • 回転してから切り抜く
  • rotate メソッドに expand=1 を指定して画像全体を残すようにした

バッチリです。