배경이 투명한 로고나 아이콘 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는 지우지 말고 남겨 두시면 언제든 다시 손볼 수 있습니다.
투명도를 지키면서 용량을 줄이고 싶다면 형식을 바꾸는 쪽이 답입니다. 화질을 하나도 버리지 않는 무손실 WebP 변환을 재 뒀고, 그래도 JPG 가 필요하다면 두 형식의 용량 차이를 먼저 보시면 됩니다.
'이미지' 카테고리의 다른 글
| PNG를 화질 손실 없이 WebP로, 무손실 변환하면 용량이 얼마나 줄어들까 확인해보니 (0) | 2026.07.27 |
|---|---|
| JPG 저장할 때 화질(quality)을 몇으로 두면 좋을까, 옵션별 용량 실측 방법 (0) | 2026.07.26 |
| 사진 용량 줄일 때 해상도를 줄일까 화질을 낮출까, 무엇이 더 효율적인지 실측 (0) | 2026.07.18 |
| 같은 사진을 WebP, AVIF, JPG로 저장하면 용량이 얼마나 차이 날까 (직접 측정 후기) (0) | 2026.07.15 |
| SVG를 PNG로 변환하는 법, 출력 크기는 어떻게 정해야 할까 (0) | 2026.07.12 |