※この原稿の内容は、PythonのコードをWindows PCを使って検証していますので、あらかじめご了承ください。
Pythonを使って画像を加工する方法を学びたい方に向けて、簡単なスクリプトを紹介します。今回作成するのは、画像を縦に分割するプログラムです。このスクリプトを理解すれば、PIL(Pillow)ライブラリやPathlibの基本的な使い方を学ぶことができます。
今回のスクリプトは、指定したフォルダ内の画像(PNG・JPG)を指定した回数で縦に分割し、分割した画像を別のフォルダに保存するものです。
実行の流れ
分割数を指定
画像フォルダを設定(入力フォルダ、出力フォルダ)
画像を1枚ずつ読み込む
画像を指定した回数で縦に分割
分割後の画像を保存
完了メッセージを表示
このスクリプトを実行するには、以下の環境が必要です。
Python 3.x
Pillow(画像処理用ライブラリ)
Pillowがインストールされていない場合は、以下のコマンドでインストールできます。
pip install Pillow
では、実際のコードを見ながら解説していきます。
from pathlib import Path
from PIL import Image
from itertools import chain # 複数の画像フォーマットを取得するために使用
# 設定:縦に何分割するか
NUM_SPLITS = 2 # ← ここを変更すれば分割数を変更可能
# フォルダ設定
input_folder = Path(r"C:\image_div\before")
output_folder = Path(r"C:\image_div\after")
output_folder.mkdir(exist_ok=True) # 出力フォルダがなければ作成
# 画像ファイルを取得(PNGとJPG)
image_files = chain(input_folder.glob("*.png"), input_folder.glob("*.jpg"))
for image_path in image_files:
img = Image.open(image_path) # 画像を開く
width, height = img.size # 画像のサイズを取得
split_height = height // NUM_SPLITS # 1つの分割画像の高さを計算
for i in range(NUM_SPLITS):
box = (0, i * split_height, width, (i + 1) * split_height) # 分割の座標を設定
split_img = img.crop(box) # 画像を分割
output_path = output_folder / f"{image_path.stem}_part{i+1}{image_path.suffix}" # 出力パスを設定
split_img.save(output_path) # 分割画像を保存
print("処理完了!")
from pathlib import Path
from PIL import Image
from itertools import chain
Pathlib
を使ってフォルダのパスを管理
Pillow
の Image
を使って画像を処理
itertools.chain()
を使って PNG と JPG の両方を対象に
NUM_SPLITS = 2
画像を 何分割するか を指定(ここでは2分割)
input_folder = Path(r"C:\image_div\before")
output_folder = Path(r"C:\image_div\after")
output_folder.mkdir(exist_ok=True)
input_folder
には分割する画像を入れたフォルダ
output_folder
には分割後の画像を保存するフォルダ
mkdir(exist_ok=True)
でフォルダがなければ作成
image_files = chain(input_folder.glob("*.png"), input_folder.glob("*.jpg"))
glob("*.png")
と glob("*.jpg")
で PNG・JPG の両方を取得
chain()
でまとめて処理できるようにする
for image_path in image_files:
img = Image.open(image_path)
width, height = img.size
split_height = height // NUM_SPLITS
画像を開いて width
(幅)と height
(高さ)を取得
split_height = height // NUM_SPLITS
で1つの分割画像の高さを計算
for i in range(NUM_SPLITS):
box = (0, i * split_height, width, (i + 1) * split_height)
split_img = img.crop(box)
output_path = output_folder / f"{image_path.stem}_part{i+1}{image_path.suffix}"
split_img.save(output_path)
box = (0, i * split_height, width, (i + 1) * split_height)
で分割エリアを決める
img.crop(box)
で指定エリアを切り出し
split_img.save(output_path)
で保存
print("処理完了!")
処理がすべて完了したらメッセージを出力
C:\image_div\before
に分割したい画像を入れる
コマンドプロンプトを開き、スクリプトのあるフォルダへ移動する(例: cd C:\image_div
)
以下のコマンドを実行する
python image_div.py
C:\image_div\after
に分割された画像が出力される
このスクリプトを通じて、Pythonの画像処理に関する基本を学べました。
Pillow
を使って画像を開く・切り出す・保存する
Pathlib
でフォルダの管理を行う
itertools.chain()
で複数のファイルをまとめて処理する
Python初心者でも簡単に応用できるので、ぜひ試してみてください!