Python에서 종횡비를 유지하면서 이미지 크기 조정

Abid Ullah 2023년6월21일
  1. Python에서 종횡비를 유지하면서 이미지 크기 조정
  2. Python에서 종횡비를 유지하여 이미지 자르기
Python에서 종횡비를 유지하면서 이미지 크기 조정

이 Python 기사의 목적은 Python에서 가로 세로 비율을 유지하면서 이미지 크기를 조정하는 방법을 설명하는 것입니다. Python에서 이미지 크기를 조정하는 방법도 적절한 예제 프로그램과 함께 사용법을 설명합니다.

Python에서 종횡비를 유지하면서 이미지 크기 조정

Python에서는 일부 미리 정의된 패키지를 사용하여 이미지 크기를 조정할 수 있습니다. 이러한 패키지를 가져오고 중요한 기능과 메서드를 사용하면 가로 세로 비율을 잃지 않고 Python에서 이미지 크기를 조정할 수 있습니다.

Python 이미징 라이브러리(PIL) 사용

Python의 이미징 라이브러리 PIL은 이미징을 위한 Python 라이브러리입니다.

스크립트의 목적은 시스템 지향 작업을 자동화하는 것입니다. 스크립팅은 컴파일할 필요 없이 실용적인 작업을 위한 코드를 작성하는 것입니다.

강력한 이미지 처리 기능 외에도 PIL은 다양한 이미지 형식(BMP, DIB, EPS, GIF, ICO, IM, MSP, PCX, PNG, PPM, SGI, TGA, TIFF 포함)을 처리할 수 있습니다. WebP, XBM) 및 RGB, RGBA, 흑백 및 흑백과 같은 이미지 모드.

또한 PIL은 Windows, Linux 및 macOS를 포함한 대부분의 운영 체제와 호환됩니다.

Python용 표준 GUI 라이브러리는 Tkinter입니다. Python을 Tkinter와 결합하면 GUI 응용 프로그램을 빠르고 쉽게 만들 수 있습니다.

Tkinter를 사용하면 객체 지향 방식으로 Tk GUI 툴킷과 상호 작용할 수 있습니다. 또한 Tkinter에서 PIL을 가져옵니다.

그림이 선택되었다고 가정합니다. 크기와 원본 이미지는 다음과 같습니다.

크기를 조정하려는 원본 이미지

예제 코드:

# First, we have to import the modules here
from tkinter import *
from PIL import Image, ImageTk

# Now we are creating the object
root = Tk()
# Here, just reading the Image
image = Image.open("koala.png")
# Here now, using resize() method, resizing the image
resize_originalimage = image.resize((140, 80))
img_1 = ImageTk.PhotoImage(orgnlimg)
# creating, add resize image, and labeling it
label1 = Label(image=img_1)
label1.image = img_1
label1.pack()
# finally, executing the Tkinter
root.mainloop()

출력:

이미지 출력 크기 조정

이미지가 화면에 표시되든 이미지 파일에 저장되든 개별 픽셀로 표현됩니다. 이미지 데이터가 화면 표현과 동일한 해상도가 아닐 때 앨리어싱 효과가 발생합니다.

서브샘플링은 데이터를 평활화한 다음 평활화된 데이터를 서브샘플링하여 앨리어싱을 줄입니다. 이 경우 ANTIALIAS가 사용됩니다.

‘Resampling.LANCZOS’는 샘플링된 데이터를 보간하여 새로운 값을 생성하는 방법입니다. 이 방법은 일반적으로 디지털 이미지 크기 조정과 같은 다변량 보간에 사용됩니다.

원본 이미지 크기는 284 x 606이며 코드가 실행되면 원본 이미지와 크기가 조정된 이미지의 차이도 알 수 있습니다.

예제 코드:

# Python Code to resize an image while maintaining the original aspect ratio, using the PIL Methods
import PIL
from PIL import Image

# setting the size of resized image
Imagewidth = 80
Imageheight = 100
img_2 = Image.open("bear.jpg")
wpercent = Imagewidth / float(img_2.size[0])
hsize = int((float(img_2.size[1]) * float(wpercent)))
# img = img.resize((mywidth,hsize), PIL.Image.ANTIALIAS)
img_2 = img_2.resize((Imagewidth, Imageheight), PIL.Image.Resampling.LANCZOS)
img_2.save("resizedImage.jpg")
img_2.show()

다음은 원본 사진입니다.

사진 원본 크기

출력:

크기가 조정된 이미지 출력

코드를 실행하면 resizedImage.jpg라는 이름으로 디렉토리에 저장된 크기 조정된 이미지도 볼 수 있습니다.

Python에서 종횡비를 유지하여 이미지 자르기

다음은 PIL에서 사용하는 크기 조정 및 새 크기 방법으로 크기를 조정하는 대신 이미지를 잘라냅니다.

예제 코드:

# Importing Image class from PIL module by maintaining its aspect ratio
from PIL import Image

# Opens an image in RGB mode
# For the external path, we use this :
# img_3 = Image.open(r"Image Path of the Original Image")
# For internal path
img_3 = Image.open("cat.png")
# The size of the image in pixels (size of the original image)
# (This is not mandatory)
width, height = img_3.size
# Setting the cropped image points
left = 4
top = height / 5
right = 154
bottom = 3 * height / 5
# Cropped image of the above dimension
# (It will not change the original image)
img_3 = img_3.crop((left, top, right, bottom))
newsize = (300, 300)
img_3 = img_3.resize(newsize)
# img_3=img_3.save(newsize)
# Shows the image in the image viewer
img_3.show()

다음은 원본 사진입니다.

그림 원본 크기

출력:

잘린 고양이 이미지의 출력

잘라낸 이미지를 코드의 출력으로 보았기 때문에 PIL이 종횡비를 유지하여 이미지 크기를 조정하는 것뿐만 아니라 자르기도 한다고 가정할 수 있습니다.

Python에서는 Image.open을 사용하여 PIL을 사용하여 이미지의 크기를 조정하고 읽고 종횡비를 유지했습니다. 새로운 너비와 높이를 계산한 후 resize 방법을 사용하여 이미지의 크기를 조정하고 새로운 너비에 따라 동일한 방법을 사용하여 새 이미지를 저장했습니다.

이 기사가 Python에서 이미지 크기를 조정하는 방법을 이해하는 데 도움이 되기를 바랍니다.

작가: Abid Ullah
Abid Ullah avatar Abid Ullah avatar

My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.

LinkedIn

관련 문장 - Python Image