PNG를 JPG로 변환하는 법 — 윈도우에서 설치 없이, 투명 배경이 검게 나오지 않게 (사진·캡처 크기 실측)
업로드 칸이 JPG 만 받거나 용량을 줄여야 할 때 PNG 를 JPG 로 바꿉니다. 검색하면 변환 사이트가 대부분인데, 윈도우 PowerShell 로도 설치 없이 됩니다. 그런데 투명 배경 PNG 를 그냥 바꾸면 투명했던 곳이 검게 나오고, 화면 캡처는 JPG 로 바꿔도 용량이 거의 안 줄었습니다. 사진·화면 캡처·투명 로고 세 가지 PNG 로 방법마다 직접 바꿔 크기와 색을 잰 결과입니다.

PNG·JPEG·WebP 를 브라우저 안에서 바꿉니다. JPEG 로 바꿀 때 투명한 곳을 채울 배경색(기본 흰색)과 품질(기본 80)을 고를 수 있고, 바꾼 뒤 용량이 바로 보입니다.
- ✓ 무료
- ✓ 설치·회원가입 없음
- ✓ 브라우저에서 바로 실행
- ✓ 파일이 서버로 올라가지 않음
- ✓ 소스 공개
🔒 파일을 서버나 다른 어떤 곳으로도 보내지 않습니다 — 내 컴퓨터의 브라우저 안에서만 처리합니다.
PNG 와 JPG, 무엇이 다른가
MDN 의 이미지 형식 안내에 따르면 PNG 는 무손실 압축에 투명도(알파)를 온전히 지원하고, JPEG 는 손실 압축이며 “JPEG does not support an alpha channel” — 투명 정보를 담을 칸이 없습니다. 그래서 같은 안내는 사진에는 JPEG 가 무난하지만 “화면 캡처·도표·로고·선 그림은 무손실을 택하라, 글자와 날카로운 가장자리 주변의 번짐과 색 테두리가 잘 보인다”고 권합니다.
바꾸기 전에 왜 JPG 가 필요한지 먼저 정하세요. 업로드 칸이 JPG 만 받는다면 바꿔야 하고, 용량을 줄이려는 거라면 사진일 때만 효과가 큽니다. 아래 실측에서 화면 캡처는 JPG 로 바꿔도 크게 줄지 않았습니다.
이름만 .jpg 로 바꾸면
photo.png 를 renamed.jpg 로 이름만 바꿔 보니 크기는 1,010,089바이트 그대로였고, .NET 과 파이썬 Pillow 둘 다 이 파일을 PNG 로 읽었습니다. 열리는 프로그램이 있어도 내용은 PNG 라서, 형식을 검사하는 업로드 칸이나 용량 제한에는 도움이 안 됩니다.
가지고 있는 .jpg 가 진짜 JPG 인지 첫 4바이트로 확인할 수 있습니다. PowerShell 창에 붙여 넣고 경로만 바꾸세요.
$b = [IO.File]::ReadAllBytes("C:\Users\you\Pictures\image.jpg")
"{0:X2} {1:X2} {2:X2} {3:X2} images: {4}" -f $b[0], $b[1], $b[2], $b[3], $b[4]진짜 JPG 는 FF D8 FF 로 시작하고(이 글에서 만든 파일은 FF D8 FF E0), 이름만 바꾼 PNG 는 89 50 4E 47 로 시작합니다. 뒤의 images 숫자는 ICO 용이라 여기서는 무시하세요.
방법 1. 코딩나우 이미지 변환기 — 브라우저에서
설치 없이 가장 간단한 방법입니다. 주소는 coding-now.com/image-converter 이고, 파일을 서버로 올리지 않고 브라우저 안에서 바꾸는 도구입니다(도구 설명). JPEG 로 바꿀 때의 기본값은 품질 80, 배경 채움 흰색(#ffffff) 이라 투명한 곳이 검게 나오지 않습니다.
- 1PNG 파일을 끌어다 놓거나 선택합니다.
- 2출력 형식에서 JPEG 를 고릅니다.
- 3품질 슬라이더(기본 80)와 배경 채움 색(기본 흰색)을 확인합니다.
- 4바꾼 뒤 표시되는 용량을 보고 다운로드 합니다.
방법 2. PowerShell — 설치 없이, 흰 배경과 품질을 정해서
윈도우 10·11 에 들어 있는 Windows PowerShell 과 .NET 그림 기능만 씁니다. 흰색 바탕을 먼저 깔고 그 위에 PNG 를 그린 뒤, 품질을 정해 JPEG 로 저장합니다.
Add-Type -AssemblyName System.Drawing
$src = "C:\Users\you\Pictures\image.png" # the PNG to convert (full path)
$out = "C:\Users\you\Pictures\image.jpg" # the JPG to create (full path)
$quality = 85 # 0-100, higher = bigger file
$img = [System.Drawing.Image]::FromFile($src)
$bmp = New-Object System.Drawing.Bitmap $img.Width, $img.Height
$g = [System.Drawing.Graphics]::FromImage($bmp)
$g.Clear([System.Drawing.Color]::White) # transparent areas become white
$g.DrawImage($img, 0, 0, $img.Width, $img.Height)
$g.Dispose(); $img.Dispose()
$jpeg = [System.Drawing.Imaging.ImageCodecInfo]::GetImageEncoders() | Where-Object { $_.MimeType -eq "image/jpeg" }
$p = New-Object System.Drawing.Imaging.EncoderParameters 1
$p.Param[0] = New-Object System.Drawing.Imaging.EncoderParameter ([System.Drawing.Imaging.Encoder]::Quality, [long]$quality)
$bmp.Save($out, $jpeg, $p)
$bmp.Dispose()- 1시작 메뉴에서 Windows PowerShell 을 엽니다(관리자 권한 필요 없음).
- 2$src·$out 두 줄의 경로를 내 파일로 바꿉니다. 전체 경로로 적으세요 — .NET 함수는 상대 경로를 PowerShell 의 현재 폴더가 아니라 다른 폴더 기준으로 풀 수 있습니다.
- 3필요하면 $quality 를 바꿉니다(사진은 75~85 면 충분히 줄었습니다).
- 4전체를 붙여 넣고 Enter. 아무 메시지 없이 끝나면 $out 에 JPG 가 생깁니다.
| 원본 | PNG | 이 스크립트(품질 85) | 투명했던 모서리 |
|---|---|---|---|
| 사진 1920×1200 | 1,010,089바이트 | 73,089바이트 (원본의 7%) | — |
| 화면 캡처 2230×1366 | 220,409바이트 | 175,317바이트 (80%) | — |
| 투명 로고 512×512 | 19,053바이트 | 13,500바이트 (71%) | 흰색 (255, 255, 255) |
흰 배경을 깔지 않고 $img.Save($out, [System.Drawing.Imaging.ImageFormat]::Jpeg) 처럼 바로 저장하면 투명했던 곳이 검정이 됩니다. 이 기본 저장은 품질도 정하지 않아서, 사진은 97,702바이트로 품질 90(89,243)보다 컸고 화면 캡처는 225,598바이트로 원본 PNG 보다 커졌습니다.
방법 3. 파이썬 Pillow
파이썬이 있다면 Pillow 로 됩니다(pip install pillow). 이 PC 는 Python 3.11.9 · Pillow 12.3.0 입니다.
from PIL import Image # pip install pillow
img = Image.open("image.png")
if img.mode in ("RGBA", "LA", "P"): # has (or may have) transparency
img = img.convert("RGBA")
bg = Image.new("RGB", img.size, (255, 255, 255))
bg.paste(img, mask=img.getchannel("A")) # transparent areas become white
img = bg
img.convert("RGB").save("image.jpg", quality=85)같은 세 원본으로 사진 75,355바이트, 화면 캡처 181,423바이트, 투명 로고 13,764바이트(모서리 흰색)가 나왔습니다.
- 투명 PNG 를 바로 저장하면 오류가 납니다. Image.open("logo.png").save("logo.jpg") 는 'cannot write mode RGBA as JPEG' 로 멈췄습니다.
- convert("RGB") 만 하면 검게 나옵니다. 오류는 사라지지만 투명했던 모서리가 (0, 0, 0)이 됐습니다. 위 코드처럼 흰 바탕에 붙인 뒤 저장하세요.
- quality 를 빼면 75 로 저장됩니다. 사진 크기가 PowerShell 품질 75(58,468바이트)와 거의 같은 58,408바이트였습니다.
투명한 곳이 검게 나오는 이유
투명한 칸에도 색 값은 들어 있습니다. 시험한 로고는 투명한 칸이 (0, 0, 0, 0) — 검정에 투명도 0 — 으로 저장돼 있었고, JPG 는 투명도 칸이 없으니 투명도만 버리고 숨어 있던 검정이 드러난 것입니다. 다른 PNG 는 투명한 칸에 다른 색이 들어 있을 수 있어 결과 색이 달라질 수 있습니다.
투명 배경을 살려야 한다면 JPG 로 바꾸면 안 됩니다. PNG 그대로 두세요. 배경을 지우는 방법은 '사진 배경 투명하게 만드는 법' 글에 정리했습니다.
사진은 줄고 화면 캡처는 안 주는 이유
JPEG 는 사진처럼 색이 부드럽게 이어지는 그림을 잘 줄입니다. 반대로 화면 캡처는 PNG 로도 이미 작습니다 — 픽셀 수는 캡처(2230×1366)가 사진(1920×1200)보다 많은데 PNG 크기는 220,409바이트로 사진(1,010,089바이트)의 5분의 1이었습니다. 그래서 JPG 로 바꿔도 덜 줄고, 글자 가장자리에 원래 없던 색이 생깁니다.
화면 캡처 원본은 색이 14,144가지였는데 품질 90 JPG 는 33,517가지가 됐습니다 — 글자 주변에 중간색 얼룩이 생긴 것입니다. 원본과 8단계 넘게 달라진 픽셀도 캡처는 0.6~1.0%, 사진은 0.1~0.2% 였습니다. MDN 이 캡처·도표에 무손실을 권하는 이유가 이것입니다.
방법별 비교
| 방법 | 설치 | 투명한 곳 | 품질 지정 | 사진 결과 |
|---|---|---|---|---|
| 이름만 .jpg 로 바꾸기 | 없음 | — | — | 변환 안 됨(PNG 그대로) |
| 이미지 변환기(브라우저) | 없음 | 흰색(기본, 바꿀 수 있음) | 슬라이더(기본 80) | — (이 글에서 잰 값 없음) |
| PowerShell 기본 Save(Jpeg) | 없음 | 검정 | 없음 | 97,702바이트 |
| PowerShell 스크립트(이 글) | 없음 | 흰색 | $quality(85) | 73,089바이트 |
| 파이썬 Pillow(이 글 코드) | Python + Pillow | 흰색 | quality=85 | 75,355바이트 |
결과가 이상할 때 확인할 순서
- 1진짜 JPG 인가 — 첫 4바이트가 89 50 4E 47 이면 이름만 바뀐 PNG 입니다. 위 방법으로 다시 바꾸세요.
- 2모서리가 검다 — 투명한 곳을 채우지 않고 저장한 것입니다. 흰 바탕을 깔고 다시 저장하세요(변환기는 기본이 흰색).
- 3글자 주변이 지저분하고 용량도 그대로 — 화면 캡처·도표는 JPG 에 맞지 않습니다. 꼭 JPG 여야 하는 게 아니면 PNG 로 두세요.
- 4용량이 생각보다 크다 — 품질을 정하지 않은 기본 저장일 수 있습니다. 사진은 품질 75~85 에서 원본의 6~7% 까지 줄었습니다.
자주 묻는 질문
Q. 품질은 몇으로 하면 되나요?
사진은 품질 75 에서 58,468바이트, 80 에서 62,970바이트, 90 에서 89,243바이트(원본 PNG 1,010,089바이트)였습니다. 원본과 8단계 넘게 달라진 픽셀은 75 에서 0.2%, 90 에서 0.1% 였습니다. 화질 차이가 눈에 띄는지는 직접 보고 고르세요 — 숫자만으로는 75~85 면 충분히 줄었습니다.
Q. 투명 배경을 유지한 채 JPG 로 바꿀 수 있나요?
안 됩니다. JPEG 에는 투명 정보를 담는 칸이 없습니다(MDN). 투명 배경이 필요하면 PNG 로 두세요.
Q. JPG 를 다시 PNG 로 바꾸면 원래대로 돌아오나요?
아닙니다. JPEG 는 손실 압축이라 버려진 정보는 돌아오지 않습니다. PNG 로 다시 저장하면 그때의 JPG 모습이 그대로 담길 뿐입니다. 원본 PNG 는 지우지 말고 보관하세요.
Q. PNG 파일 이름만 .jpg 로 바꾸면 안 되나요?
변환이 아닙니다. 이름만 바꾼 파일은 크기가 그대로였고 .NET·Pillow 모두 PNG 로 읽었습니다. 형식을 검사하는 업로드 칸에서는 거절될 수 있습니다.
Q. 그림판으로 바꿀 수 있나요?
이 글에서는 그림판을 시험하지 않았습니다. 설치 없이 결과를 확인한 방법은 위의 PowerShell 스크립트와 이미지 변환기입니다.
PNG·JPEG·WebP 를 브라우저 안에서 바꿉니다. JPEG 로 바꿀 때 투명한 곳을 채울 배경색(기본 흰색)과 품질(기본 80)을 고를 수 있고, 바꾼 뒤 용량이 바로 보입니다.
- ✓ 무료
- ✓ 설치·회원가입 없음
- ✓ 브라우저에서 바로 실행
- ✓ 파일이 서버로 올라가지 않음
- ✓ 소스 공개
🔒 파일을 서버나 다른 어떤 곳으로도 보내지 않습니다 — 내 컴퓨터의 브라우저 안에서만 처리합니다.
댓글 0
아직 댓글이 없습니다. 첫 댓글을 남겨 주세요.
댓글은 회원만 쓸 수 있습니다.
광고·욕설·비방·개인정보·불법 내용이 담긴 댓글은 숨기거나 지웁니다. 댓글은 닉네임과 함께 공개됩니다. 개인정보처리방침