파이썬을 활용한 이미지 및 문서 처리 기법

이미지와 문서 자동 처리

실제 개발 과정에서 이미지 조작과 오피스 문서 처리는 빈번하게 발생하는 요구사항입니다. 파이썬 기본 라이브러리에는 이러한 작업을 직접 지원하는 모듈이 없지만, 외부 라이브러리를 통해 효율적으로 구현할 수 있습니다.

이미지 처리 기초 개념

  1. 색상 모델: 컴퓨터 환경에서는 빨강, 초록, 파랑의 세 가지 광원을 조합하여 다양한 색상을 생성합니다. 이를 RGB(적-녹-청) 모델이라 하며, 각 색상은 0~255 범위의 값으로 표현됩니다. 알파 채널을 포함하면 RGBA 형식으로 나타내며, 이는 투명도를 의미합니다.
  2. 픽셀 단위 처리: 이미지는 픽셀로 구성된 격자 구조이며, 각 픽셀은 위치와 색상 정보를 가집니다. 이미지의 해상도는 픽셀 수에 의해 결정되며, 이들의 배열 방식이 최종 출력 결과를 만듭니다.

Pillow 라이브러리를 통한 이미지 조작

Pillow는 전통적인 PIL 라이브러리의 현대화된 버전으로, 이미지 열기, 수정, 저장 등의 작업을 지원합니다. 설치는 다음 명령어로 수행합니다:

pip install pillow

기본 이미지 접근

from PIL import Image

img = Image.open('assets/guido.jpg')
print(img.format, img.size, img.mode)  # JPEG (500, 750) RGB
img.show()

이미지 자르기

rect = (80, 20, 310, 360)
cropped = img.crop(rect)
cropped.show()

축소 및 스케일링

thumb_size = (128, 128)
img.thumbnail(thumb_size)
img.show()

이미지 복사 및 붙여넣기

head_img = Image.open('assets/luohao.png')
face_img = Image.open('assets/guido.jpg')
face_part = face_img.crop((80, 20, 310, 360))
resized_head = face_part.resize((int(face_part.width / 1.5), int(face_part.height / 1.5)))
head_img.paste(resized_head, (172, 40))
head_img.show()

회전 및 반전

rotated = img.rotate(180)
flipped = img.transpose(Image.FLIP_LEFT_RIGHT)
rotated.show()
flipped.show()

픽셀 단위 수정

for x in range(80, 310):
    for y in range(20, 360):
        img.putpixel((x, y), (128, 128, 128))  # 회색으로 칠함
img.show()

필터 적용

from PIL import ImageFilter

filtered = img.filter(ImageFilter.CONTOUR)
filtered.show()

Excel 파일 다루기

openpyxl 라이브러리는 .xlsx 확장자의 Excel 파일을 읽고 쓸 수 있게 해줍니다. 이 라이브러리는 LibreOffice Calc나 OpenOffice Calc에서 생성한 파일도 호환 가능합니다.

Word 문서 제작 및 수정

python-docx는 .docx 형식의 워드 문서를 생성하고 편집할 수 있도록 도와줍니다. 마이크로소프트 워드뿐 아니라, 무료 오픈소스 워드 프로세서인 LibreOffice Writer와 OpenOffice Writer에서도 생성된 문서를 정상적으로 처리할 수 있습니다.

PDF 문서 처리

PDF(Portable Document Format)는 고정된 레이아웃을 유지하는 문서 포맷으로, 확장자는 .pdf입니다. 파이썬을 사용해 PDF에서 텍스트 추출하거나 새 문서를 생성하는 것도 가능하며, 주로 PyPDF2, pdfplumber, 또는 reportlab 같은 라이브러리가 활용됩니다.

태그: pillow openpyxl python-docx PyPDF2 Image Processing

7월 1일 18:28에 게시됨