본문 바로가기
파일 형식 백과사전

화면 캡처 PNG가 유독 무거울 때, 색 수를 줄여 절반으로

by 무나주 2026. 9. 24.

PNG는 화질을 하나도 안 버리는 형식이라 무겁다고들 합니다. 맞는 말이지만 절반만 맞습니다. 표와 글자뿐인 업무 화면 캡처가 사진만큼 무거울 이유는 없습니다.

PNG는 화질을 하나도 버리지 않는 대신 화면에 쓰인 색의 가짓수를 그대로 안고 갑니다. 캡처는 실제로 쓰는 색이 얼마 안 되는데도 최대 규격으로 저장되면서 손해를 봅니다. 같은 화면을 저장 방법만 바꿔 가며 크기와 화질 손실을 함께 재 봤습니다.

캡처 PNG 색 수 줄이기 실측 표. 1600x1000 업무 화면 캡처는 쓰는 색이 934가지이고 원본 48,054바이트에서 팔레트 256색으로 바꾸면 22,957바이트로 52.2퍼센트 줄면서 원본과의 차이는 0.06에 그친다. 사진이 섞인 캡처는 색이 204,899가지로 늘고 같은 256색 변환에서 원본과의 차이가 1.96까지 벌어진다. 측정 환경은 윈도우 11, 파이썬 3.14.6, Pillow 12.2.0

 

 

표와 글자로 된 화면은 색이 934가지뿐이었습니다

주문 목록이 떠 있는 1600 x 1000 크기의 업무 화면을 만들어 저장했습니다. 화면 전체에서 실제로 쓰인 색을 세어 보니 934가지였습니다. 24비트 PNG가 담을 수 있는 색은 1,600만 가지가 넘습니다. 쓰지도 않는 폭을 위해 자리를 내주고 있었던 셈입니다.

저장 방법 파일 크기 줄어든 비율 원본과 차이
원본 (24비트) 48,054 B 기준 기준
원본에 optimize 46,622 B 3.0 % 0
팔레트 256색 22,957 B 52.2 % 0.06
팔레트 64색 20,722 B 56.9 % 0.18

맨 오른쪽 칸은 바꾼 그림과 원본의 픽셀을 하나씩 비교해 얻은 차이입니다. 0이면 완전히 같다는 뜻입니다.

256색으로 줄이면 크기가 절반이 되는데 차이는 0.06에 그칩니다. 사람 눈으로는 구분할 수 없는 수준입니다. 반면 64색까지 내리면 크기는 4.7퍼센트밖에 더 안 줄고 차이만 세 배가 됩니다. 캡처에서는 256색이 멈출 자리입니다.

흔히 먼저 시도하는 optimize 옵션은 3퍼센트에 그쳤습니다. 이 옵션은 저장 방식을 더 촘촘히 고르는 것이라 색 수 자체를 건드리지 않기 때문입니다.


사진이 섞이면 이야기가 달라집니다

같은 화면 오른쪽 아래에 사진 미리보기 하나를 얹고 똑같이 재 봤습니다. 색은 204,899가지로 뛰었습니다.

저장 방법 파일 크기 원본과 차이
원본 (24비트) 579,537 B 기준
팔레트 256색 207,132 B 1.96
팔레트 64색 128,334 B 3.30

크기는 여전히 잘 줄어듭니다. 문제는 차이입니다. 같은 256색 변환인데 업무 화면의 0.06이 사진 화면에서는 1.96으로 서른 배 넘게 벌어졌습니다. 사진 부분에서 색 계단이 생기고 얼룩진 무늬가 눈에 띄기 시작하는 구간입니다.

정리하면 기준은 하나입니다. 화면에 쓰인 색이 적으면 팔레트 변환은 사실상 공짜이고, 사진이 섞이면 값을 치릅니다. 사진이 든 캡처는 팔레트로 누르는 대신 그 부분만 잘라 내거나 JPG 계열로 따로 저장하는 편이 낫습니다.

내 캡처가 어느 쪽인지 확인하고 줄이기

색을 세어 보고 그 결과에 따라 저장 방식을 고르는 코드입니다. 폴더 전체에 돌릴 수 있습니다.

import glob, os
from PIL import Image

for path in glob.glob("captures/*.png"):
    with Image.open(path) as im:
        im = im.convert("RGB")
        used = im.getcolors(maxcolors=1 << 24)
        n = len(used) if used else 999999
        if n <= 4096:                      # 색이 적은 화면만 팔레트로
            out = path.replace(".png", "_256.png")
            im.convert("P", palette=Image.ADAPTIVE, colors=256).save(
                out, optimize=True)
            print(f"{os.path.basename(path)}  색 {n}  ->  "
                  f"{os.path.getsize(path):,} B 에서 {os.path.getsize(out):,} B")
        else:
            print(f"{os.path.basename(path)}  색 {n}  ->  사진이 섞여 건너뜀")

4096이라는 문턱은 위 실측에서 934와 204,899 사이의 어디쯤에 선을 그은 것입니다. 다루는 화면에 맞춰 조정하시면 됩니다.

프로그램 없이 하려면 그림판이나 이미지 편집기의 다른 이름으로 저장에서 256색 비트맵 계열 대신 8비트 PNG를 고르면 같은 결과가 나옵니다. 캡처 도구 자체의 저장 설정에서 색 수를 지정할 수 있는 경우도 있습니다.


PNG를 다른 형식으로 바꾸는 선택지

색 수를 줄이는 것 말고 형식을 바꾸는 길도 있습니다. 화질을 그대로 두고 형식만 옮기는 무손실 WebP 변환은 PNG를 무손실 WebP로 바꿔 재 본 글에 수치가 있고, 사진 위주의 이미지라면 PNG를 JPG로 바꿀 때의 용량 변화 쪽이 참고가 됩니다. 글자가 많은 캡처를 JPG로 저장하면 글자 가장자리가 지저분해지니 그 점만 주의하시면 됩니다.

 

보고서에 넣을 캡처가 무겁다면 8비트 PNG로 한 번 저장해 보세요. 표와 글자뿐인 화면이라면 눈으로는 차이를 못 느끼면서 절반이 빠집니다.

 

위 바이트와 차이 값은 윈도우 11에서 파이썬 3.14.6과 Pillow 12.2.0으로 같은 화면을 방법만 바꿔 저장해 얻었습니다. 실제 캡처는 배경화면과 투명 효과에 따라 색 수가 달라지므로 줄어드는 비율도 달라집니다.