# Coze案例：产品营销海报生成

讲师：尚硅谷-宋红康

官网：[尚硅谷](http://www.atguigu.com/)

***

## 1. 打开官方模板页面

![image-20250306174859038](../images/image-20250306174859038.png)

右侧展示的都是官方模板。

## 2. 选择模板

![image-20250307091809341](../images/image-20250307091809341.png)

## 3. 复制模板

![image-20250307091930355](../images/image-20250307091936637.png)

![image-20250307092017378](../images/image-20250307092017378.png)

![image-20250307092035740](../images/image-20250307092035740.png) 

## 4. 分析工作流

此处可以看到两个工作流

![image-20250307092125375](../images/image-20250307092125375.png)

### 4.1 img_generate

这是关键的生成图片的逻辑

#### 1. 开始

![image-20250307104420043](../images/image-20250307104420043.png)

#### 2. 导出链路判定

![image-20250307104500698](../images/image-20250307104500698.png)

根据logo_place判断是否为导出链路，前者为空则不是导出，反之亦然。

##### 2.1 生图链路

logo_place为空说明是生图链路

**判断是否为文生图链路**

![image-20250307104845487](../images/image-20250307104845487.png)

如果img参数为空则说明是文生图，否则是图生图

###### 2.1.1 文生图

根据具体的宽高比生成图片

**首先由一个分支节点根据不同的propotion路由至不同的生图节点**

![image-20250307104959615](../images/image-20250307104959615.png)

**然后在不同的分支选择不同的生图比例，并选好生图模型，将用户的提示词作为生图提示词传入。**

以2:3为例

![image-20250307105056369](../images/image-20250307105056369.png)

此处的生图节点都是图像处理下的图像生成节点

![image-20250307105840634](../images/image-20250307105840634.png)

###### 2.1.2 改图

如果img不为空则是改图。

根据提示词判定是改图还是变清晰，如果提示词不为空是改图，否则为变清晰

![image-20250307105706924](../images/image-20250307105706924.png)

**改图**

将原图和提示词填入

![image-20250307105728565](../images/image-20250307105728565.png)

改图节点选择的是指令编辑插件

![image-20250307110159901](../images/image-20250307110159901.png)

**变清晰**

将原图填入

![image-20250307105749860](../images/image-20250307105749860.png)

变清晰节点选择的是画质提升插件

![image-20250307110338387](../images/image-20250307110338387.png)

##### 2.2 导出链路

###### 2.2.1 添加二维码

**根据qr_img参数是否为空判断用户是否上传了二维码**

![image-20250307110528030](../images/image-20250307110528030.png)

① 如果用户上传了二维码

**调整用户二维码图片大小，最大尺寸不超过200像素**

![image-20250307110806391](../images/image-20250307110806391.png)

**添加用户二维码**

![image-20250307110852059](../images/image-20250307110852059.png)

将调整后的用户二维码作为上层图，将传入的图片作为底图，上层图已经经过了尺寸调整，缩放比例为100%，即不缩放。并根据qr_place指定上层图的相对位置。

**此处使用的是叠图插件**

![image-20250307111131848](../images/image-20250307111131848.png)

② 如果用户没有上传二维码

则直接添加扣子官方二维码，并按照①中相同的方式叠图

![image-20250307111216415](../images/image-20250307111216415.png)

官方的二维码图片尺寸是固定的，所以直接按照指定的30%比例缩放。

**变量聚合**

通过变量聚合节点将两个分支的数据聚合在一起，下游只需要处理同一个变量output即可。

![image-20250307111351946](../images/image-20250307111351946.png)

多个分支的数据只有一个是存在的，直接将其拼接在一起，最终的效果就是执行哪个分支，哪个分支的输出就作为变量聚合后的output

###### 2.2.2 添加logo

逻辑和二维码添加相同，略。

![image-20250307111653924](../images/image-20250307111653924.png)

#### 3. 变量聚合

无论上游是导出链路还是生图链路，最终输出的都是图片，聚合在一起作为output传输至下游

![image-20250307112604876](../images/image-20250307112604876.png)

#### 4. 写入数据库

![image-20250307112656429](../images/image-20250307112656429.png)

将生成的图片和提示词存储数据表Generation，该结点会将写入的行号和当前数据表中的数据列表输出至下游。当前链路中输出的数据无用。

##### 数据表

![image-20250307112919412](../images/image-20250307112919412.png)

官方在当前应用中创建了一个数据表Generation，字段如上所示。

#### 5. 结束

最终将变量聚合节点的output输出，无论执行哪个分支，生成的图片都会被输出。

![image-20250307113053559](../images/image-20250307113053559.png)

### 4.2 read_history

#### 1. 开始

![image-20250307113125794](../images/image-20250307113125794.png)

只有一个参数，该参数是用户在本轮对话中输入的内容，然而，在UI界面调用该工作流时该参数恒为空。可以理解为开始节点实际上没有参数。

#### 2. 数据库节点

![image-20250307113238923](../images/image-20250307113238923.png)

从数据表Generation查询所有记录的图片、写入时间和提示词，作为列表outputList返回，同时返回行号。

#### 3. 结束节点

![image-20250307113411658](../images/image-20250307113411658.png)

将数据库节点查询到的数据作为output返回。

## 5. 用户界面

官方提供两个用户界面，可以通过左侧结构-图层查看所有页面的所有组件

![image-20250307114133484](../images/image-20250307114133484.png)

查看属性和事件标签，就可以知道何时及如何调用工作流，此处不展开。



