完整版

This commit is contained in:
2025-12-09 20:21:36 +08:00
parent 54fae88914
commit 6b10c99c7a
7 changed files with 242 additions and 77 deletions

View File

@ -12,7 +12,7 @@ from konabot.plugins.fx_process.gradient import GradientGenerator
import numpy as np
from konabot.plugins.fx_process.image_storage import ImageStorager
from konabot.plugins.fx_process.types import SenderInfo
from konabot.plugins.fx_process.types import SenderInfo, StoredInfo
class ImageFilterImplement:
@staticmethod
@ -548,6 +548,18 @@ class ImageFilterImplement:
return Image.fromarray(blended, 'RGBA')
# 两张图像直接覆盖
@staticmethod
def apply_overlay(image1: Image.Image, image2: Image.Image) -> Image.Image:
if image1.mode != 'RGBA':
image1 = image1.convert('RGBA')
if image2.mode != 'RGBA':
image2 = image2.convert('RGBA')
image2 = image2.resize(image1.size, Image.Resampling.LANCZOS)
return Image.alpha_composite(image1, image2)
# 叠加渐变色
@staticmethod
def apply_gradient_overlay(
@ -560,6 +572,18 @@ class ImageFilterImplement:
gradient = gradient_gen.create_gradient(image.size[0], image.size[1], color_nodes)
return ImageFilterImplement.apply_blend(image, gradient, mode=overlay_mode, alpha=0.5)
# 生成颜色,类似固态层
@staticmethod
def generate_solid(
image: Image.Image,
color_list: str = '[rgb(255,0,0)|(0,0),rgb(0,255,0)|(0,100),rgb(0,0,255)|(50,100)]'
):
gradient_gen = GradientGenerator()
color_nodes = gradient_gen.parse_color_list(color_list)
gradient = gradient_gen.create_gradient(image.size[0], image.size[1], color_nodes)
return gradient
# 阴影
@staticmethod
def apply_shadow(image: Image.Image,
@ -1090,17 +1114,50 @@ class ImageFilterEmpty:
return image
class ImageFilterStorage:
# 用于存储图像
@staticmethod
def store_image(image: Image.Image, name: str, sender_info: SenderInfo) -> Image.Image:
ImageStorager.save_image(image, name, sender_info.group_id, sender_info.qq_id)
return image
# 用于暂存图像
# 用于暂存图像,存储在第一项的后面
@staticmethod
def temp_store_image(image: Image.Image, images: list[Image.Image]) -> Image.Image:
images.append(image)
images.insert(1, image.copy())
return image
# 用于交换移动索引
@staticmethod
def swap_image_index(image: Image.Image, images: list[Image.Image], src: int = 2, dest: int = 1) -> Image.Image:
if len(images) == 0:
return image
# 将二者交换
src -= 1
dest -= 1
if 0 <= src < len(images) and 0 <= dest < len(images):
images[src], images[dest] = images[dest], images[src]
return images[0]
# 用于删除指定索引的图像
@staticmethod
def delete_image_by_index(image: Image.Image, images: list[Image.Image], index: int = 1) -> Image.Image:
# 以 1 为基准
index -= 1
if len(images) == 1:
# 只有一张图像,不能删除
return image
if 0 <= index < len(images):
del images[index]
return images[0]
# 用于选择指定索引的图像为首图
@staticmethod
def select_image_by_index(image: Image.Image, images: list[Image.Image], index: int = 2) -> Image.Image:
# 以 1 为基准
index -= 1
if 0 <= index < len(images):
return images[index]
return image
# 用于存储图像
@staticmethod
def store_image(image: Image.Image, name: str, sender_info: SenderInfo) -> StoredInfo:
ImageStorager.save_image_by_pil(image, name, sender_info.group_id, sender_info.qq_id)
return StoredInfo(name=name)
# 用于读取图像
@staticmethod