배경이 투명한 로고나 아이콘 PNG를 JPG로 바꿨더니, 투명하던 부분이 온통 검은색으로
채워져 나오는 경우가 있습니다. 어떤 프로그램에서는 아예 저장이 안 되고 오류만 뜨기도 합니다.
파일이 망가진 것이 아닙니다. JPG라는 형식이 투명을 표현하지 못해서 생기는,
정해진 결과입니다.
왜 하필 검은색이 되는지와 배경을 원하는 색으로 깔끔하게 저장하는 방법을 실제 코드로 확인해 보겠습니다.

먼저 왜 이런 일이 생기는지부터
PNG는 각 픽셀에 색 정보와 함께 투명도(알파)라는 값을 하나 더 담습니다.
이 알파 덕분에 배경이 비쳐 보이는 투명 영역을 만들 수 있습니다.
그런데 JPG에는 이 알파를 담을 자리가 없습니다.
사진 압축에 특화된 형식이라 투명이라는 개념 자체가 없습니다. 그래서 투명 PNG를 JPG로 저장하려 하면 두 갈래로 문제가 나타납니다.
증상 1: 저장하려니 오류부터 납니다
파이썬 이미지 라이브러리 Pillow로 투명 PNG를 그대로 JPG로 저장하면,
다음과 같은 오류가 실제로 뜹니다.
OSError: cannot write mode RGBA as JPEG
여기서 RGBA는 빨강, 초록, 파랑에 알파(A)까지 네 가지 값을 가진 이미지라는 뜻입니다.
JPEG는 알파를 받을 수 없으니 저장을 거부하고 멈춘 것입니다. 오류 메시지가 곧 원인을 그대로 말해 주고 있는 셈입니다.
증상 2: 억지로 변환하니 배경이 검게
오류를 피하려고 알파를 떼어 내는 방식으로 변환하면(RGB로 강제 변환) 저장은 됩니다. 그런데 원래 투명이던 자리의 색을 확인해 보면 이렇게 나옵니다.
원래 투명이던 (0,0) 픽셀 색: (0, 0, 0)
(0, 0, 0)은 완전한 검은색입니다. 투명 픽셀은 눈에는 안 보였을 뿐
속에 담긴 색 값이 0으로 비어 있는데, 알파를 떼면 그 0이 그대로 드러나 검은 배경이 되는 것입니다.
위 비교 이미지의 가운데가 바로 이 상태입니다.
해결: 배경색을 먼저 깔고 그 위에 얹기
핵심은 투명 부분을 어떤 색으로 채울지 직접 정해 주는 것입니다. 흰 배경을 먼저 만든 다음, 알파를 마스크로 삼아 그 위에 이미지를 얹으면 됩니다.
from PIL import Image
im = Image.open("logo.png") # 투명 배경 PNG
bg = Image.new("RGB", im.size, (255, 255, 255)) # 흰 배경 준비
bg.paste(im, mask=im.split()[3]) # 알파 채널을 마스크로 얹기
bg.save("logo.jpg", quality=95)
im.split()[3]이 알파 채널(네 번째 값)이고, 이것을 마스크로 넘기면 불투명한 부분만 배경 위에 그려집니다. 저장 후 같은 (0,0) 픽셀을 확인하면 이렇게 바뀝니다.
원래 투명이던 (0,0) 픽셀 색: (255, 255, 255)
투명이던 배경이 검정이 아니라 흰색으로 깔끔하게 채워졌습니다. 흰색 대신 다른 색을 원하면 (255, 255, 255) 자리에 원하는 색 값을 넣으면 됩니다.
코드 없이 처리하고 싶다면
이미지 편집 프로그램에서도 같은 원리로 해결합니다.
무료로 널리 쓰이는 GIMP 기준으로, 배경 레이어를 원하는 색으로 하나 깔고 그 위에 투명 PNG를 올린 뒤 JPG로 내보내면 됩니다. 포토샵이라면 배경 레이어를 흰색으로 채운 상태에서 저장하면 같은 결과가 나옵니다.
핵심은 도구가 무엇이든 투명 부분을 채울 배경색을 먼저 정하는 것입니다.
이 절차 없이 바로 JPG로 내보내면 프로그램이 임의로 검은색이나 흰색을 넣어 버립니다.
자주 묻는 질문
Q. 그냥 PNG로 두면 안 되나요?
투명이 필요하면 PNG가 맞습니다. JPG로 바꾸는 건 보통 용량을 줄이거나
투명을 지원하지 않는 곳에 올릴 때인데, 그럴 때만 배경색을 정해 변환하면 됩니다.
Q. 배경을 투명하게 유지하면서 용량도 줄이고 싶어요.
그럴 때는 JPG 대신 투명을 지원하는 WebP를 고려할 수 있습니다.
투명도 살리면서 JPG에 가까운 용량을 얻을 수 있습니다.
Q. 검은 배경으로 이미 저장해 버린 JPG는 되살릴 수 있나요?
어렵습니다. 투명 정보가 저장 시점에 사라졌기 때문에, 원본 PNG가 남아 있다면 그것으로 다시 변환하는 편이 확실합니다.
정리하면 이 문제는 오류가 아니라 JPG에 투명을 담을 자리가 없어서 생기는 자연스러운 결과입니다.
변환 전에 배경색 한 번만 정해 주면 검은 배경도, 저장 오류도 함께 사라집니다.
원본 PNG는 지우지 말고 남겨 두시면 언제든 다시 손볼 수 있습니다.
'파일 형식 백과사전' 카테고리의 다른 글
| 큰 CSV를 엑셀 대신 SQL로 다루기, SQLite에 불러와 조회하는 방법 (0) | 2026.07.25 |
|---|---|
| 커진 CSV를 gzip으로 압축하기, 얼마나 줄고 압축한 채로 바로 읽을 수 있을까? (0) | 2026.07.24 |
| 중첩된 JSON을 엑셀에서 열리는 CSV로, 배열까지 한 줄씩 펼쳐 변환하기 (0) | 2026.07.22 |
| Parquet 저장할 때 compression만 바꿨을 뿐인데 용량이 갈립니다, 코덱 3종 실측 비교 (1) | 2026.07.21 |
| CSV를 열었더니 주소 뒷부분이 옆 칸으로, 값 속 쉼표 때문에 열이 밀리는 문제 (0) | 2026.07.20 |