fix: correct fx resize behavior
This commit is contained in:
@ -194,23 +194,27 @@ class ImageFilterImplement:
|
||||
# 缩放
|
||||
@staticmethod
|
||||
def apply_resize(image: Image.Image, scale: float = 1.5, scale_y = None) -> Image.Image:
|
||||
# scale 可以为负
|
||||
# 如果 scale 为负,则代表翻转
|
||||
if scale_y is not None:
|
||||
if float(scale_y) < 0:
|
||||
scale_x = float(scale)
|
||||
scale_y_value = float(scale_y) if scale_y is not None else None
|
||||
|
||||
if scale_y_value is not None:
|
||||
if scale_y_value < 0:
|
||||
image = ImageOps.flip(image)
|
||||
scale_y = abs(float(scale_y))
|
||||
if scale < 0:
|
||||
scale_y_value = abs(scale_y_value)
|
||||
if scale_x < 0:
|
||||
image = ImageOps.mirror(image)
|
||||
scale = abs(scale)
|
||||
new_size = (int(image.width * scale), int(image.height * float(scale_y)))
|
||||
return image.resize(new_size, Image.Resampling.LANCZOS)
|
||||
if scale < 0:
|
||||
image = ImageOps.mirror(image)
|
||||
image = ImageOps.flip(image)
|
||||
scale = abs(scale)
|
||||
new_size = (int(image.width * scale), int(image.height * scale))
|
||||
return image.resize(new_size, Image.Resampling.LANCZOS)
|
||||
scale_x = abs(scale_x)
|
||||
target_scale_y = scale_y_value
|
||||
else:
|
||||
if scale_x < 0:
|
||||
image = ImageOps.mirror(image)
|
||||
image = ImageOps.flip(image)
|
||||
scale_x = abs(scale_x)
|
||||
target_scale_y = scale_x
|
||||
|
||||
new_width = max(1, round(image.width * scale_x))
|
||||
new_height = max(1, round(image.height * target_scale_y))
|
||||
return image.resize((new_width, new_height), Image.Resampling.LANCZOS)
|
||||
|
||||
# 波纹
|
||||
@staticmethod
|
||||
|
||||
Reference in New Issue
Block a user