잠시만 기다려 주세요...(/)
현재 이미지를 최적화하고 있습니다. 최고의 품질 결과를 보장하기 위해 잠시만 기다려 주세요.
이미지를 성공적으로 압축했습니다.
최적화된 이미지.
현재 이미지를 최적화하고 있습니다. 최고의 품질 결과를 보장하기 위해 잠시만 기다려 주세요.
최적화된 이미지.
이 페이지에 GIF 두 개를 올리면 하나는 40%나 줄어들고, 다른 하나는 거의 변화가 없을 수 있습니다. 이는 도구가 불안정해서가 아니며, 업로드 전에 꼭 알아두어야 할 GIF의 가장 헷갈리는 점입니다. GIF에는 화질 조절 슬라이더가 없습니다. JPEG처럼 용량을 줄이기 위해 화질을 희생할 수 있는 구조가 아니죠. GIF 압축기는 반복되는 부분만 제거할 수 있기 때문에, 얼마나 반복이 많은 파일이냐에 따라 결과가 완전히 달라집니다.
두 군데에 있습니다. 사진작가가 생각하는 '이미지'와는 다릅니다. 첫 번째는 색상 테이블입니다. 모든 GIF는 최대 256가지 색상의 팔레트를 가지고 있고, 애니메이션 GIF는 각 프레임마다 별도의 팔레트를 가질 수 있습니다. 두 번째는 프레임입니다. 부주의하게 저장된 GIF는 각 프레임을 전체 캔버스 크기로 저장해서, 작은 상자를 움직이기 위해 캔버스를 서른 번이나 다시 그립니다.
따라서 작업은 각 프레임의 팔레트를 하나의 공용 테이블로 합치고, 변하지 않은 부분을 다시 저장하지 않는 데 있습니다. 이 과정에서 색상은 전혀 바뀌지 않습니다. 아래 첫 번째 예시에서는, 29개의 프레임별 팔레트가 하나의 글로벌 테이블로 합쳐졌고, 파일 크기는 40% 줄었으며, 샘플링한 네 가지 색상도 원래 값 그대로 돌아왔습니다.
여섯 개 파일을 이 페이지로 압축해보고, 반환된 바이트 수를 기록했습니다.
| 파일 | 원본 | 압축 후 | 변화 |
| 스크린 녹화 애니메이션, 30프레임, 640 x 400 | 41,699 바이트 | 24,994 | -40.1% |
| 투명 배경의 단일 프레임 | 1,990 바이트 | 1,861 | -6.5% |
| 이미 최적화된 애니메이션, 24프레임 | 334,312 바이트 | 334,027 | -0.1% |
| 이미 하나의 팔레트로 저장된 단일 프레임 | 56,676 바이트 | 56,676 | 0% |
| 주석, XMP, GPS, 색상 프로필이 포함된 8프레임 애니메이션 | 15,850 바이트 | 9,953 | -37.2% |
| 이 페이지에 올린 PNG | 703,830 바이트 | 74,379 | -89.4% |
첫 번째 행은 스크린 녹화 파일이었습니다. 30프레임 중 대부분의 캔버스가 동일했고, 거의 모든 프레임에 별도의 팔레트가 있었습니다. 반복되는 부분이 많아 크게 줄었습니다. 다섯 번째 행은 이미 하나의 256색 팔레트에 저장된 단일 프레임이어서 더 줄일 부분이 없었고, 56,676 바이트 그대로 반환되었습니다.
이것이 검색 결과에서 많은 사이트들이 크게 약속하는 것의 솔직한 버전입니다. GIF가 동영상 변환기, 스크린 레코더, 오래된 내보내기 프리셋에서 만들어졌다면 큰 절감 효과를 기대해도 됩니다. 이미 최적화된 파일이라면 거의 변화가 없을 수 있으며, 0%는 품질을 희생하지 않고 정직하게 결과를 알려주는 것입니다.
직접 재생해보는 대신 바이트 단위로 확인했습니다. 압축된 30프레임 파일에도 여전히 30개의 프레임, 원래의 80밀리초 딜레이를 가진 30개의 타이밍 블록, 반복 재생을 지시하는 루프 확장자가 그대로 남아 있었습니다. 캔버스 크기도 640 x 400 그대로였습니다. 정지 이미지로 합쳐지거나 프레임이 삭제되어 숫자만 좋아지는 일은 없습니다.
투명 GIF는 6.5% 줄었습니다. 결과를 캔버스에 그려 네 픽셀을 읽어보니, 모서리는 여전히 완전히 투명했고, 빨간색은 220, 40, 60, 흰색은 완전히 흰색이었습니다. 30프레임 애니메이션도 헤더 블루, 페이지 그레이, 행 그레이, 빨간 상자가 40% 줄어든 후에도 원본과 동일했습니다. 절감 효과는 색상을 근사치로 바꾸는 것이 아니라 반복을 제거해서 얻어지는 것이므로, 이런 결과가 나오는 것이 당연합니다.
압축기는 반복되는 부분만 제거할 수 있습니다. 애니메이션이 4초나 너무 길거나, 800픽셀 폭이 필요 없다는 결정을 대신 내려주지 않습니다. 이런 선택은 파일을 이 페이지에 올리기 전에 해야 하며, 이 선택이 용량의 바닥선을 정합니다. 산술적으로 GIF의 용량은 캔버스 면적과 프레임 수의 곱에 비례하므로, 가로세로를 반으로 줄이면 약 4분의 3이 줄고, 초당 30프레임을 12프레임으로 낮추면 대부분의 짧은 클립에서는 차이가 거의 보이지 않습니다. 압축 후에도 GIF가 원하는 것보다 크다면, 이 두 가지 조정이 어떤 최적화 도구보다 훨씬 큰 효과를 냅니다.
GIF에는 우리가 볼 수 없는 많은 텍스트 정보가 들어갈 수 있고, 한 곳에만 저장되는 것도 아닙니다. 애니메이션의 각 프레임마다 주석 블록이 있을 수 있고, XMP 패킷에는 포토샵 등 Adobe 도구들이 카메라 기종, 제작자, 저작권, GPS 좌표를 저장합니다. 그 외에도 일반 텍스트 확장, 색상 프로필 등이 있습니다. 이런 정보는 이미지를 볼 때는 보이지 않습니다.
이 모든 정보를 담은 파일을 만들어, 열 개의 주석 블록, 위도·경도·고도·촬영일이 포함된 XMP 패킷, 카메라 기종, 작성자, 크레딧, 저작권, 색상 프로필, 일반 텍스트 확장까지 넣었습니다. 그 후 이 페이지에서 압축하고, 메타데이터 도구로 결과를 확인하니 모두 사라졌습니다. 8프레임은 그대로 8프레임이었고, 애니메이션도 계속 반복되었습니다.
이 과정은 압축과 동시에 이루어지므로 추가 비용이나 두 번째 업로드가 필요하지 않습니다. 또한, 반복이 없어 압축 효과가 없더라도 파일이 더 작아질 수 있는 이유도 설명해줍니다. 숨겨진 텍스트가 함께 삭제되기 때문입니다.
업로더는 PNG, JPG, JPEG, WEBP, AVIF, SVG, TIFF, BMP, JFIF도 받아들이며, 각 파일은 원래 포맷 그대로 반환됩니다. 위 표의 PNG도 PNG로 들어와 PNG로 나갔고, 헤더를 읽어보니 여전히 1400 x 900이었습니다. GIF 페이지에 들어왔다고 해서 다른 이미지가 변환되는 일은 없습니다.
사진(애니메이션이 아닌 경우)이라면, 사진 메타데이터 제거를 통해 이미지 재인코딩 없이 EXIF와 GPS 정보를 삭제할 수 있습니다. GIF가 애니메이션이 아닌 단일 정지 프레임이라면, PNG 압축이 더 적합할 수 있습니다. 그리고 1987년보다 훨씬 나중에 설계된 포맷으로 같은 콘텐츠를 저장하려면, WebP 압축이 정지 이미지와 애니메이션 모두를 지원합니다.