logo

PIL과 이미지 저장 방식

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

이미지 파일의 형식을 나타내는 문자열을 반환

img.format
'WEBP'

컴퓨터 그래픽의 방식

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

비트맵 방식 bitmap

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

컬러 비트맵 이미지

  • 여러 개의 픽셀을 합쳐서 표현

  • 빛의 삼원색(RGB)

    • 빨강(R)
    • 초록(G)
    • 파랑(B) rgb
  • 인쇄용 이미지는 CMYK를 사용 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) 같은 장비로 찍은 이미지를 표현할 때 사용 point-cloud

이미지 파일의 크기

img.size
(1024, 1024)

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

이미지 파일의 색상 모드

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

모드를 흑백(L)으로 변환

img.convert("L")
Previous
티처블 머신