파이썬 이미지 압축

Ammar Ali 2024년2월15일
파이썬 이미지 압축

이 튜토리얼에서는 Python에서 PIL 라이브러리를 사용하여 이미지를 압축하는 방법에 대해 설명합니다.

PIL 라이브러리를 사용하기 전에 pip 또는 python을 사용하여 설치하십시오.

pip install Pillow

PIL 라이브러리를 사용한 Python 이미지 압축

이미지 압축은 이미지 크기를 줄이는 데 사용됩니다. 우리는 이미지가 색상 또는 강도 값을 포함하는 픽셀로 구성된다는 것을 알고 있습니다.

이미지의 크기를 줄이거나 이미지를 압축하는 방법에는 주로 두 가지가 있습니다. 한 가지 방법은 이미지 크기를 조정하여 존재하는 픽셀 수를 줄이는 것입니다.

예를 들어 이미지가 500 x 500 픽셀인 경우 픽셀 수를 500 x 500에서 100 x 100 픽셀로 줄임으로써 이미지를 압축하거나 파일 크기를 줄일 수 있습니다. 결과 이미지는 압축되지만 크기가 작아지고 파일 크기도 줄어듭니다.

픽셀 수를 낮출수록 파일 크기는 줄어들지만 이미지는 작아집니다. 크기가 조정된 이미지를 제대로 보려면 확대/축소해야 할 수도 있습니다.

PIL 라이브러리의 Image 모듈의 resize() 기능을 사용하여 이미지 크기를 조정할 수 있습니다. resize() 함수의 기본 구문은 다음과 같습니다.

MyImage.resize(size, resample, box, reducing_gap)

위의 코드에서 MyImage는 입력 이미지를 포함하는 Image 모듈 개체입니다. size 매개변수는 출력 이미지의 크기를 포함하며 (너비, 높이)와 같은 두 값 튜플이어야 합니다.

resample 매개변수는 선택 사항이며 기본적으로 None으로 설정되며 PIL.Image.Resampling.NEAREST와 같이 이미지를 매끄럽게 하기 위해 이미지에 적용되는 리샘플링 필터를 설정하는 데 사용됩니다. 가장 가까운 픽셀을 사용하여 각 픽셀을 매끄럽게 하는 필터입니다.

box 매개변수도 선택적이며 기본값은 None으로 설정되어 있으며 이미지의 관심 영역을 설정하는 데 사용되며 (0,0 ,너비,높이).

reducing_gap도 선택적 인수이며 이미지에 최적화를 적용하여 이미지 크기를 더 줄이는 데 사용되며 기본적으로 해당 값은 없음으로 설정됩니다.

reducing_gap 값은 정수여야 합니다. 작은 값은 빠른 크기 조정을 의미하고 큰 값은 느린 크기 조정을 의미하지만 더 나은 결과를 의미합니다.

예를 들어 resize() 함수를 사용하여 이미지를 압축해 보겠습니다. 아래 코드를 참조하십시오.

from PIL import Image

input_img = Image.open("test.jpg")
print("input image size:", input_img.size)

output_img = input_img.resize((300, 300))
print("output image size:", output_img.size)
output_img.save("testNew.jpg")

출력:

input image size: (600, 600)
output image size: (300, 300)

크기 조정된 이미지

위의 코드에서는 PIL 라이브러리의 Image 모듈의 open()save() 기능을 사용하여 이미지를 열고 저장했습니다.

이미지와 Python 코드 파일이 같은 디렉토리에 있기 때문에 open() 함수에 이미지의 이름과 확장자만 제공했지만, 동일한 디렉토리에 있지 않은 경우 전체 이미지를 제공해야 합니다. 이름 및 확장자와 함께 이미지 파일의 경로를 읽을 수 있습니다.

또한 save() 함수에서 이미지 이름과 확장자를 사용하여 Python 코드 파일의 현재 디렉터리에 이미지를 저장하지만 다음과 함께 전체 경로를 제공하여 이미지를 다른 디렉터리에 저장할 수도 있습니다. 이미지 이름과 확장자.

위의 그림에서 왼쪽 이미지는 원본 이미지입니다. 크기는 21.6kb이고 오른쪽 이미지는 크기가 조정된 이미지이며 크기는 6.88kb입니다.

오른쪽 이미지는 200%로 확대되어 원본 이미지와 쉽게 비교할 수 있고 두 이미지에서 약간의 품질 차이를 볼 수 있습니다.

위의 예에서는 선택적 인수를 사용하지 않았지만 이를 사용하여 출력 이미지의 품질을 높일 수 있습니다.

이미지를 압축하는 또 다른 방법은 이미지 품질을 줄이는 것입니다. 이 방법에서는 이미지의 픽셀 수는 동일하게 유지되지만 이미지의 파일 크기와 함께 이미지 품질이 저하됩니다.

save() 함수 내에서 optimizequality 인수를 사용하여 이미지의 파일 크기를 줄일 수 있습니다.

optimize 인수는 true로 설정되어 이미지에 최적화를 적용하여 품질을 크게 잃지 않고 크기를 줄이며 quality 인수는 1에서 100 사이의 백분율로 설정할 수 있습니다.

품질을 50%로 설정하면 이미지 파일 크기가 절반이 됩니다. 예를 들어 위의 예에서 save() 함수는 파일 크기를 줄이기 위해서만 사용합시다.

아래 코드를 참조하십시오.

from PIL import Image

input_img = Image.open("test.jpg")
output_img = input_img.save("testNew.jpg", optimize=True, quality=50)
input_img_2 = Image.open("testNew.jpg")
print("Input image size:", input_img.size)
print("Output Image Size:", input_img_2.size)

출력:

Input image size: (600, 600)
Output Image Size: (600, 600)

이미지 품질 감소

위의 출력에서 입력 이미지와 출력 이미지의 픽셀 수가 같고 출력 이미지의 품질이 떨어지는 것을 볼 수 있습니다. 왼쪽 이미지가 원본 이미지이고 오른쪽이 출력 이미지입니다.

두 예를 비교하면 두 출력 이미지의 품질은 거의 동일하지만 첫 번째 예의 출력 이미지의 픽셀 크기는 두 번째 예의 출력 이미지의 픽셀 크기보다 작습니다. resize()save() 기능을 결합하여 필요한 결과를 얻을 수도 있습니다.

작가: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

관련 문장 - Python Image