PNG 파일 특징 - PNG pail teugjing

일반적으로 컴퓨터에서 많이 사용되는 영상 파일 형식에는 대표적으로 JPG ,BMP , GIF , PNG 등이 있음 , 전부 익숙한 형식이겠지만 각각의 파일 형식의 특징이 어떻게 되는지는 모르고 있는 사람이 대부분이다. 모두 나름대로의 압축 방식을 가지고 있으며 또 우리가 영상처리를 공부 한다고 마음을 먹었으니 특징이라도 TMI로 설명 할 수 있게 간단하게 보고 넘어가자.


JPG


JPG의 경우 사진처럼 트루컬러 영상을 저장하기 위해 주로 사용, 압축 방식은 손실 압축(lossy compression)을 사용 하여 압축을 하며 ,  손실 압축으로 저장된 영상의 경우  압축을 다시 풀어 복원을 하게 되면 원본 영상의 픽셀 값이 미세하게 달라진다. 이에 정확한 픽셀 값 연산을 필요로 하거나 처리 되어야 하는 분야에서는 JPG 파일 형식을 사용하는 일이 거의 없다. 앞에 내용 처럼 단점만 있지는 않다. JPG 형식은 파일의 용량이 크게 감소하는 장점이 있어 디지털 카메라와 같이 촬영된 사진을 저장하거나 용량이 적게 들어야 유리한 분야에서 주로 사용.

BMP


BMP는 픽셀의 데이터를 압축을 전혀하지 않은 상태로 저장.  압축은 하지 않기에 간단한 파일 구조가 가능, 대신 압축을 하지 않는 다는 것을 보고 예상을 했겠지만 파일 용량이 커짐.  일단 구조가 간편하기에 일반이이 손 쉽게 컨트롤이 가능하고 파일 입출력 시간도 빠른 편이라 여러 영상 파일 형식을 빠르게 처리하여야 되는 경우에는 적합.

GIF


256 이하의 색상을 가진 영상만을 저장이 가능한 특이한 포맷이며, 무손실 압축(lossless compression)을 수행.  무조건 256 색상으로 변환되기 때문에 무엇으로 찍든 이 파일 형식을 사용하게 되면 화질이 크게 손상.  Animation GIF를 지원하기에 움직이는 영상을 만들 수 있으며 인터넷 웹에서 널리 사용되고 있음, 하지만 우리가 공부하는 컴퓨터 비전에서는 보기가 힘들 정도로 잘 사용되지 않음

PNG


 컬러 영상과 그레이 스케일 영상 등을 모두 지원. 무손신 압축을 수행하며 무손실 압축의 특성상 위에서 본 JPG 형식보다 파일의 용량은 크지만 JPG에서 단점이였던 픽셀 값이 변경되지 않은 큰! 장점이 있음. PNG 파일은 많이 아실거라 생각하지만 알파 채널을 지원, 이에 일부분을 투명하게 설정할 수 있음.

2021.06.29 - [Python/영상처리] - [Python 영상처리] 1.. OpenCV란? -역사는 알고 시작하자-

2020.08.07 - [Python/영상처리] - [Python 영상처리] 0.. 컴퓨터 비전이란(영상처리) ?

포터블 네트워크 그래픽스

PNG 파일 특징 - PNG pail teugjing

8비트 투명 채널을 사용한 PNG 그림을 격자 무늬 배경에 오버레이했을 때의 모습. 투명도를 표시하기 위해 그래픽스 소프트웨어에 보통 사용된다.

파일 확장자.png
인터넷 미디어 타입

image/png

타입 코드PNGf
PNG
UTIpublic.png
매직 넘버89 50 4e 47 0d 0a 1a 0a
개발PNG Development Group (W3C에 기부)
발표일1996년 10월 1일(26년 전)
포맷 종류비손실 비트맵 이미지 포맷
다음으로 확장APNG, JNG, MNG
표준ISO/IEC 15948,[1] IETF RFC 2083
오픈 포맷?

포터블 네트워크 그래픽스(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는 인기를 끌기 시작했다.

  • 버전 1.0: 1996년 7월 1일 발표되었고, W3C에서도 1996년 10월 1일 표준으로 지정했다.
  • 버전 1.1: 1998년 12월 31일
  • 버전 1.2: 1999년 8월 11일
  • PNG는 국제 표준(ISO/IEC 15948:2003)과 W3C 표준으로 2003년 11월 10일 발표되었다. 이 버전은 1.2판과 약간의 차이만이 있다.

기술 개요[편집]

파일 헤더[편집]

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와의 비교[편집]

PNG 파일 특징 - PNG pail teugjing

왼쪽의 JPEG 파일에 비해 오른쪽의 PNG 파일이 훨씬 더 깔끔하다.

사진과 같은 이미지에 대해서는, JPEG가 사진에 특화된 손실 압축 알고리즘을 사용하므로 PNG에 비해 더 작은 파일을 만들 수 있다. 경우에 따라 5-10배 차이를 보이기도 한다.[출처 필요] 하지만 JPEG 압축은 양자화의 영향으로, 바라지 않던 잡티가 낄 수 있다. 문자나 날카로운 경계가 있는 그림은, JPEG에서 생기기 쉬운 뭉개짐 없이 JPEG보다 압축을 더 잘 할 수 있는 PNG를 쓰는 것이 더 낫다.

또한, PNG는 비손실 압축이므로, 나중에 고화질의 재편집을 해야 한다면 PNG로 저장해 놓는 것이 낫다. JPEG를 사용할 때는 저장을 하면 할수록 계속 손실이 누적될 수 있다.

같이 보기[편집]

  • APNG

각주[편집]

  1. “ISO/IEC 15948:2004 – Information technology – Computer graphics and image processing – Portable Network Graphics (PNG): Functional specification”. 2011년 2월 19일에 확인함.
  2. “History of PNG”. Libpng.org. 2010년 5월 29일. 2010년 10월 20일에 확인함.
  3. “IEC standard (scope)”. 2003년 11월 10일.
  4. “PNG (Portable Network Graphics) Specification, Version 1.1–12. Appendix: Rationale”. Libpng.org. 2010년 10월 20일에 확인함.
  5. Glenn Randers-Pehrson & Thomas Boutell (editors) (1999). “Chunk Specifications”. 《PNG (Portable Network Graphics) Specification, Version 1.2》. Massachusetts Institute of Technology (MIT). 2011년 1월 30일에 확인함.
  6. “Portable Network Graphics (PNG) Specification (Second Edition)”. W3.org. 2013년 5월 1일에 확인함.

외부 링크[편집]

  • PNG 홈페이지
  • libpng 홈페이지
  • PNG를 지원하는 브라우저 - 여러 웹 브라우저들의 PNG 지원 현황. 윈도 IE 4.0b1, 넷스케이프 4.04부터 PNG를 지원한다.