포터블 네트워크 그래픽스
(Portable Network Graphics; PNG,
[2]
[3]
)는
非損失
그래픽 파일 포맷
의 하나이다.
特許
問題가 얽힌
GIF
포맷의 問題를 解決하고 改善하기 위해서 考案되었다. PNG는 公式的으로는 "핑"(
/p?ŋ/
)이라고 읽지만, 大部分은 "피엔지"라고 英語 綴字 그대로 읽는다.
PNG 포맷은
컬러 팔레트
火傷과
그레이스케일
畫像, 그리고 풀 컬러 畫像 方式을 모두 支援한다. 그러나
인터넷
商議 이미지 表示를 念頭에 두고 開發되었기 때문에
CMYK
等의
色 空間
은 支援하지 않는다.
파일 擴張字는
PNG
또는
png
를 쓰며, MIME 타입은
image/png
으로 적는다.
歷史
[
編輯
]
PNG 포맷을 만들게 된 背景은
1995年
,
유니시스
社가
GIF
에 使用되는
LZW
데이터 壓縮
알고리즘에 對해
소프트웨어 特許
를 適用할 것이라고 公告하면서이다. 이 알고리즘은 美國 特許 4,558,302番으로 登錄되어 있고, 다른 여러 나라에도 登錄되어 있다. 또한 256 色만을 貯藏할 수 있는 GIF는 限界가 있으므로 컴퓨터 性能이 좋아지면서 問題가 되어 왔다.
1999年
8月, 유니시스가
自由 소프트웨어
(프리웨어)와 非商業 소프트웨어(Non-Commercial License Software, FMOD)에 對한 無料 特許 政策을 거둬들이면서 PNG는 人氣를 끌기 始作했다.
技術 槪要
[
編輯
]
파일 헤더
[
編輯
]
PNG 파일은 8바이트의 信號로 始作한다.
[4]
값
|
意味
|
89
|
通信 等에서 8비트 데이터를 支援하지 않는 시스템을 찾거나 텍스트 파일과의 區分을 위해 使用된다.
|
50 4E 47
|
ASCII
로
PNG
라는 글字로, 텍스트 에디터 等에서 쉽게 區分하기 위해 쓰인다.
|
0D 0A
|
DOS
-style의 줄바꿈(CRLF)으로, DOS-Unix 變換에서 데이터 줄바꿈을 위해 쓰인다.
|
1A
|
DOS에서
TYPE
命令이 쓰였을 때 出力을 멈추기 위해 使用된다.
end-of-file
文字.
|
0A
|
Unix-style 줄바꿈으로, (LF) Unix-DOS 變換에서 줄바꿈에 使用한다.
|
파일의 청크
[
編輯
]
헤더 뒤에는 이미지에 對한 情報를 담고 있는 一連의 청크(chunk)가 온다. 청크는 그 自身을
重要
또는
補助
로 宣言한다. 프로그램이 받아들이지 못하는
補助
청크는 그냥 無視된다. 이런 式으로 청크를 통한 階層 構造는
디지털 컨테이너 포맷
과 같은 槪念으로, PNG 포맷이 舊버전과 互換되면서 쉽게 擴張할 수 있도록 해준다. 이와 같은 構造가 MNG, JNG, APNG 포맷에도 使用된다.
청크는 네 가지 部分으로 構成된다. 길이(4바이트), 청크 타입(또는 이름)(4바이트), 청크 데이터(길이 바이트), 그리고
循環 重複 檢事
(循環 重複檢査/체크섬, 4바이트). CRC는 길이를 除外한 청크 타입과 데이터로 生成된 network-byte-order CRC-32이다.
길이
|
청크 타입
|
청크 데이터
|
CRC
|
4 바이트
|
4 바이트
|
길이
bytes
|
4 바이트
|
청크 타입은 ASCII 文字 네個로 構成된다. 大小文字는 區分된다. 이들의 大小文字 與否가
디코더
에게 청크를 認識해야 할지에 對한 情報를 준다.
첫番째 文字는 이 청크가
重要
認知
補助
인지 알려준다. 大文字일 境遇
重要
이고, 그렇지 않을 境遇
補助
이다. 重要 청크는 파일을 읽는데 必須的인 情報를 갖고 있다. 디코더가 解釋할 수 없는 重要 청크를 받으면 파일 읽기를 中斷하고 使用者에게 警告를 傳達해야 한다.
두番째 文字는 청크가 "퍼블릭"(PNG파일 標準에 包含되어 있거나 特殊目的 퍼블릭 청크의 레지스트리에 包含되어 있음)인지 "프라이빗"(標準이 아님)인지 判別한다. 大文字는 퍼블릭이고 小文字는 프라이빗이다. 이는 프라이빗과 퍼블릭 청크의 이름이 衝突하는 것을 막아준다.(단, 같은 이름의 프라이빗 청크는 衝突할 수 있다)
세番째 文字는 PNG 標準에 따라 大文字여야 한다. 未來의 擴張을 위해 남겨둔 文字로, 디코더는 이 文字가 小文字일 境遇 解釋 못하는 것으로 處理해야 한다.
네番째 文字는 청크를 解釋하지 못할 境遇 輻射가 安全한지 判別한다. 小文字일 境遇 파일에 變更이 있어도 安全하게 複寫될 수 있다. 大文字일 境遇, 파일 變更이 重要 청크를 變更하지 않았을 境遇에만 複寫될 수 있다.
重要 청크
[
編輯
]
디코더는 PNG 파일을 읽고 렌더링하기 위해서 重要 청크를 解釋할 수 있어야 한다.
IHDR
는 첫番째 청크로 와야 한다. 이것은 順序대로 이미지의 너비, 높이, 비트 數와 컬러 타입을 標示한다.
[5]
PLTE
는
팔레트 (컴퓨팅)
, 卽 色空間을 標示한다.
IDAT
는 여러 個의 IDAT 청크로 쪼개질 수 있는 이미지를 標示한다. 파일 사이즈가 若干 커지긴 하지만 PNG를 스트리밍 方式으로 傳達할 수 있게 만든다. IDAT는 壓縮 알고리즘의 出力 스트림을 통한 實際 이미지 파일을 갖고 있다.
[6]
IEND
는 이미지의 끝을 標示한다.
PLTE
는 컬러 타입 3(인덱스드 컬러, 設定된 色만을 表示한다)에는 必須的이다. 컬러 타입 2와 6(트루 컬러와 트루컬러 + 알파 채널)에는 選擇事項이다 그리고 컬러 타입 0와 4(그레이스케일과 그레이스케일 + 알파 채널)에는 나타내서는 안된다.
GIF와의 比較
[
編輯
]
- 大部分의 境遇 PNG는
GIF
보다 壓縮率이 더 높다.
- GIF의 單色 투명층과 달리 PNG는 8비트 알파 채널을 利用한 다양한 투명층을 支援한다.
- 256色까지 支援하는 GIF와 달리 PNG는
트루 컬러
를 支援한다.
- GIF에서는 提供되는 애니메이션을 PNG는 支援하지 않는다. (代案으로 PNG에 基盤한
APNG
,
JNG
,
MNG
와 같은 파일 形式이 提案되었다.)
파일 크기
[
編輯
]
PNG가 GIF보다 最新의 壓縮 알고리즘을 使用하지만, GIF보다 더 큰 파일을 만든다고 알고 있는 사람이 있다. 여기에는 몇 가지 까닭이 있는데,
- GIF는 256色만을 支援한다. 트루 컬러 그림을 PNG로 壓縮할 때는 原本의 色을 다 貯藏하는 反面, GIF로 貯藏할 때는 256 色으로 數를 줄인 다음에 貯藏한다. 萬若 原本도 256色만을 使用한다면 이런 差異는 나오지 않는다.
- PNG 파일 形式에는
메타데이터
가 追加로 붙어 있는 境遇가 있다. (어도비 社의 파이어웍스 等).
- 어도비 포토샵의 一部 옛 버전에서는 PNG 壓縮 알고리즘을 잘 具現해 내지 못해서 큰 파일을 만들곤 했다.
PNG 파일의 크기를 줄이는
OptiPNG
나
pngcrush
와 같은
오픈 소스
로
MS-DOS
에서
유닉스
나
리눅스
等의 다양한 環境을 支援하여 提供하고 있다.
JPEG와의 比較
[
編輯
]
寫眞과 같은 이미지에 對해서는,
JPEG
가 寫眞에 特化된
損失 壓縮
알고리즘을 使用하므로 PNG에 비해 더 작은 파일을 만들 수 있다.
境遇에 따라 5-10倍 差異를 보이기도 한다.
[
出處 必要
]
하지만 JPEG 壓縮은 量子化의 影響으로, 바라지 않던 雜티가 낄 수 있다. 文字나 날카로운 境界가 있는 그림은, JPEG에서 생기기 쉬운 뭉개짐 없이 JPEG보다 壓縮을 더 잘 할 수 있는 PNG를 쓰는 것이 더 낫다.
또한, PNG는 非損失 壓縮이므로, 나중에 高畫質의 再編輯을 해야 한다면 PNG로 貯藏해 놓는 것이 낫다. JPEG를 使用할 때는 貯藏을 하면 할수록 繼續 損失이 累積될 수 있다.
같이 보기
[
編輯
]
各州
[
編輯
]
外部 링크
[
編輯
]