【Windows】ChatGPT画像の白背景をPythonで透過PNGにする方法

ChatGPTを使って2Dゲーム用にモンスターの画像等を生成している人って結構多いんじゃないでしょうか。

しかし、残念な事にChatGPTでいくら「透過pngにして」と頼んでも何故か透過pngの画像を生成してくれないことがあるんですよね。

今回は、その際の対処法についてPythonを使って紹介したいと思います。

スポンサーリンク

【Windows】ChatGPT画像の白背景をPythonで透過PNGにする方法

私自身、大量に画像を生成させていたわけですが一番肝心な透過pngの指示をしていなかったために、生成した画像たちが全て白背景付になってしまいました。

最初から、生成し直すのは面倒だしちゃんと「透過pngでお願いね」といったところで生成出来たり、出来なかったりするのでもはや生成した画像をまとめて透過pngにするのが一番だよねという考えに至りました。

リモル

例として上のような画像があります。一見透過pngのように見えるわけですが・・・

はい、こんな感じでUnityにインポートしてシーン上に持っていくとこんな感じで、見事に白い背景も一緒にくっついてくるわけです。

というわけで、ここからが本題になりますが実際にPythonを使って透過pngにしていきましょう。

1. Pillowをインストールする

まず、画像を扱うためにPillowというライブラリを入れます。

Pythonの「Pillow(ピロー)」は、プログラミング言語Pythonでさまざまな画像処理を簡単に行うための標準的なライブラリです。
私は、WindowsユーザーですのでWindowsを利用している人を前提に紹介していきます。
まず、コマンドプロンプトを起動します。
python –version
と入力して
Python 3.12.5
こんな感じで表示されたらOKです。
もし、Pythonが使えないようならPythonが入っていなかったり、設定が足りないかもしれないので、Pythonを公式サイトからインストーラーを入れるようにしてください。
python -m pip install pillow
続いて、こちらを実行します。

2.フォルダを用意する

作業用フォルダを用意します。

例:

white_to_transparent/
├─ images/

imagesの中に、透過したい画像を入れます。

Pythonファイルを「white_to_transparent」フォルダの中に作ります。ファイル名は「batch_transparent.py」にします。

※拡張子がtxtになっていないか気をつけてください。

from PIL import Image
from pathlib import Path
import math

input_folder = Path("images")
output_folder = Path("output")
output_folder.mkdir(exist_ok=True)

image_extensions = [
    ".png", ".jpg", ".jpeg", ".webp",
    ".jfif", ".bmp", ".tif", ".tiff"
]

# 数字を大きくすると、より広い範囲の白っぽい色を透明にします
white_tolerance = 60

for input_path in input_folder.rglob("*"):

    if input_path.is_dir():
        continue

    if input_path.suffix.lower() not in image_extensions:
        print(f"スキップ: {input_path.name}")
        continue

    print(f"\n処理中: {input_path}")

    img = Image.open(input_path).convert("RGBA")
    pixels = img.load()

    width, height = img.size
    transparent_pixels = 0

    for y in range(height):
        for x in range(width):
            r, g, b, a = pixels[x, y]

            # 白 RGB(255,255,255) からどれくらい離れているか
            distance = math.sqrt(
                (255 - r) ** 2 +
                (255 - g) ** 2 +
                (255 - b) ** 2
            )

            if distance < white_tolerance:
                pixels[x, y] = (255, 255, 255, 0)
                transparent_pixels += 1

    output_path = output_folder / f"{input_path.stem}_transparent.png"
    img.save(output_path)

    print(f"保存しました: {output_path}")
    print(f"透明にしたピクセル数: {transparent_pixels}")

    if transparent_pixels == 0:
        print("注意: 透明化されたピクセルが0です。white_toleranceを上げてください。")

print("\nすべて完了しました。")

複数画像をまとめて透過pngにするコードは上の通りにします。

white_to_transparent/
├─ batch_transparent.py
├─ images/
│ ├─ logo1.png
│ ├─ logo2.jpg
│ ├─ icon.jpeg

すると、フォルダ構成がこんな感じになるかと思います。

後は、コマンドプロンプトでwhite_to_transparentに移動して

python batch_transparent.py
を入力してください。
透過pngに変換する
すると、こんな感じで透過pngに処理することが出来ます。
著者プロフィール
うんくん

IT系に特化した記事がメインです。(Unity多め。)
Udemy講師もやっています。よろしくお願いします。

※Amazonのアソシエイトとして、当メディアは適格販売により収入を得ています。

うんくんをフォローする
Python
スポンサーリンク
シェアする
うんくんをフォローする