From 1861cd4f1a8a530e7573fa5b0211d3948d160f05 Mon Sep 17 00:00:00 2001 From: MixBadGun <1059129006@qq.com> Date: Sat, 13 Dec 2025 18:25:43 +0800 Subject: [PATCH] =?UTF-8?q?=E9=98=B4=E5=BD=B1=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- konabot/plugins/fx_process/fx_handle.py | 29 +++++++++++++++---------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/konabot/plugins/fx_process/fx_handle.py b/konabot/plugins/fx_process/fx_handle.py index 10d7c8a..692eca6 100644 --- a/konabot/plugins/fx_process/fx_handle.py +++ b/konabot/plugins/fx_process/fx_handle.py @@ -604,20 +604,27 @@ class ImageFilterImplement: shadow_color = "black") -> Image.Image: if image.mode != 'RGBA': image = image.convert('RGBA') - offset = (x_offset, y_offset) + offset = (-x_offset, -y_offset) # 创建阴影图层 - shadow = Image.new('RGBA', image.size, (0,0,0,0)) shadow_rgb = ColorHandle.parse_color(shadow_color) - shadow_draw = Image.new('RGBA', image.size, shadow_rgb + (0,)) - alpha = image.split()[3].point(lambda p: int(p * opacity)) - shadow.paste(shadow_draw, (0,0), alpha) + shadow = Image.new('RGBA', image.size, (0, 0, 0, 0)) + shadow_draw = ImageDraw.Draw(shadow) + shadow_draw.rectangle( + [0, 0, image.size[0], image.size[1]], + fill=(shadow_rgb[0], shadow_rgb[1], shadow_rgb[2], int(255 * opacity)) + ) + # 应用遮罩 + shadow.putalpha(image.split()[-1]) + # 移动 + shadow = shadow.transform( + shadow.size, + Image.AFFINE, + (1, 0, offset[0], 0, 1, offset[1]) + ) + # 应用模糊 shadow = shadow.filter(ImageFilter.GaussianBlur(blur)) - # 创建结果图像 - result = Image.new('RGBA', (image.width + abs(offset[0]), image.height + abs(offset[1])), (0,0,0,0)) - shadow_position = (max(offset[0],0), max(offset[1],0)) - image_position = (max(-offset[0],0), max(-offset[1],0)) - result.paste(shadow, shadow_position, shadow) - result.paste(image, image_position, image) + # 将阴影叠加在原图下方 + result = ImageFilterImplement.apply_overlay(shadow, image) return result