Похоже, что функция аспекта не была включена для преобразования кадрирования. К счастью, расчет крысы ios прост и понятен.
import math
def calculate_image_aspect(image, width, height):
geometry_ratio = float(width)
columns = float(image.width)
rows = float(image.height)
image_ratio = columns / rows
if geometry_ratio >= image_ratio:
new_width = columns
new_height = math.floor(rows * image_ratio / geometry_ratio + 0.5) * height
else:
new_width = math.floor(columns * geometry_ratio / image_ratio + 0.5) * height
new_height = rows
return (int(new_width), int(new_height))
Скопировано из MagickCore/geometry.c
, но я уверен, что есть более быстрые способы в Python.
from wand.image import Image
with Image(filename="wizard:") as img:
new_width, new_height = calculate_image_aspect(img, 16.0, 9.0)
img.crop(width=new_width, height=new_height)
img.border('red', 1, 1)
img.save(filename="wizard.png")
with Image(filename="logo:") as img:
new_width, new_height = calculate_image_aspect(img, 16.0, 9.0)
img.crop(width=new_width, height=new_height)
img.border('red', 1, 1)
img.save(filename="logo.png")