Просто сравните ширину и высоту, чтобы найти, какая сторона должна быть нарезана. Смещение кадрирования двух боковых границ равно разнице, деленной на 2.
Numpy
from PIL import Image
import numpy as np
def crop_image(img):
width, height = image.size
if width == height:
return img
img = np.array(img)
offset = int(abs(height-width)/2)
if width>height:
img = img[:,offset:(width-offset),:]
else:
img = img[offset:(height-offset),:,:]
return Image.fromarray(img)
image = Image.open(r"test.jpg")
crop_image(image)
PIL
from PIL import Image
image = Image.open(r"test.jpg")
def crop_image(image):
width, height = image.size
if width == height:
return image
offset = int(abs(height-width)/2)
if width>height:
image = image.crop([offset,0,width-offset,height])
else:
image = image.crop([0,offset,width,height-offset])
return image
image = Image.open(r"test.jpg")
crop_image(image)