본문으로 건너뛰기

챗GPT·GPT Image 투명 배경 체크무늬: 가짜 투명 판별과 복구

색 배경 위에서도 체크무늬가 남으면 그려진 가짜 투명입니다. API는 background를 transparent로, 형식은 PNG·WebP로 지정하고, 챗GPT 파일은 알파 값으로 확인하세요.

LaoZhang AI Team게시9 분 소요
목차
빨간 머그컵 스티커를 파란 배경 위에 올렸을 때 배경색이 비치는 진짜 투명과 체크무늬가 따라오는 가짜 투명을 위아래로 비교한 표지

투명 배경을 요청했는데 흰색·회색 체크무늬가 깔린 이미지를 받았다면, 그 파일을 빨간색이나 파란색 배경 위에 올려 보세요. 배경색이 비치면 진짜 투명이고, 체크무늬가 그대로 따라오면 체크무늬가 그림의 일부로 그려진 가짜 투명입니다. 투명 여부는 저장된 파일이 결정합니다. 미리보기 화면이나 .png라는 확장자로는 알 수 없습니다.

경로별 답은 다음과 같습니다(2026년 10월 2일 기준).

  • GPT Image API: 요청에 background: "transparent"를 넣고 output_format을 png 또는 webp로 지정합니다. 프롬프트에 "투명 배경"이라고 쓰는 것만으로는 이 파라미터가 설정되지 않습니다.
  • 챗GPT(ChatGPT): 켜고 끄는 투명 설정이 없어 말로 요청할 수밖에 없습니다. 그래서 저장한 파일을 직접 확인해야 합니다.
  • 이미 체크무늬가 박힌 이미지: 피사체 색이 진하고 윤곽이 또렷하면 아래 스크립트로 살릴 수 있습니다. 피사체가 흰색·밝은 회색이거나 머리카락·유리처럼 가장자리가 부드러우면 다시 만드는 편이 낫습니다.

아래 스크립트 두 개의 실행 결과는 Pillow로 그린 합성 이미지에 로컬에서 돌려 얻은 것입니다. 챗GPT에서 이미지를 생성하거나 유료 API를 호출해서 얻은 결과가 아닙니다. 챗GPT와 API가 무엇을 돌려주는지에 관한 설명은 OpenAI 공식 문서와 사용자 제보에 근거하며, 근거는 해당 문장에 함께 적혀 있습니다.

체크무늬 두 종류: 색 배경 위에서도 남으면 그려진 픽셀입니다

체크무늬에는 두 종류가 있고, 그중 하나만 투명을 뜻합니다.

첫 번째는 포토샵, Figma, 이미지 뷰어가 투명한 부분 뒤에 깔아 주는 표시용 무늬입니다. 파일 안에는 들어 있지 않고, 프로그램이 "여기는 비어 있다"는 뜻으로 화면에만 그립니다. 이 파일을 다른 배경 위에 올리면 무늬는 사라지고 아래 배경이 보입니다.

두 번째는 이미지 모델이 흰색과 회색 사각형을 실제 픽셀로 그려 넣은 무늬입니다. 이 경우 파일에는 투명한 픽셀이 하나도 없습니다. 어디에 올려도 체크무늬가 함께 따라옵니다.

둘을 가르는 것은 알파 채널입니다. 알파 채널은 픽셀마다 빨강·초록·파랑 값 외에 하나 더 붙는 투명도 값으로, 0이면 완전히 투명하고 255면 완전히 불투명합니다. 진짜 투명 PNG는 배경 픽셀의 알파가 0이고, 가짜 투명 이미지는 모든 픽셀의 알파가 255입니다.

코드 없이 확인하려면 PowerPoint, Canva, Figma처럼 배경색을 바꿀 수 있는 프로그램에 원본 파일을 넣고 슬라이드나 캔버스 배경을 진한 색으로 바꿉니다. 결과는 세 가지로 나뉩니다.

색 배경 위에 올린 결과파일 상태다음 행동
배경색이 비친다진짜 투명어두운 배경에서 가장자리에 흰 테가 남는지 확인
흰색·회색 체크무늬가 그대로 있다체크무늬가 픽셀로 그려짐다시 생성하거나 아래 복구 스크립트 실행
흰색이나 검은색 사각형이 보인다불투명한 단색 배경생성 요청과 저장·변환 과정을 점검

확인은 반드시 내려받은 원본 파일로 합니다. 화면을 캡처한 스크린샷은 화면에 보이던 모습을 새 불투명 이미지로 기록한 것이라, 원본이 투명했더라도 스크린샷은 투명하지 않습니다.

체크무늬가 생긴 단계 찾기: 챗GPT, API, 중계 서비스, 저장 과정

문제가 생길 수 있는 곳은 네 군데이고, 증상으로 대부분 가려낼 수 있습니다.

이미지를 만든 경로가장 먼저 볼 것원인이 이쪽일 때 고칠 곳
챗GPT 앱·웹저장한 파일의 알파 값요청 문구를 바꿔 새로 생성. 설정할 파라미터는 없음
OpenAI API 직접 호출요청에 background가 들어갔는지, 응답의 background와 output_format 값background: "transparent"와 png·webp 지정
중계 API·자동화 도구그 서비스가 background 파라미터를 받아서 전달하는지파라미터 지원을 문서로 밝힌 모델·경로로 변경
저장·변환·공유 이후변환 전 원본과 비교JPG 변환, 스크린샷, 재인코딩되는 전송 경로를 피함

순서는 뒤에서부터 보는 편이 빠릅니다. 원본 파일은 투명한데 메신저로 보낸 뒤에만 배경이 생겼다면 생성 쪽은 문제가 없습니다. 원본부터 체크무늬가 박혀 있다면 생성 단계로 올라가 요청을 점검합니다.

챗GPT, OpenAI API 직접 호출, 중계 API·자동화 도구, 저장·변환·공유 이후의 네 경로별로 가장 먼저 볼 것과 고칠 곳을 정리한 진단 표

챗GPT에서 투명 배경 PNG 받기: 말로 요청하고 파일로 확인

챗GPT에서는 투명 배경을 문장으로 요청합니다. OpenAI 도움말은 챗GPT 이미지가 지시에 따라 "배경을 투명하게 만들 수 있다"고 안내하지만, 투명을 켜는 스위치나 저장되는 파일 형식, 미리보기가 투명한 부분을 어떻게 표시하는지는 도움말에 적혀 있지 않습니다(2026년 10월 2일 기준). 따라서 화면에 체크무늬가 보인다는 사실만으로는 성공인지 실패인지 판단할 수 없습니다.

실패 사례는 사용자 제보로 남아 있습니다. OpenAI 개발자 커뮤니티의 2026년 5~6월 스레드에는 체크무늬가 이미지에 구워져 있었고 진짜 알파 채널 투명 배경이 아니었다는 글과, 같은 시기에 진짜 투명이나 부분적으로 투명한 결과를 받았다는 글이 함께 올라와 있습니다. 이 제보들은 실패가 실제로 일어난다는 근거일 뿐이고, 지금 얼마나 자주 일어나는지는 알려 주지 않습니다. 모델이 체크무늬를 그리는 이유에 대한 OpenAI의 공식 설명도 없습니다. 학습한 그림들 속에서 투명이 체크무늬로 표현되어 있었기 때문이라는 설명이 흔하지만 추정입니다.

요청 문구에는 세 가지를 담습니다. 피사체만 따로 떼어 달라는 것, 배경이 실제로 비어 있어야 한다는 것, 체크무늬를 포함해 배경을 대신할 어떤 것도 그리지 말라는 것입니다. OpenAI의 이미지 프롬프트 가이드도 투명 소재 예시에서 단색 배경, 풍경, 체크무늬, 그림자를 넣지 말라고 명시합니다.

빨간 머그컵 하나만 따로 떼어 낸 스티커용 이미지를 만들어 줘.
배경은 알파 채널이 있는 실제 투명 PNG로, 피사체 바깥은 완전히 비워 줘.
체크무늬, 흰색이나 회색 단색 배경, 풍경, 바닥 그림자, 워터마크는 그리지 마.

이어서 수정을 요청할 때는 "투명 배경은 그대로 유지"라는 조건을 매번 다시 적습니다. 같은 가이드가 후속 편집마다 투명 유지 요구를 반복하라고 안내합니다.

저장할 때는 이미지의 저장 버튼으로 파일을 내려받습니다. 화면 캡처는 쓰지 않습니다. 내려받은 파일은 앞의 색 배경 방법이나 아래 스크립트로 확인합니다. 챗GPT에서 이미지를 만드는 메뉴와 모델 선택은 ChatGPT Images 2.5 사용법: Sunburst와 Flare는 어디서 고르나요?에서 다룹니다.

GPT Image API: background를 transparent로, 형식은 png·webp로

API에서는 투명 배경이 파라미터로 정해집니다. OpenAI 이미지 생성 레퍼런스에 따르면 background는 transparent, opaque, auto 중 하나이고 기본값은 auto입니다. auto에서는 모델이 배경을 알아서 정합니다. 프롬프트에 "투명"이라고 써도 background를 비워 두면 요청은 auto로 처리됩니다.

transparent를 쓸 때는 출력 형식이 png 또는 webp여야 합니다. 요청 본문은 다음과 같습니다. 레퍼런스에 적힌 파라미터를 그대로 옮긴 형태이며, 실제 키로 호출해 응답을 받아 본 결과는 아닙니다.

json
{
  "model": "gpt-image-2.5-flare",
  "prompt": "빨간 머그컵 하나만 따로 떼어 낸 스티커. 단색 배경, 풍경, 체크무늬, 그림자 없음.",
  "background": "transparent",
  "output_format": "png",
  "size": "1024x1024"
}

이미지는 data[].b64_json에 Base64 문자열로 돌아오므로 디코딩한 바이트를 그대로 .png 파일로 저장합니다. 도중에 JPG로 변환하면 투명이 사라집니다.

모델별 지원 상태는 다릅니다. 같은 레퍼런스는 gpt-image-2.5-sunburst와 gpt-image-2.5-flare가 투명 배경을 지원하고, gpt-image-2에서는 이 기능이 프리뷰 단계라고 적고 있습니다. 2026년 8월 전까지는 OpenAI 문서가 gpt-image-2의 투명 배경을 지원하지 않는다고 안내했으므로, 그 시기에 쓰인 "GPT Image는 투명 배경이 막혔다"는 말은 당시에는 맞았고 지금은 맞지 않습니다. 레퍼런스는 투명 출력을 특정 해상도나 품질에 묶어 두지도 않습니다. 두 2.5 모델 중 무엇을 쓸지는 GPT Image 2.5 Sunburst vs Flare: 실측 차이를 참고하세요.

응답의 background와 output_format 값으로 먼저 걸러 내기

이미지를 디코딩하기 전에 확인할 수 있는 값이 응답에 들어 있습니다. 레퍼런스의 응답 객체에는 생성에 실제로 쓰인 background(transparent 또는 opaque)와 output_format(png, webp, jpeg)이 포함됩니다. 응답의 background가 opaque이거나 output_format이 jpeg이면 그 파일은 투명할 수 없으니, 이미지를 열어 보기 전에 요청부터 고칩니다.

반대로 두 값이 transparent와 png여도 확인이 끝난 것은 아닙니다. OpenAI 프롬프트 가이드는 디코딩한 이미지의 알파 채널을 머리카락, 유리, 그림자, 물체 가장자리까지 확인하라고 안내하고, 그려진 체크무늬는 투명이 아니라고 적고 있습니다.

중계 API와 자동화 도구에서 파라미터가 빠지는 경우

OpenAI 대신 요청을 받아 전달해 주는 서비스(중계 API, 게이트웨이, 프록시 등으로 불립니다)나 자동화 도구를 거치면, 같은 모델 이름을 써도 background가 모델까지 전달되지 않을 수 있습니다. 이때 요청은 auto로 처리된 것과 같아져 흰 배경이나 그려진 체크무늬가 나올 수 있습니다. 응답에 background 필드를 그대로 돌려주는지도 서비스마다 다르므로, 문서에 background 지원이 적혀 있는지를 먼저 봅니다.

구체적인 예가 LaoZhang API입니다. 문서는 경로를 셋으로 나누어 설명합니다. gpt-image-2.5-flare-vip과 gpt-image-2.5-sunburst-vip은 "background": "transparent"와 "output_format": "png"로 투명 배경 생성과 업로드 이미지의 배경 제거를 지원한다고 적혀 있고, 호출당 $0.03입니다(2026년 9월 24일 기준 공개 가격). 공식 전달 모델인 gpt-image-2.5-flare와 gpt-image-2.5-sunburst는 OpenAI 파라미터를 그대로 따르며 토큰 단위로 과금됩니다. 반면 gpt-image-2.5-web 경로는 지원 파라미터가 콘솔 설정과 실제 결과에 따라 달라진다고 되어 있고, VIP 모델의 옵션이 이 경로에서도 작동한다고 가정하지 말라고 안내합니다. 투명 배경이 목적이라면 앞의 두 종류 중에서 고르고, 받은 파일은 똑같이 알파 값으로 확인합니다. 이 내용은 문서 기준이며 유료 호출로 확인한 결과가 아닙니다. 장당 비용 비교는 GPT Image 2.5 Sunburst 가격: 호출당 $0.03과 공식 토큰 요금 비교에 있습니다.

n8n도 같은 유형입니다. 기본 OpenAI 노드로는 background를 보낼 수 없어 HTTP Request 노드로 직접 호출해야 합니다. 설정 방법은 n8n GPT Image 2.5 연동: 노드 한계부터 파일 저장까지에서 다룹니다.

알파 채널로 판정하기: check_transparency.py와 합성 이미지 10종 결과

파일이 여러 장이거나 눈으로 판단하기 애매하면 알파 값을 직접 세어 봅니다. 아래 스크립트는 확장자가 아니라 파일의 실제 형식을 읽고, 투명·반투명·불투명 픽셀의 비율을 출력한 뒤 여섯 가지 중 하나로 판정합니다. 투명 픽셀이 하나도 없는 이미지에서는 테두리가 밝은 무채색 두 톤으로 번갈아 칠해져 있는지를 추가로 봅니다.

python
"""진짜 투명과 그려진 체크무늬를 구분합니다.

사용법: python check_transparency.py image.png [다른 파일...]
Pillow가 필요합니다 (pip install pillow).
"""
import sys
from collections import Counter
from pathlib import Path

from PIL import Image


def border_pixels(rgb, ring=0.04):
    """이미지 바깥 테두리의 얇은 띠. 배경은 대개 여기에 있습니다."""
    w, h = rgb.size
    t = max(2, int(min(w, h) * ring))
    px = rgb.load()
    for y in range(h):
        for x in range(w):
            if x < t or x >= w - t or y < t or y >= h - t:
                yield px[x, y]


def painted_checkerboard(rgb):
    """테두리가 밝은 무채색 두 가지로 번갈아 칠해져 있으면 True."""
    w, h = rgb.size
    small = rgb.resize((min(w, 256), min(h, 256)), Image.NEAREST)
    tones = Counter()
    total = 0
    for r, g, b in border_pixels(small):
        total += 1
        if max(r, g, b) - min(r, g, b) <= 12 and min(r, g, b) >= 150:
            tones[round((r + g + b) / 3 / 8)] += 1  # 회색을 8단계 간격으로 묶음
    if total == 0 or sum(tones.values()) / total < 0.85:
        return False  # 테두리 대부분이 밝은 회색·흰색이 아님
    buckets = sorted(tones)
    light = [b for b in buckets if tones[b] / total >= 0.15]
    if len(light) < 2 or (max(light) - min(light)) * 8 < 10:
        return False  # 한 가지 톤뿐: 그냥 흰색이나 회색 배경
    # 두 톤이 큰 덩어리 둘로 나뉜 것이 아니라 맨 윗줄에서 번갈아 나와야 함
    mid = (max(light) + min(light)) * 8 / 2
    row = [sum(small.getpixel((x, 1))) / 3 > mid for x in range(small.width)]
    flips = sum(1 for a, b in zip(row, row[1:]) if a != b)
    return flips >= 4


def check(path):
    with Image.open(path) as im:
        real_format, mode = im.format, im.mode
        rgba = im.convert("RGBA")  # 팔레트 투명도 실제 알파 채널로 바뀜
    print(f"{path.name}: {real_format}, mode {mode}, {rgba.width}x{rgba.height}")
    if real_format not in ("PNG", "WEBP"):
        print(f"  투명 아님: 실제 형식이 {real_format}라서 알파를 저장할 수 없습니다.")
        return "wrong-format"

    hist = rgba.getchannel("A").histogram()
    total = rgba.width * rgba.height
    clear, solid = hist[0], hist[255]
    partial = total - clear - solid
    print(f"  알파: 투명 {clear / total:.1%}, 반투명 {partial / total:.1%}, 불투명 {solid / total:.1%}")

    if clear == total:
        print("  빈 이미지: 모든 픽셀이 투명합니다.")
        return "empty"
    if clear + partial == 0:
        if painted_checkerboard(rgba.convert("RGB")):
            print("  가짜 투명: 투명 픽셀이 없고 테두리가 두 톤의 회색 격자입니다. 체크무늬가 그림으로 그려져 있습니다.")
            return "painted-checkerboard"
        print("  불투명: 투명 픽셀이 없습니다. 배경이 그림의 일부입니다.")
        return "opaque"
    if clear == 0 and len([v for v in hist if v]) == 1:
        print("  흐리게만 됨: 알파 값이 전부 같습니다. 불투명도만 낮췄고 배경을 오려 내지 않았습니다.")
        return "faded"
    print("  진짜 투명: 투명 픽셀이 있습니다. 이제 어두운 배경과 색 배경 위에서 가장자리를 확인하세요.")
    return "real"


if __name__ == "__main__":
    if len(sys.argv) < 2:
        sys.exit(__doc__)
    for name in sys.argv[1:]:
        check(Path(name))

check_transparency.py로 저장하고 pip install pillow 후 python check_transparency.py sticker.png처럼 실행합니다. 파일 이름을 여러 개 이어 적으면 한 번에 검사합니다.

Python 3.12.1, Pillow 12.0.0, macOS에서 합성 이미지 10종에 실행한 결과, 10종 모두 예상한 판정이 나왔습니다. 시험 이미지는 Pillow로 그린 512×512 그림(빨간 타원 안에 흰 라벨이 있는 피사체)이며 챗GPT나 GPT Image가 생성한 이미지가 아닙니다.

시험 이미지출력된 판정
알파가 있는 PNG진짜 투명
알파가 있는 WebP진짜 투명
팔레트 방식 투명 PNG진짜 투명
체크무늬를 그려 넣은 RGB PNG가짜 투명
체크무늬를 그려 넣고 알파는 전부 255인 RGBA PNG가짜 투명
체크무늬에 흐림·노이즈·JPEG 재저장을 거친 PNG가짜 투명
흰 배경 PNG불투명
JPEG를 .png로 이름만 바꾼 파일투명 아님
전체 불투명도만 낮춘 PNG흐리게만 됨
전부 투명한 빈 PNG빈 이미지

판정을 읽을 때 알아 둘 점이 두 가지 있습니다.

"불투명"과 "가짜 투명"은 둘 다 투명하지 않다는 뜻입니다. 차이는 테두리에서 규칙적인 두 톤 격자를 찾았는지뿐입니다. 모델이 그린 체크무늬는 칸 크기가 들쭉날쭉하거나 원근과 음영이 들어가거나 회색이 더 어두울 수 있고, 그런 무늬는 이 스크립트가 격자로 알아보지 못해 "불투명"으로만 나올 수 있습니다. 그래도 그 파일이 투명하지 않다는 결론은 맞습니다.

"진짜 투명"은 투명한 픽셀이 있다는 뜻이지 누끼가 깔끔하다는 뜻은 아닙니다. 가장자리에 흰 테가 남았는지, 피사체 안쪽이 뚫리지 않았는지는 어두운 배경과 색 배경 위에 올려서 눈으로 봅니다.

박힌 체크무늬 지우기: 배경은 100.0% 제거, 흰 피사체는 전부 손실

피사체가 진한 색이고 윤곽이 또렷한 이미지라면, 그려진 체크무늬를 실제 투명으로 바꿀 수 있습니다. 아래 스크립트는 이미지 테두리에서 출발해 밝은 무채색 픽셀을 따라 번져 가며 지웁니다. 테두리와 이어진 부분만 지우기 때문에 피사체에 둘러싸인 흰 부분(눈, 치아, 라벨)은 남습니다.

python
"""그려진 밝은 회색·흰색 체크무늬를 진짜 투명으로 바꿉니다.

사용법: python remove_painted_checkerboard.py fake.png fixed.png
Pillow가 필요합니다 (pip install pillow).

이미지 테두리에서 출발해 밝은 무채색 픽셀을 따라 번져 가며 지웁니다.
테두리와 이어진 배경만 지우므로 피사체에 둘러싸인 흰 부분(눈, 치아, 라벨)은
남습니다. 흰색·밝은 회색 피사체의 가장자리는 격자와 구분하지 못하고,
부드러운 가장자리에는 밝은 테가 얇게 남습니다.
"""
import sys
from collections import deque

from PIL import Image

src, dst = sys.argv[1], sys.argv[2]
im = Image.open(src).convert("RGBA")
w, h = im.size
px = im.load()


def is_grid(p):
    r, g, b, _ = p
    return max(r, g, b) - min(r, g, b) <= 14 and min(r, g, b) >= 170


seen = bytearray(w * h)
queue = deque()
for x in range(w):
    queue.append((x, 0))
    queue.append((x, h - 1))
for y in range(h):
    queue.append((0, y))
    queue.append((w - 1, y))

removed = 0
while queue:
    x, y = queue.popleft()
    i = y * w + x
    if seen[i]:
        continue
    seen[i] = 1
    if not is_grid(px[x, y]):
        continue
    px[x, y] = (0, 0, 0, 0)
    removed += 1
    if x > 0:
        queue.append((x - 1, y))
    if x < w - 1:
        queue.append((x + 1, y))
    if y > 0:
        queue.append((x, y - 1))
    if y < h - 1:
        queue.append((x, y + 1))

im.save(dst)
print(f"전체 픽셀의 {removed / (w * h):.1%}를 투명하게 바꿨습니다 -> {dst}")

python remove_painted_checkerboard.py fake.png fixed.png로 실행하고, 결과 파일을 check_transparency.py로 다시 검사합니다.

같은 합성 이미지에서 원래의 투명 영역과 픽셀 단위로 비교한 결과입니다.

시험 이미지지워진 배경빨간 피사체 손실피사체 안 흰 라벨재검사 판정
깨끗한 체크무늬100.0%0%100% 유지진짜 투명
흐림·노이즈·JPEG 재저장을 거친 체크무늬99.63%0%100% 유지진짜 투명

한계는 세 번째 시험에서 드러났습니다. 빨간 피사체를 흰색에 가까운 타원으로 바꿔 체크무늬 위에 올린 이미지에서는 피사체 픽셀의 100%가 지워졌습니다. 스크립트는 밝고 색이 없는 픽셀을 배경으로 보기 때문에, 흰색이나 밝은 회색 피사체가 체크무늬와 맞닿아 있으면 피사체까지 함께 지웁니다. 흰 티셔츠, 흰 로고, 은색 제품, 구름 같은 소재가 이 조건에 해당합니다.

합성 이미지 세 종의 체크무늬 복구 결과 비교: 빨간 피사체는 배경만 지워지고 그대로 남지만 흰색에 가까운 피사체는 픽셀이 전부 지워진다

가장자리도 딱딱하게 나옵니다. 각 픽셀을 완전히 투명하게 만들거나 그대로 두는 방식이라 반투명 픽셀을 만들지 않습니다. 머리카락, 유리, 연기, 부드러운 그림자처럼 반투명이어야 자연스러운 부분은 되살릴 수 없고, 흐릿한 윤곽에는 밝은 테가 얇게 남습니다. 수치는 평평한 색으로 그린 합성 이미지에서 나온 것이므로, 모델이 그린 실제 이미지에서는 결과를 색 배경 위에 올려 직접 확인해야 합니다.

스크립트 대신 모델에게 "체크무늬를 지워 줘"라고 다시 요청하는 방법도 있지만, 그 요청은 또 한 번의 생성형 편집입니다. OpenAI 프롬프트 가이드는 편집을 반복하면 유지하려던 세부가 바뀔 수 있다고 경고하고, 픽셀이 그대로여야 하는 영역은 프롬프트에만 맡기지 말고 원본에 합성하라고 안내합니다. 선택 기준은 다음과 같습니다.

  • 피사체가 조금 달라져도 괜찮다: 체크무늬가 박힌 결과를 고치려 하지 말고, 앞의 문구로 새로 생성합니다. API라면 background: "transparent"를 넣어 다시 호출합니다.
  • 피사체가 그대로여야 하고 색이 진하며 윤곽이 또렷하다: 위 복구 스크립트를 씁니다.
  • 피사체가 그대로여야 하는데 흰색 계열이거나 가장자리가 부드럽다: 체크무늬가 없는 원본 이미지로 돌아가 배경 제거 도구로 누끼를 땁니다. 도구별 방법은 이미지 배경 투명하게 만들기: 방법 고르기와 투명 PNG 확인에 있습니다.

체크무늬가 투명 배경 대신이 아니라 장면 전체에 격자처럼 깔린 질감으로 보인다면 원인이 다릅니다. 그 경우는 GPT Image 2.5 노이즈·격자무늬: 어디서 거칠어졌는지 찾는 법을 보세요.

저장·공유 뒤 흰 배경이 되는 이유: JPG 변환, 스크린샷, 재인코딩

생성 직후에는 투명했던 파일이 나중에 불투명해졌다면 원인은 저장과 전달 과정에 있습니다.

  • JPG로 저장하거나 변환한 경우: JPEG에는 알파 채널이 없어서 투명한 부분이 단색으로 채워집니다. 투명을 유지하려면 PNG나 WebP로 둡니다.
  • 확장자만 바꾼 경우: JPEG 파일의 이름을 .png로 바꿔도 내용은 JPEG입니다. 반대로 진짜 PNG도 완전히 불투명할 수 있으므로 확장자는 투명의 증거가 되지 못합니다. 위 판정 스크립트가 실제 형식을 따로 읽는 이유입니다.
  • 스크린샷으로 저장한 경우: 화면에 보이던 체크무늬나 흰 바탕까지 포함한 새 불투명 이미지가 만들어집니다.
  • 메신저나 사이트에 올린 뒤 내려받은 경우: 서비스가 이미지를 다시 인코딩하면서 JPEG로 바꾸면 투명이 사라집니다. 서비스마다 처리가 다르니, 보낸 파일을 받은 쪽에서 다시 검사해 달라지는지 확인하고, 달라진다면 압축 파일이나 파일 첨부 방식으로 원본을 전달합니다.

어느 단계에서 바뀌었는지는 단계마다 파일을 하나씩 남겨 판정 스크립트로 비교하면 드러납니다. "진짜 투명"이던 파일이 특정 단계 뒤에 "불투명"이나 "투명 아님"으로 바뀌었다면 그 단계가 원인입니다.