다른 뜻에 대한 내용은 PNG(동음이의어) 문서 참고하십시오.
🖼️ 그래픽 포맷 | |||||
{{{#!wiki style="margin:0 -10px -5px; min-width:300px; min-height:calc(1.5em + 5px); word-break:keep-all" {{{#!folding [ 펼치기 · 접기 ] {{{#!wiki style="margin:-6px -1px -11px" | <colbgcolor=#555>비트맵 | <colbgcolor=#555>손실 압축 | JPEG | AVIF▶Lα · BPG▶α · FLIF▶α · HEIF▶ · WebP▶α · | RAW · DDS▶Lα · PSD▶Lα |
무손실 압축 | APNG▶α · DNG · EXRα · GIF▶ · PCX · PNGα · RGBEα · TGAα · TIFFLα | ||||
무손실 무압축 | BMPα | ||||
벡터 | AI · CDR · SVG | ||||
▶: 애니메이션 기능 지원 / L: 다중 레이어 지원 / α: 알파값 지원 | |||||
관련 틀: 그래픽 · 오디오 · 비디오 |
[1]
1. 개요
\'Portable Network Graphics'의 약자로서 그림 파일 형식 가운데 하나이다.PNG는 무손실 압축 포맷을 채택하였으며, 256색에 한정된 GIF의 한계를 극복하여 32비트 트루컬러[2][3]를 표현할 수 있게 되었다. 다만 네이티브 PNG는 GIF에서 제공하는 애니메이션 기능은 제공하지 못한다.
더불어 GIF가 제공하는 '투명 배경'은 이 형식에서도 지원된다. 엄밀히는 GIF는 특정색 한 가지만 투명으로 지정하는 방법이고, PNG는 알파채널을 포함해서 완벽하게 불투명도를 지정할 수 있다. Internet Explorer의 예전 버전은 PNG 알파 채널을 불완전하게 지원하는 문제가 있지만,[4] 요즘은 정상적으로 지원한다.
'JPEG'의 공식 발음이 /제이펙/인 것처럼 'PNG'는 /핑/으로 부르도록 하고 있으나 아무도 그렇게 말하지 않고(네트워크 용어인 PING과도 혼동될 여지가 있다), 그냥 /피엔지/로 통한다.
2. 탄생 배경
PNG의 탄생배경은 MP3에 적용된 특허권을 피하기 위해 Vorbis가 개발된 것과 동일하다. 초창기 인터넷에서 그림파일들은 컴퓨서브(CompuServ)사에서 개발한 GIF 형식을 사용하고 있었다. 하지만 GIF의 핵심이 되는 LZW 알고리즘에 대하여 유니시스(Unisys)사에서 특허권을 취득하고 그 권한을 행사하기 시작하자, 프로그래머들은 이참에 GIF의 몇가지 문제점들을 해결하는 셈치고 새로운 그림 파일형식을 개발하기 시작하였고 1996년에 PNG가 발표되었다.하지만 개발을 하고 발표를 했어도 초창기에는 크게 인기를 얻지 못했는데, 이유는 LZW 알고리즘에 대하여 비상용 소프트웨어의 경우에는 무료 특허 정책을 적용하여 GIF를 계속 사용할 수 있었기 때문이다. 또한 압축률이 높은 만큼 당시 컴퓨터 스펙으로는 GIF에 비해 처리속도가 느리기도 했다. H.264 규격이 나올 당시 좌절영상이 왜 많았는지를 떠올려 보면 답이 나온다.
하지만 1999년에 이 정책이 폐기되면서 소프트웨어 개발자들이 대안을 찾기 시작했고, 이에 따라 PNG를 지원하는 프로그램도 점점 증가하였다. 현재는 W3C에서 표준안이 나오고(W3C 표준), ISO 표준 규격(ISO 15948, 한국어 설명)이 나왔을 정도로 보편적인 그림파일 형식으로 자리잡은 상태다.
3. 특징
등장 초기에는 같은 그림을 PNG로 압축할 경우 GIF보다 훨씬 큰 파일을 만든다고 불평을 늘어놓는 경향이 있었는데, 사실 이는 256색만 지원하는 GIF와 32비트 컬러를 지원할 수 있는 PNG의 차이 때문이다. 그리고 어도비사의 제품이 PNG 파일에 독특한 메타데이터(XMP, ISO표준이다.)를 붙인다거나, 포토샵 구버전들이[5] PNG 형식의 압축 알고리즘을 잘 구현하지 못했던 까닭에 충분한 압축 효율을 발휘하지 못했던 영향도 있다. 물론 이러한 문제는 일찍이 해결되었다.[6] 또한, GIF처럼 최대 256색 Indexed 모드인 'PNG-8' 형식[7]으로 저장하면 파일 크기가 확 줄어든다. (흔히 말하는 24비트+알파채널 지원 PNG는 'PNG-24'이다.)무손실 압축 포맷임에도 다른 무손실 포맷인 BMP·PCX·TGA 등에 비해 압축 효율이 좋은 편이어서, 사진에서 raw 파일을 보관할 때 이미지가 전체적으로 뭉개지는 JPEG나 256색의 한계로 모든 것을 표현하지 못하는 GIF보다 PNG 형식이 선호될 수 있다
TIFF의 경우 ZIP 알고리즘을 사용한다면 PNG와 용량이 비슷한데다 EXIF도 지원하고, 포토샵 라이트룸[8]과 같이 TIFF를 48비트의 높은 색 심도로 저장하는 프로그램이 많으므로 사진에서 후보정을 염두에 둔다면 거의 EXIF-TIFF 포맷을 사용하게 된다. 다만, PNG도 48비트 컬러를 지원한다.
다만 과거 대부분의 웹사이트에서 업로드 할 수 있는 용량을 아주 낮게 설정해둔 경우가 많았는데, 이 경우 PNG로 압축을 할 경우 용량을 초과하는 경우가 허다했다. 현재도 그러한 경향이 남아 있기 때문에 웹상에서의 그림은 PNG 형식보다는 JPG의 비중이 더 높은 편이다. 특히 사진 같은 경우는 JPG로 어느정도 손실압축해도 그 변화를 알아차리기 힘들기 때문에 큰 문제없이 쓰인다.
1단계로 이미지 필터링 작업을 거친 뒤 ZIP 포맷에서 사용하는 Deflate 알고리즘을 사용하여 압축하기 때문에, 그냥 BMP파일을 ZIP으로 압축한 것보다 훨씬 더 높은 압축률을 보여준다. 일반 사진 이미지보다는 패턴이 반복되거나 단순한 형태의 파일을 압축할 경우 경이로운 압축률을 볼 수 있다. 지형 분석에 사용되는 고도 높이맵 데이터라든가, 게시판의 글을 캡처한 경우라든가.
CRC-32 알고리즘을 사용하여 검사비트를 기록하기때문에 1비트라도 손상이 되면 바로 알 수 있다.
웹에서 반투명 이미지를 사용하고 싶은 경우 PNG가 거의 유일한 해답이다. JPG는 투명도 구현이 아예 안 되고, GIF는 투명은 가능하지만 반투명은 안 되기 때문이다. WebP는 PNG처럼 투명과 반투명을 모두 지원하나 보급율이 아직 높지 않다. 때문에 PNG가 대중화되기 전에는 GIF 이미지에 투명과 불투명을 1픽셀씩 교차해 넣는 기법을 써서 반투명을 표현하곤 했다. 또한 원래 배경과 어우러지게 배경을 투명처리한 이미지를 배치할 때도 GIF보다 PNG가 좋다. GIF는 지정한 한 가지 색만 투명 처리가 가능하기 때문에 엄청난 도트 노가다를 하지 않는 이상 경계선에 계단 현상이 생길 수밖에 없지만, PNG는 256단계의 투명 단계(알파 채널)를 지원하기 때문에 배경을 따는 정도로는 계단 현상이 생기지 않는다. Internet Explorer 6이 이 알파 채널을 지원하지 않아서 한동안 문제가 되기도 했는데, 자바스크립트 몇 줄로 알파 채널을 지원해 주는 기법이 등장하면서 해결되었다.
월드 와이드 웹 컨소시움 (W3C)에서 사진에 HDR 밝기를 표현 가능하게 해주는 색상 프로필을 공개하였다. BT. 2100 규격에 의하여 기존의 BT.1886 SDR 감마 영역이 아닌 ST.2084 HDR 감마 영역으로 색상을 매핑하며 색 공간은 BT.2020이다. [W3C] PNG 이미지 파일에 BT.2100 HDR PQ EOTF를 적용하기 PNG 이미지도 HDR 밝기 영역을 지원한다.
4. 용량 최적화
PNG가 무손실 이미지 포맷이다보니 여타 이미지 포맷에 비해 용량이 큰 편이다. 이에 따라 용량을 최적화하는 몇몇 알고리즘이 존재한다. 초창기 컴퓨팅파워상 쓰지 못했던 고성능 압축 알고리즘을 적용한다던가, 기존의 여러 압축 알고리즘들을 잘 조합하여 성능을 높이거나, 단순히 png-8(256색)으로 저장하는 것을 넘어, 버려지는 색상이 눈에 잘 띄지 않으면서도 "색상 양자화" 성능을 높이는 등의 방법을 동원한다.- Zopfli는 구글이 Deflate 알고리즘을 최적화하는 라이브러리다.
- Oxipng는 과거 optipng(#)를 개선한 프로젝트이다.
- pngquant는 PNG 색상을 256색으로 "잘" 양자화하여 눈에 덜 띄게 색상 수를 줄이고 용량을 줄여주는 라이브러리다. 각종 라이브러리의 성능은 투명 알파채널을 양자화 할 때 (망가지는 것이) 특히 눈에 띄는데, 이를 무난하게 해내는 듯 하며, (케바케지만 대략) 원본 대비 30%정도로 용량이 줄어든다.
5. Animated PNG
모질라에서 주도해서 만든 형식으로 APNG라고도 불린다. Animated GIF보다 지원 색상 수가 많고[9] 용량 대비 효율이 뛰어나다[10]. 애니메이션 기능을 지원하지 않는 환경이더라도 첫 번째 프레임 고정 정지 영상은 보인다.애니메이션 PNG 파일을 볼 수 있는 웹페이지. 왼쪽이 일반적인 알파 포함 GIF 파일이며 오른쪽이 APNG 파일이다. 표준이 아니기에 모든 브라우저에서 움직이지는 않으며, 지원하지 않는 브라우저에서는 정지되어 보인다. 파이어폭스 3 이후, 오페라 클래식 9.5 이후, 오페라 46 이후, 사파리 8.0 이후, Chrome 59 이후, 네이버 웨일, Microsoft Edge에서 지원하며 모바일에서는 iOS용 사파리와 안드로이드용 파이어폭스, 크롬, 삼성 인터넷, 마이크로소프트 엣지, 웨일 브라우저, 블로켓 브라우저가 지원하고 있다.
나무위키에 애니메이션 GIF와 APNG 이미지를 올리면 내부적으로 MP4 비디오 파일로 변환해서 저장하므로 해당 움짤들을 문서에 첨부하면 실제로는 GIF와 PNG 파일이 아닌, video 태그로 재생되는 MP4 파일로 불러와진다. 따라서 APNG를 지원하지 않는 브라우저에서 보더라도 정지된 상태로 보일 일은 없지만 나무위키에서 MP4로 변환하는 과정에서 그래픽 일부분이 변형되어 의도대로 보이지 않을 수 있다.
2007년에 PNG 개발 그룹(PNG Development Group)의 투표 부결로 APNG가 PNG 사양에 포함되는데 실패했다[11]. (이런 이유로 구글은 크로뮴 프로젝트에서 APNG 지원을 제외했지만 크롬 버전 59부터 다시 APNG를 지원한다.) 2021년 후반 W3C에서 PNG 사양의 유지/개발 분야에 PNG 실무 그룹(PNG 작업반, PNG Working Group)이 승인되었으며, 그 후 2022년에 공개된 PNG 사양 제 3 판(Third Edition)의 핵심 PNG 사양에 APNG 확장이 추가되었다.
이처럼 차세대 Animated 이미지 규격이 통일되지 못하고 있는 관계로 GIF가 여전히 많이 쓰이는 실정이다. GIF, APNG보다 더 효율이 좋은 Animated WebP와 Animated AVIF라는 형식도 있지만 이러한 이미지 형식들의 업로드를 지원하지 않는 웹 서비스들이 아직 많다. 또한 애니메이션 기능을 지원하는 MNG, JPEG 압축 기능을 지원하는 JNG라는 형식도 있지만 지원하는 프로그램이 적어 거의 이용되지 않는다. 구조적으로 매우 복잡해서 지원을 거의 안 한다고 한다. 게다가 2020년대 들어 차세대 Animated 이미지가 대중화됐는데, 이마저도 APNG가 아닌 WebP로 정착된 상황.
2018년 5월 4일 기준으로 APNG를 지원하지 않는 데스크톱 브라우저는 Internet Explorer와 Edge 구버전 뿐이다. 그마저도 Internet Explorer는 보안 업데이트를 제외한 지원이 중단되었으며, Microsoft Edge는 자체 엔진을 버리고 크롬과 같은 크로뮴 기반으로 갈아탔다.
라인(메신저)과 디스코드에서 애니메이션 스티커 형식으로 APNG를 사용하고 있다.
토스에서 사용되는 애니메이션 효과에서 APNG 포멧을 사용한다고 Simplicity 21에서 설명한 바 있다.
6. 여담
동방탄막풍에서 유일하게 지원하는 그림 확장자이기도 하다.RPG 쯔꾸르 2000, RPG 쯔꾸르 2003에서도 유일하게 지원한다.(그 이후 출시된 툴은 JPEG도 지원.)
오에카키에서 사용하는 파일 포맷이기도 하다.
디지털 영사기에서 사용하는 자막을 이 파일로 만들기도 한다. 디지털 영화인데 타이틀을 고유 글꼴로 만들었다면 100% 이 방식이라고 보면 된다.
[1] 이 사진 또한 PNG 형식의 이미지이다.png.png[2] RGB에 각 8비트+알파채널 8비트 지원.[3] 다만 PNG 형식도 팔레트를 사용하는 인덱스 색상을 지원한다.[4] IE 6은 지원하지 않으며, IE 7/8은 지원하기는 하나 CSS 알파와 동시에 사용할 경우 작동하지 않는 버그가 있다.[5] 신버전[6] 그런데 최신 버전인 CC 2014에서 PNG로 일반 저장시 파일 크기가 비정상적으로 커지는 버그가 있으며 아직까지도 고쳐지지 않았다(...) 웹용으로 저장은 이런 현상이 없다는 것이 천만다행.[7] 256색 내에 욱여넣을 수 있다면 반투명 알파 채널도 쓸 수 있다.[8] 제품 페이지[9] GIF는 256색밖에 지원하지 않기 때문에 색감이 매우 조악하다. PNG가 특별히 뛰어나다기보단 현재 웹에서 쓰이는 이미지 형식들 중 아직도 256색밖에 못 쓰는 건 GIF밖에 없다.[10] 다만 움짤과 비디오 첨부용으로는 Google이 개발한 WebM과 Animated WebP 쪽이 용량과 효율 면에서 더 좋다. Animated AVIF는 움짤 용도로 쓴다면 파일의 크기가 사기 급으로 크게 줄어들지만 AV1의 한계로 인코딩 속도가 다소 느리다.[11] 2009년 상황: APNG(부결) aNIM(투표중) ANG(제안됨) PNG-in-GIF(투표중) RGBA-in-GIF(제안됨) Ani-PNG(승인) MNG(승인)