掘金 人工智能 2024年07月05日
coze中计算输入图片像素的小插件pixel
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

Coze 图像流插件 pixel 可以自动计算输入图片的像素,并根据背景预留的叠图区域尺寸,生成一个可适配的图片缩放参数,方便用户在背景上叠加图片,例如头像、美食图片、表情包等。插件支持两种功能:计算输入图片的像素和根据背景预留尺寸进行自适应缩放。

😊 **计算输入图片的像素**:插件通过获取图片链接,使用 requests 和 PIL 库计算图片的宽度和高度,并返回结果。 该功能可以帮助用户了解输入图片的尺寸,方便后续的叠图操作。例如,如果用户想要将一个头像叠加到一个固定格式的面板上,需要先了解头像的尺寸,才能确定叠图的位置和比例。

😀 **根据背景预留尺寸进行自适应缩放**:插件除了计算图片的像素外,还可以根据背景预留的叠图区域尺寸,自动计算出合适的缩放比例。 用户需要输入图片链接、背景预留的高度和宽度,插件会根据这两个参数计算出缩放比例,并返回结果。例如,如果用户想要将一个美食图片叠加到一个海报面板上,需要先确定海报面板上预留的叠图区域尺寸,然后使用插件计算出合适的缩放比例,保证图片能够完整地显示在预留区域内。

😄 **插件应用场景**: 该插件可以应用于各种需要叠加图片的场景,例如: * 将头像叠加到一个固定格式的面板上形成个人资料 * 将美食图片叠加到一个海报面板上 * 将表情包和 meme 叠加在一起 * 其他需要叠加图片的场景

coze图像流里面可以在背景上叠加图片,有很多应用:

但是用户输入的图片链接尺寸不可控,背景预留给图片的大小区域也是可变的,所以需要计算输入图片的像素,并且和背景中预留出的叠图区域做对比,尽量的生成一个可适配的图片缩放参数。

好工具已经上架到了coze.cn的插件商店,搜索pixel即可。

1 捏个像素提取的插件

1.1 只计算输入图片的像素

在coze中建立一个插件,用IDE环境直接上,依赖包中添加requests和image。

计算图片的源代码,可以PUA coze的IDE让它帮你写一个,类似以下源码:

输入中添加img_url作为图片输入即可。

from runtime import Args  # 假设 Args 是从某个库导入的from typings.pixel.pixel import Input, Output  # 假设 Input 和 Output 是从某个库导入的import requestsfrom PIL import Imagefrom io import BytesIO# 其他必要的导入和类定义...# 定义 handler 函数def handler(args: Args) -> Output:    try:        url = args.input.img_url  # 假设 Args 类型的对象有一个 input 属性,它是一个 Input 类型的对象        if not url:            raise ValueError("No URL provided")        response = requests.get(url, timeout=10)  # 设置超时时间        if response.status_code == 200:            image = Image.open(BytesIO(response.content))            width, height = image.size            return Output(height=height, width=width)  # 返回尺寸        else:            return Output(error=f"HTTP error: status code {response.status_code}")    except ValueError as ve:        return Output(error=str(ve))  # 返回错误信息    except requests.exceptions.RequestException as e:        return Output(error=str(e))  # 返回请求错误信息    except Exception as e:        return Output(error=str(e))  # 返回其他错误信息# 模拟 Args 类型定义,根据您的环境进行调整class Args:    def __init__(self, input_data: dict):        self.input = Input(input_data['img_url'])# 模拟 Input 类型定义class Input:    def __init__(self, img_url: str):        self.img_url = img_url# 模拟 Output 类型定义class Output:    def __init__(self, height: int = None, width: int = None, error: str = None):        self.height = height        self.width = width        self.error = error# 以下是模拟的代码执行逻辑if __name__ == "__main__":    # 假设我们有一个模拟的输入,包含一个图片 URL    input_data = {'img_url': 'https://lf-bot-studio-plugin-resource.coze.cn/obj/bot-studio-platform-plugin-tos/artist/image/6c4d9f5dea034f95979ed2e0b23d5b38.png'}    args = Args(input_data)  # 创建 Args 对象    # 调用 handler 函数并获取结果    result = handler(args)    # 根据需要处理结果,例如打印或转换为 JSON 响应    print(result)  # 这里使用 print 作为示例,您可以根据需要进行调整

搞个已知尺寸的图片链接,读出来是对的,一个512*512的图。

1.2 和背景预留尺寸做自适应

上一步计算出了输入图片的尺寸。

那么,假如给定一个背景中预留的叠图区域的尺寸,那么就需要让输入的图片和这个尺寸做自适应。

输入除了img_url之外,增加了bgh,bgw两个参数,分别代表需要去适配的高度和宽度。

将wz=bgw/width, hz=bgh/height,如果hz>wz,那么输出的zoom=取整数(wz*100)

一共的输出为height, width, zoom.

继续PUA coze ide和gpt帮我写功能代码。

from runtime import Args  # 假设 Args 是从某个库导入的from typings.pixel.pixel import Input, Output  # 假设 Input 和 Output 是从某个库导入的import requestsfrom PIL import Imagefrom io import BytesIO# 其他必要的导入和类定义...# 定义 handler 函数def handler(args: Args) -> Output:    try:        url = args.input.img_url  # 获取图片 URL        if not url:            raise ValueError("No URL provided")        response = requests.get(url, timeout=10)  # 设置超时时间        if response.status_code == 200:            image = Image.open(BytesIO(response.content))            width, height = image.size            # 计算新的 zoom 值,并乘以 100,然后取整数            wz = args.input.bgw / width            hz = args.input.bgh / height            zoom = round(min(hz, wz) * 100)            return Output(height=height, width=width, zoom=zoom)  # 返回尺寸和 zoom 值        else:            return Output(error=f"HTTP error: status code {response.status_code}")    except ValueError as ve:        return Output(error=str(ve))  # 返回错误信息    except requests.exceptions.RequestException as e:        return Output(error=str(e))  # 返回请求错误信息    except Exception as e:        return Output(error=str(e))  # 返回其他错误信息# Args 类型定义需要添加 bgh 和 bgw 参数class Args:    def __init__(self, input_data: dict):        self.input = Input(input_data['img_url'], input_data.get('bgh'), input_data.get('bgw'))# Input 类型定义需要添加 bgh 和 bgw 参数class Input:    def __init__(self, img_url: str, bgh: int = None, bgw: int = None):        self.img_url = img_url        self.bgh = bgh        self.bgw = bgw# Output 类型定义,添加 zoom 参数class Output:    def __init__(self, height: int = None, width: int = None, zoom: int = None, error: str = None):        self.height = height        self.width = width        self.zoom = zoom        self.error = error# 模拟代码执行逻辑部分将被省略,因为它是示例用法,不是核心逻辑

2 搞个背景测试下

一个512*512的纯色背景示例地址如下

https://lf-bot-studio-plugin-resource.coze.cn/obj/bot-studio-platform-plugin-tos/image/477076072fde45e3a4a27e0d86a4deb8.png

做个叠图的workflow

叠图图像流输入就是背景链接,图片链接,zoom值

其中img_logo图像流如下,就是做一个叠图的作用。IM

工作流中调用的img_zoom中,把背景的预留尺寸定义为512*512。

用这个插件,后续大家再叠图的那一步,只需要自己预留好尺寸和图片位置,就可以享受叠图自由了。

并且,单独看插件的输出,可以看到插件输出了图片的宽度width和高度height,还有zoom的建议值50。

Note1: 50代表缩小到原来的50%

Note2:图像流叠图插件里面,取值是0~1000,其中100以内为缩小,100以上为放大

踩坑tips

    常见的链接输入报错:

输入图片链接的时候,很多人会遇到报错的情况,这时候不一定是图像流的工具或者插件有问题,大概率是输入图片的链接,coze读不出来。

这时候,最好是用一个图像流工具,把网上图片保存到电脑里面,然后上传后,得到类似如下链接格式的图片链接,输入后就可以了

https://lf-bot-studio-plugin-resource.coze.cn/obj/bot-studio-platform-plugin-tos/image/98ebbe14b3404720988481f92ae2a811.png
    叠图比例和位置的设定

这个工具只能帮大家再确定了背景图中预留的宽高之后,才计算出适当的缩放比例。

但是背景图中往往在location和offset上,需要用户自己来设置。

上架插件商店

那么,问题来了,这么好用的插件,在哪里可以用得到呢

好消息,好消息,这个插件已经上架到了coze.cn的插件商店,插件商店里面搜索pixel就可以看到。

https://www.coze.cn/store/plugin/7387238703439167514

插件中有两个工具可用: 第一个pixel工具只是计算输入图片链接的高度和宽度;

第二个img_zoom需要输入背景中预留的叠图宽高数据。

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Coze 图像流 叠加图片 自适应缩放 插件
相关文章