PNG 포맷은 이미지 포맷이다. JPEG 포맷이 손실압축 포맷인것과 다르게 PNG 포맷은 비손실 압축 이미지 포맷이다.
BMP 포맷도 이미지 압축을 지원하기는 하지만 압축 효율이 낮은 RLE 압축만을 지원하고, GIF 포맷도 비손실 압축 포맷이기는 하지만 과거에 LZW 특허 문제가 있기도 했었고, 256 컬러만을 지원한다.
하지만 PNG 포맷은 흑백부터 알파 채널을 포함한 거의 모든 형태의 이미지 포맷를 지원할 뿐만 아니라 DEFLATE 압축을 사용하기 때문에 압축 효율도 뛰어나다.
PNG 포맷은 이미지 데이터 저장시 DEFLATE 압축알고리즘만을 지원한다. 그래서 예전에는 단순히 BMP 파일을 ZIP(혹은 GZIP)으로 압축하면 PNG 포맷으로 저장한것과 파일의 크기가 비슷할것이라고 막연히 생각을 해 왔었다.
그러던 어느날 심심해서 테스트를 해보니 PNG 포맷이 ZIP(GZIP) 으로 BMP 파일을 압축한 것보다 파일 크기가 꽤 작다는것을 알게 되었다.
그 이유가 무엇일까? 오늘 PNG 포맷 문서를 읽어보면서 그 이유를 알게 되었다. PNG 포맷을 파일을 저장할때 단순히 RGB 데이터를 DEFLATE 로 압축하는것 뿐만 아니라, 압축 효율을 높이기 위한 별도의 알고리즘을 제공하는데 이를 문서에서는 필터라고 부른다.
단순히 DEFLATE로 압축하는것 보다 압축율이 더 좋은 이유는 무엇일까? 그 이유는 이미지 데이타의 특성에 맞추어 데이타를 가공하는 필터기술 때문이다. 단순히 이미지데이타를 압축하게 되면 각각의 스캔라인에 맞추어서 데이타를 직렬화 시킨 다음에 압축을 하게 되는데, PNG 의 필터는 각각의 픽셀에 대해서 그 픽셀의 좌측 픽셀이나 상단 픽셀과 비슷한지 여부를 처리해서 각 픽셀의 차이값만을 저장하는 방식을 사용한다. 즉 이미지데이터를 를 1차원이 아닌 2차원 데이터로 인식하기 때문에 좀더 효율적인 저장이 가능해 지는 것이다.
아씨. 노트북으로 칠라니까 귀찮아서 못치겠다. 그냥 여기서 끗.
======
추가 : http://www.indidev.net/forum/viewtopic.php?f=3&t=18 에 png 뷰어 소스 올려놨음.