Skip to main content

이미지 파일의 형식

PIL 라이브러리

  • Python Imaging Library
  • 스웨덴 기업 Secret Lab AB가 1995년부터 개발, 2011년에 중단
  • Pillow라는 이름으로 포크(fork)되어 현재까지 지속 중
  • 이미지 파일 열기, 닫기, 변환 등 기본적인 기능 제공

이미지 열기

  • PIL 라이브러리
    from PIL import Image
  • 이미지 파일인 balloon.webp를 열기
    img = Image.open("balloon.webp")
  • img 객체를 출력
    img
  • 이미지 파일의 형식을 나타내는 문자열을 반환(이 경우는 'WEBP' 문자열이 반환)
    img.format

컴퓨터 그래픽의 방식

  • 비트맵 방식: 이미지를 점으로 표현. 하나의 점이 픽셀(pixel)
  • 벡터 방식: 이미지를 선으로 표현
  • 포인트 클라우드 방식: 점의 3차원 좌표로 표현
  • 일반적으로 컴퓨터 비전에서는 비트맵 방식을 사용

비트맵 방식 bitmap

  • 이미지를 작은 정사각형 모양의 픽셀이라고 하는 점들로 저장하는 방식
  • 각각의 픽셀이 밝기를 가짐
    • 픽셀이 꺼지면(밝기 0) 검은 색이 되고, 최대로 켜지면 흰색. 그 중간에서는 회색.
  • 대부분의 사진 및 비디오 파일 형식, 이미지 처리나 컴퓨터 비전에서도 주로 사용
  • 비트맵 방식은 이미지를 확대하거나 축소할 때 왜곡이 생길 수 있음
    • 작은 이미지를 크게 확대해보시면 이미지가 흐릿해지는 것을 볼 수 있음
    • 이미지의 크기가 커지면, 이미지 한 장에 들어가는 점의 개수도 늘어나기 때문에 용량이 커짐

컬러 비트맵 이미지

  • 여러 개의 픽셀을 합쳐서 표현
  • 빛의 삼원색(RGB)
    • 빨강(R)
    • 초록(G)
    • 파랑(B)
  • 인쇄용 이미지는 CMYK를 사용
  • 색상이 중요하지 않으면 흑백으로 변환하여, 계산량을 절약

비트맵 저장 형식

  • JPEG(Joint Photographic Experts Group)
    • 대부분의 사진이나 이미지에 사용되며, 손실 압축 방식으로 이미지를 압축
    • 편집/저장을 반복하면 화질이 열화됨
  • GIF(Graphics Interchange Format)와 PNG(Portable Network Graphics)
    • 작은 애니메이션 이미지나 로고, 아이콘 등에 사용
    • 비손실 압축 방식으로 그래픽이나 웹 디자인에 많이 사용
  • WebP
    • Google에서 웹 페이지에서 더욱 빠르게 로딩되도록 개발한 영상/이미지 파일 포맷
    • 기존의 JPEG와 PNG, GIF의 장점을 모두 합쳐서 손실 압축과 비손실 압축을 모두 지원
    • 더 효율적인 압축 방식을 사용하기 때문에 파일 크기는 더 작고, 이미지 품질은 더 높은 특징
  • tiff Tagged Image File Format 출력용
  • raw Raw Image File 비압축 원본

벡터 방식 vector

  • 벡터 방식은 이미지를 수학적인 곡선과 모양으로 표현
  • 그래픽 디자인 및 로고 등에 사용
  • 이미지를 확대하거나 축소할 때도 깨지지 않고 선명한 이미지를 유지
  • 수학적인 곡선이므로 계산만 다시하면 이미지를 무한히 확대나 축소할 수 있어서, 이미지의 크기와 용량이 관계가 없음
  • 카메라로 찍은 사진 등은 픽셀 방식의 형태여서 벡터 방식으로 저장하려면 변환이 필요
  • 컴퓨터 비전에서는 벡터 방식은 잘 쓰지 않음
  • 저장 형식:
    • pdf Portable Document Format 문서용
    • eps Encapsulated PostScript 문서용 (pdf로 대체)
    • svg Scalable Vector Graphics 주로 웹 사이트에서 사용

포인트 클라우드

  • 3D 이미지에 사용하는 방식
  • 각각의 포인트는 이미지의 한 점을 나타내며 색상 정보도 함께 저장
  • 주로 라이다(LiDAR) 같은 장비로 찍은 이미지를 표현할 때 사용

이미지 파일의 크기

  • 이미지 파일의 크기를 나타내는 (가로, 세로) 형식의 튜플(tuple)을 반환
    img.size
  • 해당 코드를 실행하면, 이미지 파일의 가로와 세로 크기가 나타남

모드

  • 이미지 파일의 색상 모드
    img.mode
  • RGB: 빨강, 초록, 파랑 3가지 색을 사용
  • RGBA: 빨강, 초록, 파랑 3가지 색과 투명도(알파 채널)를 사용
  • L: 이미지를 흑백으로 표현
    • 각 픽셀의 색상은 검은 색(0)부터 흰 색(255)까지의 값으로 표현
  • CMYK: 색상을 시안(Cyan), 마젠타(Magenta), 노랑(Yellow), 검정(Black) 4가지 색으로 나타냄
    • 주로 인쇄를 위한 이미지 파일에 사용
  • 모드를 흑백(L)으로 변환
    bw = img.convert("L")

퀴즈