完整版
This commit is contained in:
@ -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
|
||||
|
||||
Reference in New Issue
Block a user