앞의 글에서 언급했듯이 Zopfli는 zip(deflate)과의 호환성을 그대로 유지하면서도 압축률을 향상시키는 알고리즘이다.

그런데, 이 기술은 정작 쓰려고 하면 용도가 모호해진다.


zip 파일의 용량을 줄이려면 차라리 다른 포맷(rar, 7-zip 등)을 이용하면 되니까 굳이 쓸 필요가 없다.


즉, Zopfli는 반드시 deflate를 사용할 수 밖에 없는 환경에서만 유용하게 사용할 수 있는 것이다.


다시 한 번 등장한 스위스, 오스트리아 및 바바리아 지방의 빵 Zopf


그런 환경이라면 가장 쉽게 볼 수 있는 것이 바로 PNG 파일이다.




사실, Google이 깃허브에 공개한 Zopfli 소스에는 ZopfliPNG 소스가 함께 포함되어 있다.

즉, 적절하게 컴파일만 하면 PNG를 극단적으로 압축할 수 있는 것이다.


ZopfliPNG를 컴파일하려면 아래의 과정[각주:1]을 거치면 된다.


1. 폴더를 하나 생성하여 다운 받은 소스를 그대로 저장

2. src/zopfli/zopfli_bin.c 파일 삭제

3. 모든 소스(.c, .cc, .cpp)를 컴파일하여 빌드


이렇게 하면 zopflipng.exe가 생성되는데, 이를 이용하면 PNG 파일의 크기를 극단적으로 줄일 수 있다.


이 프로그램은 다양한 옵션을 지원하는데, 이는 직접 확인하면 되고… 반드시 챙겨야 하는 옵션 둘은 아래와 같다.


1. -m : 좀 더 긴 시간을 들여 좀 더 작은 파일 생성


2. --keepchunks : zopflipng는 IHDR, PLTE, IDAT, IEND의 단 4 개의 청크[각주:2]만 남기고 모두 제거한다

여기에 추가로 더 남겨야 하는 청크를 지정

사실 청크 정보는 무조건 남기는 게 맞다고 생각함


다시 말 해, 아래와 같이 사용하는 것이 타당해보인다.


zopflipng.exe --keepchunks=cHRM,gAMA,iCCP,sBIT,sRGB,bKGD,hIST,tRNS,pHYs,sPLT,tIME,iTXt,tEXt,zTXt "source.png" "target.png"


또는


zopflipng.exe -m --keepchunks=cHRM,gAMA,iCCP,sBIT,sRGB,bKGD,hIST,tRNS,pHYs,sPLT,tIME,iTXt,tEXt,zTXt "source.png" "target.png"


이렇게 하면 PNG 파일의 크기를 그야말로 극단적으로 줄일 수 있다.



  1. README.zopflipng 파일에 명시되어 있는 내용과 동일함 [본문으로]
  2. 반드시 존재해야 하는 4 개의 청크임 [본문으로]
신고

+ Recent posts