Python を使って画像の一部を切り出して保存する方法をご紹介します。
Python 3 の場合は Python 2 で有名な画像処理ライブラリ PIL のフォークである Pillow を使う形がシンプルでかんたんです。
PIL の Image.open()
で元画像を取得して、 crop()
メソッドに切り出し場所の座標を渡すと画像を切り出せます。あとは save()
で別ファイルとして保存すれば OK です。
from PIL import Image
infile = '01.jpg'
outfile = 'out-01.jpg'
area = (left, top, right, bottom)
img = Image.open(infile)
cropped_img = img.crop(area)
cropped_img.save(outfile)
例えば、画像の中心を切り出す場合のサンプルコードは次のようになります。
# coding: utf-8
"""画像の中心部分を指定されたサイズ切り取った画像を生成する
"""
from pathlib import Path
from PIL import Image
crop_info = (
# 画像 01.jpg は横 200px - 縦 100px で切り出す
('01.jpg', 200, 100),
# 画像 02.jpg は横 300px - 縦 500px で切り出す
('02.jpg', 300, 500),
)
def main():
print('started.')
crop_images(crop_info, 'out-')
print('finished.')
def crop_images(crop_info, prefix):
for infile, width, height in crop_info:
path = Path(infile)
outfile = prefix + path.name
crop_image(infile, outfile, width, height)
def crop_image(infile, outfile, width=None, height=None):
img = Image.open(infile)
width_orig, height_orig = img.size
if not width:
width = width_orig
if not height:
height = height_orig
center_h = width_orig / 2
center_v = height_orig / 2
width_half = width / 2
height_half = height / 2
# 中心の切り出し場所の座標を計算する
left = center_h - width_half
top = center_v - height_half
right = center_h + width_half
bottom = center_v + height_half
area = (left, top, right, bottom)
cropped_img = img.crop(area)
cropped_img.save(outfile)
if __name__ == "__main__":
main()
このスクリプトを実行すると、 01.jpg
が次のような画像だった場合・・・
Photo by Terry zhouCC BY-NC-SA
次のような横 200px 、縦 100px の画像 out-01.jpg
が生成されます。
メソッド名なども直感的でわかりやすく便利ですね。