fix: correct fx resize behavior

This commit is contained in:
2026-03-14 01:07:24 +08:00
parent f9a312b80a
commit 67502cb932
3 changed files with 56 additions and 15 deletions

View File

@ -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