PNG: 두 판 사이의 차이

내용 삭제됨 내용 추가됨
편집 요약 없음
편집 요약 없음
1번째 줄:
{{다른 뜻}}
{{파일 포맷 정보
| 이름 = Portable Network Graphics
| 확장자 = .png
| MIME = image/png
| 개발 = [[W3C]]
| 종류 = [[래스터 그래픽스|래스터]] 이미지
}}
{| class="infobox" style="float:right; width:210px;" |
|-
|[[파일:PNG transparency demonstration 1.png|200px|(예제 그림 1)]]<br />[[파일:PNG transparency demonstration 2.png|200px|(예제 그림 2)]]<br />8비트 투명층을 사용한 PNG 그림 (위), 격자 무늬 배경에 올려 놓았을 때의 모습 (아래)
|}
 
줄 49 ⟶ 41:
|Unix-style 줄바꿈으로, (LF) Unix-DOS 변환에서 줄바꿈에 사용한다.
|}
 
===파일의 청크(Chunk)===
헤더 뒤에는 이미지에 대한 정보를 담고 있는 일련의 청크가 온다. 청크는 그 자신을 ''중요'' 또는 ''보조''로 선언한다. 프로그램이 받아들이지 못하는 ''보조'' 청크는 그냥 무시된다. 이런 식으로 청크를 통한 계층 구조는 [[디지털 컨테이너 포맷]]과 같은 개념으로, PNG 포맷이 구버전과 호환되면서 쉽게 확장할 수 있도록 해준다. 이와 같은 구조가 MNG, JNG, APNG 포맷에도 사용된다.
청크는 네 가지 부분으로 구성된다. 길이(4바이트), 청크 타입(또는 이름)(4바이트), 청크 데이터(길이 바이트), 그리고 [[CRC|순환 중복 검사]](순환 중복검사/체크섬, 4바이트). CRC는 길이를 제외한 청크 타입과 데이터로 생성된 network-byte-order CRC-32이다.
{| class="wikitable" style="text-align: center;"
|-
! style="width: 8em" | 길이
! style="width: 8em" | 청크 타입
! style="width: 16em" | 청크 데이터
! style="width: 8em" | CRC
|-
| 4 바이트
| 4 바이트
| ''길이'' bytes
| 4 바이트
|}
청크 타입은 ASCII 문자 네개로 구성된다. 대소문자는 구분된다. 이들의 대소문자 여부가 [[디코더]]에게 청크를 인식해야 할지에 대한 정보를 준다.
첫번째 문자는 이 청크가 ''중요''인지 ''보조''인지 알려준다. 대문자일 경우 ''중요''이고, 그렇지 않을 경우 ''보조''이다. 중요 청크는 파일을 읽는데 필수적인 정보를 갖고 있다. 디코더가 해석할 수 없는 중요 청크를 받으면 파일 읽기를 중단하고 사용자에게 경고를 전달해야 한다.
두번째 문자는 청크가 "퍼블릭"(PNG파일 표준에 포함되어 있거나 특수목적 퍼블릭 청크의 레지스트리에 포함되어 있음)인지 "프라이빗"(표준이 아님)인지 판별한다. 대문자는 퍼블릭이고 소문자는 프라이빗이다. 이는 프라이빗과 퍼블릭 청크의 이름이 충돌하는 것을 막아준다.(단, 같은 이름의 프라이빗 청크는 충돌할 수 있다)
세번째 문자는 PNG 표준에 따라 대문자여야 한다. 미래의 확장을 위해 남겨둔 문자로, 디코더는 이 문자가 소문자일 경우 해석 못하는 것으로 처리해야 한다.
네번째 문자는 청크를 해석하지 못할 경우 복사가 안전한지 판별한다. 소문자일 경우 파일에 변경이 있어도 안전하게 복사될 수 있다. 대문자일 경우, 파일 변경이 중요 청크를 변경하지 않았을 경우에만 복사될 수 있다.
===중요 청크===
디코더는 PNG 파일을 읽고 렌더링하기 위해서 중요 청크를 해석할 수 있어야 한다.
* <code>IHDR</code>는 첫번째 청크로 와야 한다. 이것은 순서대로 이미지의 넓이, 높이, 비트 수와 컬러 타입을 표시한다.<ref>{{웹 인용|url=http://www.libpng.org/pub/png/spec/1.2/PNG-Chunks.html#C.IHDR |title=Chunk Specifications |chapter= |author=Glenn Randers-Pehrson & Thomas Boutell (editors)|year=1999 |work=PNG (Portable Network Graphics) Specification, Version 1.2 |publisher=Massachusetts Institute of Technology (MIT) |accessdate=30 Jan 2011 }}</ref>
* <code>PLTE</code>는 [[팔레트 (컴퓨팅)]], 즉 색공간을 표시한다.
* <code>IDAT</code>는 여러 개의 IDAT 청크로 쪼개질 수 있는 이미지를 표시한다. 파일 사이즈가 약간 커지긴 하지만 PNG를 스트리밍 방식으로 전달할 수 있게 만든다. IDAT는 압축 알고리즘의 출력 스트림을 통한 실제 이미지 파일을 갖고 있다.<ref>{{웹 인용|url=http://www.w3.org/TR/PNG/#11IDAT |title=Portable Network Graphics (PNG) Specification (Second Edition) |publisher=W3.org |date= |accessdate=2013-05-01}}</ref>
* <code>IEND</code>는 이미지의 끝을 표시한다.
<code>PLTE</code>는 컬러 타입 3(인덱스드 컬러, 설정된 색만을 표시한다)에는 필수적이다. 컬러 타입 2와 6(트루 컬러와 트루컬러 + 알파 채널)에는 선택사항이다 그리고 컬러 타입 0와 4(그레이스케일과 그레이스케일 + 알파 채널)에는 나타내서는 안된다.
== GIF와의 비교 ==
* 대부분의 경우 PNG는 [[GIF]]보다 압축률이 더 높다.
줄 91 ⟶ 57:
 
== JPEG와의 비교 ==
[[파일:Comparison of JPEG and PNG.png|thumb|200px|왼쪽의 JPEG 파일에 비해 오른쪽의 PNG 파일이 훨씬 더 깔끔하다.]]
사진과 같은 이미지에 대해서는, [[JPEG]]가 사진에 특화된 [[손실 압축]] 알고리즘을 사용하므로 PNG에 비해 더 작은 파일을 만들 수 있다. {{출처|날짜=2011-08-06|경우에 따라 5-10배 차이를 보이기도 한다.}} 하지만 JPEG 압축은 양자화의 영향으로, 바라지 않던 잡티가 낄 수 있다. 문자나 날카로운 경계가 있는 그림은, JPEG에서 생기기 쉬운 뭉개짐 없이 JPEG보다 압축을 더 잘 할 수 있는 PNG를 쓰는 것이 더 낫다.
 
또한, PNG는 비손실 압축이므로, 나중에 고화질의 재편집을 해야 한다면 PNG로 저장해 놓는 것이 낫다. JPEG를 사용할 때는 저장을 하면 할수록 계속 손실이 누적될 수 있다.
 
== 각주 ==
{{각주}}
 
== 바깥 고리 ==
* [http://www.libpng.org/pub/png/ PNG 홈페이지]
* [http://www.libpng.org/pub/png/libpng.html libpng 홈페이지]
* [http://www.libpng.org/pub/png/pngapbr.html PNG를 지원하는 브라우저] - 여러 [[웹 브라우저]]들의 PNG 지원 현황. 윈도 IE 4.0b1, 넷스케이프 4.04부터 PNG를 지원한다.
 
{{압축 형식}}
 
[[분류:그래픽 파일 포맷]]