Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 이미지 픽셀화하기: 256개의 큰 픽셀로 변환하는 방법

이미지를 픽셀 아트 스타일로 변환하고 싶다면 PIL(Pillow) 라이브러리의 리사이징 기능을 활용하는 것이 가장 간단한 방법입니다. 이미지를 작은 크기(예: 16×16 = 총 256픽셀)로 축소한 후, 다시 원래 크기로 확대하되 보간 없이 확대하면 뚜렷한 큰 픽셀 효과를 얻을 수 있습니다.

핵심 원리

픽셀화의 기본 아이디어는 다음과 같습니다.

  • 원본 이미지를 매우 작은 크기(16×16)로 축소하여 세부 정보를 제거합니다.
  • 축소된 이미지를 다시 원래 크기로 확대할 때 NEAREST 이웃 보간 방식을 사용하여 각 픽셀이 하나의 큰 사각형 블록처럼 보이도록 합니다.

구현 단계

  1. 그림(figure) 크기를 설정하고 서브플롯 주변의 여백을 조정합니다.
  2. 대상 이미지 파일을 열고 확인합니다.
  3. 이미지 샘플을 16×16 크기로 리사이즈합니다.
  4. 결과 이미지를 생성하고 원래 크기로 다시 확대합니다.
  5. 결과 그림을 저장합니다.

예제 코드

from PIL import Image
from matplotlib import pyplot as plt

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

img = Image.open("bird.png")

# 16x16 = 256개의 픽셀로 축소
imgSmall = img.resize((16, 16), resample=Image.BILINEAR)

# NEAREST 보간으로 원래 크기로 확대하여 픽셀 블록 효과 적용
result = imgSmall.resize(img.size, Image.NEAREST)

result.save('result.png')

코드 설명

1단계: plt.rcParams["figure.figsize"]로 그림 크기를 인치 단위로 지정하고, figure.autolayoutTrue로 설정하여 요소들이 자동으로 배치되도록 합니다.

2단계: Image.open() 함수로 픽셀화할 이미지 파일을 불러옵니다.

3단계: img.resize((16, 16), resample=Image.BILINEAR)에서 양선형(bilinear) 보간을 사용해 이미지를 16×16, 즉 총 256개의 픽셀로 줄입니다. 이 과정에서 이미지의 전체적인 형태만 남고 세부 디테일은 사라집니다.

4단계: imgSmall.resize(img.size, Image.NEAREST)에서 최근접 이웃(nearest neighbor) 보간을 사용해 이미지를 원래 크기로 되돌립니다. 이 보간 방식은 부드러운 흐림 없이 각 픽셀을 그대로 유지하므로, 결과적으로 큰 픽셀 블록이 만들어집니다.

5단계: result.save('result.png')로 최종 결과물을 저장합니다.

참고 사항

픽셀 크기를 조절하고 싶다면 리사이즈 값을 변경하면 됩니다. 예를 들어 (32, 32)로 설정하면 더 촘촘한 픽셀화 효과를, (8, 8)로 설정하면 더 거친 픽셀화 효과를 얻을 수 있습니다. 또한 Pillow 버전에 따라 Image.BILINEARImage.NEAREST 대신 Image.Resampling.BILINEAR, Image.Resampling.NEAREST를 사용해야 할 수 있습니다.