앞의 글에서 언급했듯이 Zopfli는 zip(deflate)과의 호환성을 그대로 유지하면서도 압축률을 향상시키는 알고리즘이다.
그런데, 이 기술은 정작 쓰려고 하면 용도가 모호해진다.
zip 파일의 용량을 줄이려면 차라리 다른 포맷(rar, 7-zip 등)을 이용하면 되니까 굳이 쓸 필요가 없기 때문이다.
즉, Zopfli는 반드시 deflate를 사용할 수 밖에 없는 환경에서만 유용하게 사용할 수 있는 것이다.
다시 한 번 등장한 스위스, 오스트리아 및 바바리아 지방의 빵 Zopf
그런 환경이라면 가장 쉽게 볼 수 있는 것이 바로 PNG 파일이다.
사실, Google이 깃허브에 공개한 Zopfli 소스에는 ZopfliPNG 소스가 함께 포함되어 있다.
즉, 적절하게 컴파일만 하면 PNG를 극단적으로 압축할 수 있는 것이다.
ZopfliPNG를 컴파일하려면 아래의 과정을 거치면 된다.
1. 폴더를 하나 생성하여 다운 받은 소스를 그대로 저장
2. src/zopfli/zopfli_bin.c 파일 삭제
3. 모든 소스(.c, .cc, .cpp)를 컴파일하여 빌드
이렇게 하면 zopflipng.exe가 생성되는데, 이를 이용하면 PNG 파일의 크기를 극단적으로 줄일 수 있다.
이 프로그램은 다양한 옵션을 지원하는데, 이는 직접 확인하면 되고… 반드시 챙겨야 하는 옵션 둘은 아래와 같다.
1. -m : 좀 더 긴 시간을 들여 좀 더 작은 파일 생성
2. --keepchunks : zopflipng는 IHDR, PLTE, IDAT, IEND의 단 4 개의 청크만 남기고 모두 제거한다
여기에 추가로 더 남겨야 하는 청크를 지정
사실 청크 정보는 무조건 남기는 게 맞다고 생각함
다시 말 해, 아래와 같이 사용하는 것이 타당해보인다.
zopflipng.exe --keepchunks=cHRM,gAMA,iCCP,sBIT,sRGB,bKGD,hIST,pHYs,tIME,iTXt,tEXt,zTXt "source.png" "target.png"
또는
zopflipng.exe -m --keepchunks=cHRM,gAMA,iCCP,sBIT,sRGB,bKGD,hIST,pHYs,tIME,iTXt,tEXt,zTXt "source.png" "target.png"
이렇게 하면 PNG 파일의 크기를 그야말로 극단적으로 줄일 수 있다.