mei_13のPython講座 ロゴ

【解説】Pythonで画像を自在に操る!画像処理ライブラリ「Pillow」完全ガイド




🐍 初心者歓迎!月額4,000円で質問し放題のPython講座
(1時間4,000円の伴走型ビデオチャット指導も受付中!)
🚀 講座の詳細を見る 📩 質問・お問い合わせ

Pythonで画像を自在に操る!画像処理ライブラリ「Pillow」完全ガイド


Yukiのアイコン
【Yuki】 Hirokiくん、こんにちは。今日はPythonで画像処理を行う際に欠かせないライブラリ、「Pillow(PIL)」についてお話ししようと思います。画像のリサイズや加工を自動化できると、作業の効率がとても上がるんですよ。


Hirokiのアイコン
【Hiroki】 Yukiさん、よろしくお願いします!画像処理って難しそうなイメージがありますが、Pythonで簡単にできるものなんですか?


Yukiのアイコン
【Yuki】 ええ、大丈夫ですよ。Pillowはもともと「PIL (Python Imaging Library)」という歴史あるライブラリから派生したもので、初心者の方でも直感的に扱えるように設計されています。一つひとつのコードはシンプルなので、一緒に見ていきましょうね。

Pillowのインストール


Yukiのアイコン
【Yuki】 まずは、Pillowを使えるように準備しましょう。標準ライブラリではないので、pipを使ってインストールする必要があります。ターミナルやコマンドプロンプトで以下のコマンドを入力してみてください。

pip install Pillow


Hirokiのアイコン
【Hiroki】 インストールできました!これで準備完了ですね。


Yukiのアイコン
【Yuki】 はい。プログラムの中で使うときは、from PIL import Imageという形でインポートするのが一般的です。名前が「Pillow」なのにインポートする名前が「PIL」なのは、昔のライブラリとの互換性を保つためなんですよ。

画像の読み込みと基本情報の取得


Yukiのアイコン
【Yuki】 まずは、画像を開いてその情報を表示してみましょう。基本的な使い方はこうなります。

from PIL import Image

# 画像ファイルを開く
try:
    img = Image.open('sample.jpg')

    # 画像の情報を表示
    print(f"フォーマット: {img.format}")
    print(f"サイズ: {img.size}")  # (幅, 高さ) のタプル
    print(f"モード: {img.mode}")    # RGB, RGBA, L(白黒)など

    # 画像を画面に表示(確認用)
    img.show()
except FileNotFoundError:
    print("指定した画像ファイルが見つかりませんでした...")


Hirokiのアイコン
【Hiroki】 img.sizeで幅と高さが分かるんですね。img.modeの「RGB」というのは何ですか?


Yukiのアイコン
【Yuki】 それは、色の表現形式のことです。「RGB」は赤・緑・青の三原色で構成されていることを示しています。透明度を含む画像の場合は「RGBA」になったりしますね。こうした情報の取得は、後の処理でサイズを調整するときにとても大切になると思います。

画像のリサイズとリサンプリング


Yukiのアイコン
【Yuki】 次に、画像を指定した大きさに変更する「リサイズ」を試してみましょう。SNSに投稿したり、Webサイトに載せたりするときによく使われる機能です。

# サイズを指定してリサイズ (幅, 高さ)
resized_img = img.resize((400, 300))

# 縦横比を維持したままリサイズ(サムネイル作成)
img.thumbnail((200, 200))

# 保存
resized_img.save('resized_sample.png')


Hirokiのアイコン
【Hiroki】 resizethumbnailの使い分けはどうすればいいんでしょうか?


Yukiのアイコン
【Yuki】 resizeは指定したサイズに強制的に変更するため、元の画像と比率が違うと少し伸び縮みしてしまうかもしれません。一方で、thumbnail縦横比を維持したまま、指定した枠内に収まるように計算してくれるので、写真を扱うときは便利ですよ。

画像の回転と反転


Yukiのアイコン
【Yuki】 画像の向きを変えるのも簡単です。

# 90度回転
rotated_img = img.rotate(90)

# 左右反転
flipped_img = img.transpose(Image.FLIP_LEFT_RIGHT)

# 上下反転
top_bottom_flipped = img.transpose(Image.FLIP_TOP_BOTTOM)


Hirokiのアイコン
【Hiroki】 スマホで撮った写真が横向きになっちゃったときとかに、プログラムで一気に修正できそうですね!


Yukiのアイコン
【Yuki】 その通りです。たくさんの画像を一括で処理するのは、プログラムが得意とするところですからね。

画像の切り抜き(クロッピング)


Yukiのアイコン
【Yuki】 画像の一部だけを切り出す「クロッピング」もよく使われます。切り出す範囲は「左、上、右、下」の座標をタプルで指定します。

# (left, upper, right, lower) の座標で指定
# 左上の座標(100, 100)から右下の座標(400, 400)までを切り抜く
box = (100, 100, 400, 400)
cropped_img = img.crop(box)
cropped_img.save('cropped.jpg')


Hirokiのアイコン
【Hiroki】 座標の指定が少し複雑に感じますが、左上を(0, 0)として、そこからのピクセル数で考えるんですね。


Yukiのアイコン
【Yuki】 ええ、そうです。慣れるまでは少し戸惑うかもしれませんが、図を描いて考えると分かりやすいかもしれません。

フィルタ処理と色調補正


Yukiのアイコン
【Yuki】 Pillowには、画像をぼかしたり、輪郭を強調したりするフィルタ機能も備わっています。ImageFilterモジュールを使います。

from PIL import ImageFilter

# ぼかし(ガウスぼかし)
blurred_img = img.filter(ImageFilter.GaussianBlur(radius=2))

# 輪郭抽出
contour_img = img.filter(ImageFilter.CONTOUR)

# グレースケール(白黒)変換
gray_img = img.convert('L')


Hirokiのアイコン
【Hiroki】 おお、一気に加工っぽくなりました!白黒にするだけで雰囲気が変わりますね。


Yukiのアイコン
【Yuki】 そうですね。こうした機能は、大量の画像を機械学習のデータセットとして使う際の前処理などでも、静かに、でも確実に役立っているんですよ。誰かの目的を達成するための小さな手助けができるツールというのは、とても素敵だと思います。

画像へのテキスト描画


Yukiのアイコン
【Yuki】 画像に文字を入れることもできます。これにはImageDrawImageFontを使います。

from PIL import ImageDraw, ImageFont

# 描画用のオブジェクトを作成
draw = ImageDraw.Draw(img)

# フォントの設定(フォントファイルのパスとサイズを指定)
# Windowsなら 'C:/Windows/Fonts/arial.ttf' など
try:
    font = ImageFont.truetype("arial.ttf", 36)
except IOError:
    font = ImageFont.load_default()

# テキストを描画 (座標, テキスト, フォント, 色)
draw.text((50, 50), "Hello Python!", font=font, fill=(255, 255, 255))

img.save('text_added.jpg')


Hirokiのアイコン
【Hiroki】 画像に直接文字が書けるなら、メモを自動で入れたりするスクリプトが作れそうです。


Yukiのアイコン
【Yuki】 はい、バナー画像の自動生成などにも応用できますね。

最新のAI API(Gemini)との連携


Yukiのアイコン
【Yuki】 最近では、加工した画像をAIに解析させることも一般的になっています。例えば、Googleの最新AIモデル「gemini-3-flash-preview」を使って、Pillowで加工した画像の内容を読み取ることもできます。ライブラリは最新のgoogle-genaiを使うのが良いでしょう。

from google import genai
from google.genai import types

client = genai.Client(api_key="YOUR_API_KEY")

# Pillowで加工した画像を保存し、それをAIに渡す例
# (ここでは簡易的にファイルパスを渡す方法を示します)
response = client.models.generate_content(
    model="gemini-3-flash-preview",
    contents=[
        "この画像には何が写っていますか?",
        types.Part.from_uri(file_uri="gs://your-bucket/sample.jpg", mime_type="image/jpeg")
    ]
)

print(response.text)


Hirokiのアイコン
【Hiroki】 Pillowで画像をAIが読み取りやすいサイズや形式に整えてから、Geminiに渡すという流れですね。


Yukiのアイコン
【Yuki】 その通りです。AIも万能ではないので、あらかじめPillowで明るさを調整したり、余計な部分を切り抜いてあげたりすることで、解析の精度が上がることもあるんですよ。

まとめ


Hirokiのアイコン
【Hiroki】 Yukiさん、ありがとうございました!Pillowだけでこんなにたくさんのことができるなんて驚きました。


Yukiのアイコン
【Yuki】 喜んでもらえてよかったです。Pillowは他にも画像の合成や透明度の操作など、奥が深いライブラリです。まずは身近な写真のサイズ変更から始めてみると、プログラミングの楽しさがより実感できるかもしれません。


Hirokiのアイコン
【Hiroki】 はい、まずは自分のスマホの写真を整理するプログラムを書いてみます!


Yukiのアイコン
【Yuki】 それはいいアイデアですね。もし分からないことがあったら、いつでも聞いてください。応援しています。


参考リファレンス: - Pillow (PIL Fork) Documentation - Python Package Index (PyPI) - Pillow - Google GenAI SDK Documentation



< Pandas-unique()
コラム一覧に戻る
re.findall() >

この記事では基礎を解説しましたが、実務においては「もっと複雑なデータを扱いたい」「独自のシステムに組み込みたい」といった、個別の課題に直面することも多いはずです。

「自分で書く時間は最小限に抑え、プロの品質でツールを完成させたい」という方は、ぜひ一度ご相談ください。

「教わる」だけでなく「形にする」パートナーとして、フリーランスエンジニアのmei_13が最短ルートでの解決をサポートします。

➡ ココナラで制作・相談を依頼する(見積もり無料)


初心者から始められるPythonレッスン

プログラミング未経験者・初心者歓迎!
月額4,000円で質問し放題!!
● 完全オンライン
● 翌日までには必ず返信
● 挫折しない独自の学習メソッド
● 圧倒的高評価!!
テキストベースで時間を選ばない
4,000円/60分伴走型ビデオチャット指導も可能
● 高品質なサンプルコード
詳細はこちら

📩 質問・お問い合わせはこちら



AIアシスタント Yuki