ChatGPTを使って2Dゲーム用にモンスターの画像等を生成している人って結構多いんじゃないでしょうか。
しかし、残念な事にChatGPTでいくら「透過pngにして」と頼んでも何故か透過pngの画像を生成してくれないことがあるんですよね。
今回は、その際の対処法についてPythonを使って紹介したいと思います。
【Windows】ChatGPT画像の白背景をPythonで透過PNGにする方法
私自身、大量に画像を生成させていたわけですが一番肝心な透過pngの指示をしていなかったために、生成した画像たちが全て白背景付になってしまいました。
最初から、生成し直すのは面倒だしちゃんと「透過pngでお願いね」といったところで生成出来たり、出来なかったりするのでもはや生成した画像をまとめて透過pngにするのが一番だよねという考えに至りました。

例として上のような画像があります。一見透過pngのように見えるわけですが・・・
はい、こんな感じでUnityにインポートしてシーン上に持っていくとこんな感じで、見事に白い背景も一緒にくっついてくるわけです。
というわけで、ここからが本題になりますが実際にPythonを使って透過pngにしていきましょう。
1. Pillowをインストールする
まず、画像を扱うために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に移動して


