LoginSignup
0
0

More than 3 years have passed since last update.

【Python3】画像を特定のサイズで切り出したいときに使えるコード

Last updated at Posted at 2020-09-11

備忘録やOUTPUT的な意味での蓄積

作成目的

作業用の画像をすべてcropingしたいときに利用するコード

作成環境

・windows10
・Anaconda3
・python3.7
・Jupyter Notebook

ドキュメント

①cropしたいフォルダ名を入力
②folderがなければcurrent_folder内に、crop_folder を作成し画像をcropする
③すでに同じフォルダ名がある場合、誤操作を防ぐためにErrorになる

ライブラリの読み込み

All Necessary Libraries.py
import pathlib
import os
import shutil
import pprint
import numpy as np
from glob import glob
from PIL import Image
from tqdm import tqdm
from pathlib import Path

PG

crop_code
# フォルダー名を入力
folder_name = input('Enter the folder name :')
p = Path('C:/Users/H3051411/OUT/' + folder_name)
new_folder_name = '_crop_folder'
# 現在のpathから新しいpng_folderを作成
new_folder_path = os.path.join(p, new_folder_name)

# フォルダーがなければコピーして作成
if not os.path.exists(new_folder_path):
    # ディレクトリ内のファイルを取得
    os.makedirs(new_folder_path)

    # 新たなpathの拡張子をpngファイルに変換
    new_p = Path(new_folder_path)
    files = list(p.glob('*.*'))

    for i,f in tqdm(enumerate(files)):
        print('画像トリミング数:{0}/{1}'.format(i+1,len(files)))
        img = Image.open(f)
        imgname = os.path.basename(f)
        newfname = 'crop_' + imgname

        # .crop((左上x,左上y,右下x,右下y))で指定.
        # 左上の座標が(x, y) = (left, upper)、右下の座標が(x, y) = (right, lower)に対応する。    
        img_resize = img.resize((634, 9606), Image.LANCZOS)
        img_resize.crop((0, 0, 634, 935)).save(new_p/newfname, quality=95)
else:
    print('すでにfolderが存在します.')

課題

・関数化していない
・特定のサイズに切り出しているので汎用性は低い
・画像数が増えると時間かかりそう(未テスト)

まとめ

作業時間が1時間から1分になりました。
あと、もっといい書き方がある気がする。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0