不知道还有没有同学还记得,当时自己开发智能体时,有一个自动生成证书图片的功能,既方便又实用。今天我们就来带大家回顾一下,如何快速生成图片,并且最重要的是,完全无需通过 HTTP 调用,极大提高了操作的便捷性和效率。那么,今天的主角就是 EdgeOne,这是一款不仅具备加速功能,还有强大安全保障的 CDN 服务。值得一提的是,目前图片渲染仅仅是它众多功能中的一小部分,并且该功能现在还可以免费调用,绝对是大家不可错过的试用机会!
EdgeOne
图片渲染
首先,我们需要进入腾讯云控制台,在控制台首页找到 EdgeOne 的官方入口,如下图所示。
接下来,进入到 EdgeOne 控制台后,我们可以直接看到其免费提供的图片渲染功能,无需额外开通任何服务或功能。
紧接着,我们就可以顺利查看到可供使用的模板库,其中包含了多种实用的模板供用户选择和应用。目前,这个模板库仍在不断更新和完善中,因此,如果你对最新功能或模板感兴趣,建议尽早体验。
此外,对于编写智能体的开发者来说,这个插件无疑是一个非常实用的工具。它不仅提供了丰富的模板支持,还能够实现简单、便捷的对接,极大地提升了开发效率和体验。对于有需求的小伙伴来说,这是一个非常值得关注和利用的好机会。
当然,如果你觉得现有的模板库无法满足你的需求,也完全可以根据自己的具体情况和设计需求,创建一个空白模板。如图所示:
这个设计完全可以通过纯HTML和CSS来实现,且将数据模块单独分离出来,使得管理更加方便高效。数据模块的主要功能是动态生成文字内容,通过这种方式,你可以轻松地重复使用同一套模板,只需修改数据部分即可灵活应用在不同场景中。
快速对接
API调用
这种方法既方便又快捷,但需要特别注意的是,返回的是图片的二进制内容,也就是图片的原始数据。在进行对接时,必须确保能够正确处理这种二进制数据格式,并将其转换成可用的图片形式。为了更好地理解和实施,以下是官方的API文档链接,供你参考和查阅详细的接口说明和使用方法。
你可以将这些内容直接复制出来,而无需自己编写Python代码。网上一大堆在线转换代码的网站,直接生成即可。如图所示:
运行后,可以看到以下结果:
这不是一个有效的 URL 路径,但你可以选择在自己的服务器上进行保存和处理。如果你希望直接通过 URL 路径返回给用户,建议你尝试下面的方法。
加密生成
这种方式特别适合与智能体进行对接,能够方便地为大家提供使用。你只需要预先定义好模板,并在代码节点中实现加密算法,系统便能根据该算法生成一个有效的 URL 路径。生成的路径会被 EdgeOne 自动解析,并返回相应的图片。具体的操作步骤和相关教程可以参考下方的图示:
这个部分只展示了 Node.js 的实现方式,可能对于习惯使用 Python 的同学来说不太方便,因为大多数智能体平台都是基于 Python 节点的。不过,没关系,我已经将相关代码整理出来并粘贴在下面,供大家参考。你们可以直接复制并使用它,帮助大家更方便地实现相应功能。代码如下:
import json
import urllib.parse
import hashlib
from datetime import datetimedef get_template_info(id,name,title,company):template_id = 'ep-DeX7gYHgg343'params = {"title": "荣誉证书","subtitle": "CERTIFICATE OF HONOR","text": "","name": f"{name}","descriptionPrefix": "在2024年度工作认真,业绩优秀,被评为我司","descriptionSuffix": ",特发此证,以资鼓励","descriptionTitle": f"{title}","signatureName1": "2025-01-01","signatureTitle1": "日期","signatureName2": f"{company}","signatureTitle2": "发证单位"}return template_id,paramsdef get_final_url(template_id,params):# URL 前缀url_prefix = ''# 模板中设置的图片格式format = 'png'# 用户 Iduser_id = ''# 模板 Id# template_id = template_id# 生成签名的 API Keyapi_key = ''# 在这里填入要修改的模板参数# params = {}# 对参数 key 进行排序sorted_keys = sorted(params.keys())# 对参数进行拼接search_params = '&'.join(f'{key}={params[key]}' for key in sorted_keys)# 待签名的数据sign_data = json.dumps({'apiKey': api_key,'searchParams': search_params,}, ensure_ascii=False,separators=(",", ":"))# return sign_data# 调用 md5 生成签名sign = generate_md5(sign_data)# 拼接成最后的路径final_url = f"{url_prefix}/{sign}/{user_id}/{template_id}.{format}?{search_params}"encoded_path = urllib.parse.quote(final_url, encoding='utf-8')return encoded_pathdef generate_md5(sign_data):# 创建 MD5 哈希对象md5_hash = hashlib.md5()# 更新哈希对象md5_hash.update(sign_data.encode(encoding='UTF-8'))# 获取十六进制的哈希值return md5_hash.hexdigest()def main(params):template_id,param = get_template_info(params['id'],params['name'],params['title'],params['company'])final_url = get_final_url(template_id,param)output = {'final_url': final_url,}return output
题目:将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。
这一题作为中等难度,下面和大家分享几种不同的解法。
01、二维矩阵模拟法
所谓二维矩阵模拟法就是首先构建一个二维矩阵,然后按照题目要求把字符串从上到下,从左到右,把字符一个一个排列到二维矩阵中,然后按行遍历二维矩阵把字符拼接起来即可。
根据上面整体思路,我们可以分为以下几个步骤:
(1)特殊情况处理,对于行数入参为1行,或者字符串长度小于行数入参,可以直接返回字符串无需处理;
(2)构建行数为行数入参,列数为字符串长度的二维矩阵,并把字符串所有字符填充至二维矩阵中;
安装题目要求应该是Z字形,也可以理解成倒N字,其实我们可以稍微变通一下,我们组成一个W形效果也是一样的
经过小小的变形最终效果是一样的,虽然二维矩阵空间变大了,但是我们处理难度会大大降低。因为对于W形列索引只需要以1为步长向前移动即可,而无需像Z字形需要复杂的判断。而行索引两者处理方式相同,从第1行开始向下移动时候步长为1,当到最后1行后步长改为-1,变为向上移动。
这就是为什么二维矩阵的列数选择为字符串长度的原因,可以大大降低处理难度。
(3)按行遍历二维矩阵,并取非空字符,拼接出结果。
具体代码如下:
//二维矩阵模拟法
public static string Matrix(string s, int numRows)
{//行数为 1 或者字符串长度小于等于行数,直接返回原字符串if (numRows == 1 || s.Length <= numRows){return s;}//构建二维矩阵,用于存储 Z 字形排列的字符var matrix = new char[numRows, s.Length];//当前行索引var rowIndex = 0;//行移动步长,向下移动步长为 1 ,向上移动步长为 -1var rowStep = 1;//遍历字符串for (var i = 0; i < s.Length; i++){//将当前字符放入二维矩阵中对应的位置matrix[rowIndex, i] = s[i];if (rowIndex == 0){//如果当前行是第一行,则改变行为 1//代表字符移动方向为向下rowStep = 1;}else if (rowIndex == numRows - 1){//如果当前行是最后一行,则改变行为 -1//代表字符移动方向为向上rowStep = -1;}// 根据行步长更新当前行的索引rowIndex += rowStep;}//用于存储最终结果的字符串var result = new StringBuilder();//遍历二维矩阵的行for (var r = 0; r < numRows; r++){//遍历二维矩阵的列for (var c = 0; c < s.Length; c++){//不为空的字符添加到结果字符串中if (matrix[r, c] != 0){result.Append(matrix[r, c]);}}}// 返回最终的 Z 字形变换后的字符串return result.ToString();
}
02、行模拟法(压缩矩阵)
可以发现二维矩阵模拟法还是比较简单的,也吻合我们直观的思维习惯,但是也有一个很大的缺陷,无论是Z字形还是W字形就是浪费很多空间。
因此我们可以对二维矩阵模拟法进行改进,把其行进行压缩,因为最后我们需要以行来展示最终结果,因此我们只需要每一行构建一个字符串,相关行字符串只需要拼接至当前行字符串结尾即可,这样可以最大限度节省空间,需要多少用多少。
该方法需要解决一个核心问题——行索引计算。
再我们需要动态计算一个值时,同时需要找出其规律,要不是公式规律,要不就是周期规律,而本题是在重复Z字形,显然更符合周期规律。而如果以第一行第一个字符为起点,则终点为下个第一行第一个字符之前的一个字符。也就是第一行只有起点一个点,而最后一行只有拐点一个点。因此可以得出周期公式为:[period = numRows * 2 - 2]。
同时行数是入参是已知的,因此我们就可以通过当前字符在当前周期的哪个位置[i % period],再与拐点位置比较确定行索引的前进方向即可。
下面我们一起看看具体代码;
//行模拟法(压缩矩阵)
public static string Row(string s, int numRows)
{//行数为 1 或者字符串长度小于等于行数,直接返回原字符串if (numRows == 1 || s.Length <= numRows){return s;}//构建字符串数组,每一个StringBuilder代表一行所有字符var rows = new StringBuilder[numRows];for (int i = 0; i < numRows; ++i){rows[i] = new StringBuilder();}//当前行索引var rowIndex = 0;// Z 字形变换周期var period = numRows * 2 - 2;//遍历字符串for (int i = 0; i < s.Length; ++i){//将当前字符添加到相对应行的末尾rows[rowIndex].Append(s[i]);//计算当前字符在周期内的那个位置//以最后一行的元素为分界线//一个周期前半部分为向下移动//后半部分为向上移动if (i % period < numRows - 1){//向下移动++rowIndex;}else{//右上移动--rowIndex;}}//把字符串数组拼接为最终结果var result = new StringBuilder();foreach (var row in rows){result.Append(row);}return result.ToString();
}
03、行模拟法(代码精简)
对于有代码洁癖的我,对上一个解法做了写代码精简,主要精简了三块代码。
(1)字符串数组构建;
这里通过使用Array.ConvertAll方法实现字符串数组的声明与初始化合二为一。
(2)行索引计算方式;
这里利用周期内关于拐点对称性,直接计算出行索引。如果当前字符所在周期索引为periodIndex,则其对称索引为period – periodIndex,而行号则为两者中较小值。
(3)字符串数组拼接字符串;
而拼接方式我们可以直接使用string.Join的重载方法直接拼接。
具体代码如下:
//行模拟法(代码精简)
public static string RowCompact(string s, int numRows)
{//行数为 1 或者字符串长度小于等于行数,直接返回原字符串if (numRows == 1 || s.Length <= numRows){return s;}//构建字符串数组,每一个StringBuilder代表一行所有字符var rows = Array.ConvertAll(new StringBuilder[numRows], _ => new StringBuilder());// Z 字形变换周期var period = 2 * numRows - 2;for (var i = 0; i < s.Length; i++){//计算当前字符在周期内的那个位置var periodIndex = i % period;//获取当前行索引,利用周期内对称性,取最小值确保rowIndex不超过周期的中点var rowIndex = Math.Min(periodIndex, period - periodIndex);rows[rowIndex].Append(s[i]);}return string.Join<StringBuilder>("", rows);
}
04、伪直接构建
前面的方法的思路都是类似的,是先构建行数组,然后把每行字符串拼接好后,再拼接成最终结果。那我们是否可以不去构建行数组,而是直接构建最终字符串呢?
通过前面的解法我们得到Z字形变换周期,这就意味着我们可以根据周期有一次只处理一行字符的条件。而其中重点就是首行和尾行都只有一个字符,而中间的行最多有两个字符。
这样我们就可以循环行数,一行一行构建结果字符串了,具体实现代码如下:
//伪直接构建
public static string Build(string s, int numRows)
{//行数为 1 或者字符串长度小于等于行数,直接返回原字符串if (numRows == 1 || s.Length <= numRows){return s;}//定义结果动态字符串var result = new StringBuilder();// Z 字形变换周期var period = numRows * 2 - 2;//遍历行for (var i = 0; i < numRows; ++i){//遍历每个周期的起始位置,从 0 开始,步长为 periodfor (var j = 0; j + i < s.Length; j += period){//当前周期的第一个字符,添加至结果中result.Append(s[j + i]);//根据 Z 字形特性,在一个周期内//除了第一行和最后一行只有一个字符//其他行则至少有一个字符,最多有两个字符//因此下面除了第一行和最后一行外,处理当前周期第二个字符if (0 < i && i < numRows - 1 && j + period - i < s.Length){result.Append(s[j + period - i]);}}}return result.ToString();
}
我之所以称此法为伪直接构建,因为我认为还不够直接,我认为的直接构建是:遍历字符串后直接构建出结果。
05、真直接构建
通过前面的方法,关于Z 字形变换周期计算,关于行的计算,都已经有相应的办法,因此理论上我们是可以通过直接遍历字符串而直接拼接出结果字符串。我们可以梳理一下大致思路。
(1)首先我们构建一个字符数组,拥有存放所有字符;
(2)在这个字符数组中,我们需要动态计算出每一行字符一共站了多少字符,只有这样才能确定下一行第一个字符的起始位置,也就是相当于我们需要动态把字符数组分成n段,每一段代表一行字符;
(3)需要单独处理最后一个周期,因为最后一个周期字符是不确定的,而且它会影响每一行字符的总数,因此需要分类处理好,才能保证第(2)点的计算正确;
因此如果我们需要计算当前行之前行的所有字符总数,则可以分为两部分即完整周期+最后一个周期。
以上图为例,行数为5,最后一个周期字符可能是A-H,即1-8个任意个数,我们需要找到其中规律来确定最后一个周期中,每一行占了多少个字符。
如果以红色横线表示当前处理行,红色竖虚线为周期对称线,则可以把最后一个周期中最后一个字符分布在1、2、3、4四个区域中总结为以三种情况。
(1)当最后字符在1区域,则当前行之前所有行的最后一个周期字符总数为最后字符的索引;
(2)当最后字符在3、4区域,则当前行之前所有行的最后一个周期字符总数为当前行号减1;
(3)当最后字符在2区域,则当前行之前所有行的最后一个周期字符总数为最后字符的索引减去3、4区域的总字符数;
如此我们就可以一次直接构建出结果字符串,当然其中还有一些细节需要处理,比如中间行都有两个字符,而第二个字符需要格外注意,下面我们直接看看整体实现代码:
//真直接构建
public static string Build2(string s, int numRows)
{//行数为 1 或者字符串长度小于等于行数,直接返回原字符串if (numRows == 1 || s.Length <= numRows){return s;}//定义结果字符数组var result = new char[s.Length];// Z 字形变换周期var period = 2 * numRows - 2;//总的周期数var totalPeriod = (s.Length + period - 1) / period;//最后一个字符的周期索引var lastPeriodIndex = s.Length % period;lastPeriodIndex = lastPeriodIndex == 0 ? (period - 1) : (lastPeriodIndex - 1);//遍历字符串for (var i = 0; i < s.Length; i++){//当前字符串周期索引var periodIndex = i % period;//当前行索引var rowIndex = Math.Min(periodIndex, period - periodIndex);//当前字符索引,以在第几个周期为基础var index = (i / period);//处理非第一行情况if (rowIndex > 0){//当前行的起始索引为此行之前所有行的所有字符总和//第一行总字符数为总周期数//第二行总字符数为分为两部分之后,//第一部分是(totalPeriod - 1)个周期,此部分每个周期有2个元素,//第二部分是最后一个周期中此行的字符个数,需要动态计算index += totalPeriod + (totalPeriod - 1) * 2 * (rowIndex - 1);//除首尾行外中间行最多有两个字符if (rowIndex != numRows - 1){//第二个字符索引起始需要在第几个周期为基础上在加一个第几个周期index += (i / period);}//判断最后一个字符周期索引所在位置//动态计算此行之前最后一个周期中包含几个字符if (lastPeriodIndex < rowIndex){//小于当前行数,则包含最后一个周期的所有字符index += lastPeriodIndex;}else if (lastPeriodIndex < period - rowIndex){//小于当前字符对称点,则包含当前行数减1个字符index += rowIndex - 1;}else{//否则包含最后一个周期所有字符减去此行下面所有行最后一个周期的所有字符index += lastPeriodIndex - ((numRows - 1 - rowIndex) * 2 + 1);}}if (periodIndex <= numRows - 1){//处理所有行的第一个字符result[index] = s[i];}else{//处理中间行第二个字符result[index + 1] = s[i];}}return new string(result);
}
注:测试方法代码以及示例源码都已经上传至代码库,有兴趣的可以看看。https://gitee.com/hugogoos/Planner
yiyan.baidu.com/share/nHdOegkHzL
yiyan.baidu.com/share/IVHMVoEOnW
yiyan.baidu.com/share/3rpMDSb4Oa
yiyan.baidu.com/share/1iGv9vedPv
yiyan.baidu.com/share/z2XP2vdbIq
yiyan.baidu.com/share/X6DOgXGe4l
yiyan.baidu.com/share/lOKRFoI1qO
yiyan.baidu.com/share/Wquw9aNEYS
yiyan.baidu.com/share/KM4aTrRzvD
yiyan.baidu.com/share/pNuZbv7jjE
yiyan.baidu.com/share/mdLduOtQZu
yiyan.baidu.com/share/IWxIXxNz9E
yiyan.baidu.com/share/qcchGHvLW2
yiyan.baidu.com/share/vcifPfBXGS
yiyan.baidu.com/share/xDVEAFQYjg
yiyan.baidu.com/share/GXfry2TvtZ
yiyan.baidu.com/share/hk36r5nHGj
yiyan.baidu.com/share/GRbEIi3PpG
yiyan.baidu.com/share/cOcQvQX0rg
yiyan.baidu.com/share/RKxVmSIAXG
yiyan.baidu.com/share/r99422Mvn4
yiyan.baidu.com/share/GabAQK9tmR
yiyan.baidu.com/share/b3auqeXE0W
yiyan.baidu.com/share/CVWzmsKPZG
yiyan.baidu.com/share/BdZfDhrgw2
yiyan.baidu.com/share/695eImMnZS
yiyan.baidu.com/share/MRG7QwZhLy
yiyan.baidu.com/share/5nPpzWwgGv
yiyan.baidu.com/share/TWj0yqox1o
yiyan.baidu.com/share/FoM3PbzUUF
yiyan.baidu.com/share/j1nK7HNqu7
yiyan.baidu.com/share/ICFBjoDmUx
yiyan.baidu.com/share/iucgOpLj6G
yiyan.baidu.com/share/pBKQWPoOOl
yiyan.baidu.com/share/FmG68QSLyZ
yiyan.baidu.com/share/W7DamZkZnI
yiyan.baidu.com/share/BHuOfN2h8W
yiyan.baidu.com/share/gpTAd2bhHw
yiyan.baidu.com/share/Lnvz5D7kZN
yiyan.baidu.com/share/OUCrbc3MFY
yiyan.baidu.com/share/9BjNH2kuPh
yiyan.baidu.com/share/lNov4lya9r
yiyan.baidu.com/share/LDxk2ZhCNb
yiyan.baidu.com/share/8H5oQZMvV2
yiyan.baidu.com/share/vCnAGzIQzp
yiyan.baidu.com/share/va7ywLmpNs
yiyan.baidu.com/share/EVYf3q2qQD
yiyan.baidu.com/share/myLr1RAwmq
yiyan.baidu.com/share/LKGDKpPSkP
yiyan.baidu.com/share/OgwksQ8nkv
yiyan.baidu.com/share/6BNSOvhGcU
yiyan.baidu.com/share/iCzPSAZnq4
yiyan.baidu.com/share/OWshcqH0NW
yiyan.baidu.com/share/nX2Lea42j5
yiyan.baidu.com/share/dM6uQX6OAm
yiyan.baidu.com/share/hGInG0bk9C
yiyan.baidu.com/share/VacmArYonr
yiyan.baidu.com/share/WFmZG6dOnG
yiyan.baidu.com/share/9CjxGiD0Hj
yiyan.baidu.com/share/wZ5TzIT2jD
yiyan.baidu.com/share/enT9iw1Y2a
yiyan.baidu.com/share/jIEFvTwuu1
yiyan.baidu.com/share/6ewIWVAMam
yiyan.baidu.com/share/mp8GOYtZIi
yiyan.baidu.com/share/rRitZIvWUQ
yiyan.baidu.com/share/4eyAhsuZfl
yiyan.baidu.com/share/Lp4mvrvqeL
yiyan.baidu.com/share/G0mdNbc0Kq
yiyan.baidu.com/share/aDpq3bl8xj
yiyan.baidu.com/share/hl4hWzBvyG
yiyan.baidu.com/share/hQZGXUnBda
yiyan.baidu.com/share/4kwrvGf7Am
yiyan.baidu.com/share/Rtg07GOuYH
yiyan.baidu.com/share/NGlUm3BPcG
yiyan.baidu.com/share/Dci6kH3lvY
yiyan.baidu.com/share/yNRH5Ca2RT
yiyan.baidu.com/share/fU0Nd1SKcj
yiyan.baidu.com/share/A1E2FtvLDX
yiyan.baidu.com/share/3AB3wSWgpK
yiyan.baidu.com/share/CG5sVSW4K1
yiyan.baidu.com/share/y7emW8ijBg
yiyan.baidu.com/share/nhaRawWMyd
yiyan.baidu.com/share/h2gndjPotK
yiyan.baidu.com/share/XSUHyzjS4c
yiyan.baidu.com/share/A2PBMLQ4q1
yiyan.baidu.com/share/KY6eFyutEk
yiyan.baidu.com/share/yUTBzwo7v5
yiyan.baidu.com/share/DIDluOdSwA
yiyan.baidu.com/share/E0aZCgtRuc
yiyan.baidu.com/share/FHrkwDEgYs
yiyan.baidu.com/share/Eb8fKUnfsF
yiyan.baidu.com/share/t1YbRBywMP
yiyan.baidu.com/share/oXmQtlLSG8
yiyan.baidu.com/share/AgehZnrN3W
yiyan.baidu.com/share/32senY0Md2
yiyan.baidu.com/share/GGG5xPlOsk
yiyan.baidu.com/share/3v3YkRCMSm
yiyan.baidu.com/share/q4ZGaf1rCc
yiyan.baidu.com/share/y0EGH8gNIH
yiyan.baidu.com/share/nUwrt78g2b
yiyan.baidu.com/share/N35XkZz4lK
yiyan.baidu.com/share/I0NKdVH0RI
yiyan.baidu.com/share/cp50SLvH9q
yiyan.baidu.com/share/GHpdocsz07
yiyan.baidu.com/share/zEGfhKk8B1
yiyan.baidu.com/share/U0jha1zmAY
yiyan.baidu.com/share/X6qG7NiBPp
yiyan.baidu.com/share/XEN5HBd6H9
yiyan.baidu.com/share/srgmwrGc3P
yiyan.baidu.com/share/5mAFSNZnhP
yiyan.baidu.com/share/8etm0vE0So
yiyan.baidu.com/share/YKxGTrZvGN
yiyan.baidu.com/share/UADBPQPmKR
yiyan.baidu.com/share/6gjQMzcoRV
yiyan.baidu.com/share/BRkW8gdGwc
yiyan.baidu.com/share/g1qxppfOOS
yiyan.baidu.com/share/n30fIGLOGG
yiyan.baidu.com/share/VsV2SsxFGN
yiyan.baidu.com/share/KWN23i2l6g
yiyan.baidu.com/share/5sHA83e3z7
yiyan.baidu.com/share/AsXridWSHj
yiyan.baidu.com/share/6bgQi06BOA
yiyan.baidu.com/share/Eu7gAe7hq2
yiyan.baidu.com/share/d4ZxY9PeqF
yiyan.baidu.com/share/IeOV9eDcsB
yiyan.baidu.com/share/wECoTszlB2
yiyan.baidu.com/share/e3yASURVqa
yiyan.baidu.com/share/k6ycnSaW8y
yiyan.baidu.com/share/2t1pC0qV7T
yiyan.baidu.com/share/CWC4GZq6x6
yiyan.baidu.com/share/FPV4Uad4fv
yiyan.baidu.com/share/E1wRdPPzlx
yiyan.baidu.com/share/H5j7VXtdNY
yiyan.baidu.com/share/AsBMNYzHWr
yiyan.baidu.com/share/RYdl4NL3GC
yiyan.baidu.com/share/arQtmmq1hs
yiyan.baidu.com/share/r3tCULFTCB
yiyan.baidu.com/share/Nrsbp6ow3V
yiyan.baidu.com/share/ZuQMWUl7A5
yiyan.baidu.com/share/c9RVwxC1kj
yiyan.baidu.com/share/GdHihtxnWs
yiyan.baidu.com/share/ZzXUd507XG
yiyan.baidu.com/share/PQquA6dfle
yiyan.baidu.com/share/KmP3rvZriq
yiyan.baidu.com/share/vM4hLKfTOY
yiyan.baidu.com/share/pAXDyDmPAv
yiyan.baidu.com/share/YTbKGB3ORL
yiyan.baidu.com/share/s775CSidp4
yiyan.baidu.com/share/Z3TCCicj8O
yiyan.baidu.com/share/8dLT82xm2X
yiyan.baidu.com/share/M8lO7huI9Y
yiyan.baidu.com/share/7szHkgNgbW
yiyan.baidu.com/share/ttE508rZ1Y
yiyan.baidu.com/share/a0lNKOCmyX
yiyan.baidu.com/share/bTaxDddo6s
yiyan.baidu.com/share/lqjwdwBC3P
yiyan.baidu.com/share/xsFbVaiPca
yiyan.baidu.com/share/j4aC31HeXI
yiyan.baidu.com/share/7qRls2a2wv
yiyan.baidu.com/share/OgOkTrZEqI
yiyan.baidu.com/share/VOhUNEZnZi
yiyan.baidu.com/share/ucx3WGXwoN
yiyan.baidu.com/share/kiOhqp47zf
yiyan.baidu.com/share/VdqqDDEmbK
yiyan.baidu.com/share/Rw8EIFCb4P
yiyan.baidu.com/share/VQfx5YxQBj
yiyan.baidu.com/share/75UACMnXS8
yiyan.baidu.com/share/V5elz79Tw3
yiyan.baidu.com/share/z5CoCzyOcg
yiyan.baidu.com/share/zgcA6pgm1g
yiyan.baidu.com/share/Xx2Rj0m0Co
yiyan.baidu.com/share/52epxyV9G7
yiyan.baidu.com/share/m0W9G5mjEY
yiyan.baidu.com/share/giYWt8QBEV
yiyan.baidu.com/share/5IugVqmo2e
yiyan.baidu.com/share/0c4Mcy1L8P
yiyan.baidu.com/share/eNqwm6sOoh
yiyan.baidu.com/share/gTnNqY4sMm
yiyan.baidu.com/share/AlmoYCsAhU
yiyan.baidu.com/share/w77YzgNETL
yiyan.baidu.com/share/emq2G31V8X
yiyan.baidu.com/share/VdQyfcZGed
yiyan.baidu.com/share/Kc2SSmfdRd
yiyan.baidu.com/share/7kGOU6dFoz
yiyan.baidu.com/share/G3tZmDpFsu
yiyan.baidu.com/share/DDGnWuLtvB
yiyan.baidu.com/share/08XPsC39VN
yiyan.baidu.com/share/N7gFVXXY6A
yiyan.baidu.com/share/ZlahyGGEGi
yiyan.baidu.com/share/S22GkVBHNU
yiyan.baidu.com/share/b9mEtDMA3z
yiyan.baidu.com/share/Rxb5NDCUDt
yiyan.baidu.com/share/GpmO313TTE
yiyan.baidu.com/share/PRWTNq5rgN
yiyan.baidu.com/share/hUts9766nG
yiyan.baidu.com/share/LYloINVtEU
yiyan.baidu.com/share/ebm2SO8tGM
yiyan.baidu.com/share/W8dbViOejO
yiyan.baidu.com/share/AnIif0SFxA
yiyan.baidu.com/share/e33cgmgR3n
yiyan.baidu.com/share/ucN0V9jHgY
yiyan.baidu.com/share/SOFzEyrvrb
yiyan.baidu.com/share/s3oFQZeWST
yiyan.baidu.com/share/TBTr6evXX9
yiyan.baidu.com/share/QWw2GxvMEy
yiyan.baidu.com/share/XMSXBrZZ7Y
yiyan.baidu.com/share/trQGhpjZXO
yiyan.baidu.com/share/1Rzfy6G8gH
yiyan.baidu.com/share/9ZvR6aB29y
yiyan.baidu.com/share/besp3KirIw
yiyan.baidu.com/share/W421PInzCK
yiyan.baidu.com/share/OTQGmgDaCD
yiyan.baidu.com/share/DsU4yFv56K
yiyan.baidu.com/share/CoEsB2L61U
yiyan.baidu.com/share/KigrpcOGUh
yiyan.baidu.com/share/TQgajnLLgN
yiyan.baidu.com/share/rPa8U7sCDZ
yiyan.baidu.com/share/cQEMWIxkLG
yiyan.baidu.com/share/Sgw3MGuYaE
yiyan.baidu.com/share/2KqL545nU1
yiyan.baidu.com/share/ILUBwqxnay
yiyan.baidu.com/share/hbpiYu76jP
yiyan.baidu.com/share/e4Ahr4xZYP
yiyan.baidu.com/share/aEttC310pB
yiyan.baidu.com/share/9bSUjC6zQL
yiyan.baidu.com/share/wKcVuVOK1U
yiyan.baidu.com/share/Uh8LvZshdK
yiyan.baidu.com/share/AN4Z0F8jcc
yiyan.baidu.com/share/0Yr2l51Ok1
yiyan.baidu.com/share/bMMnls01xy
yiyan.baidu.com/share/XuUdt2DNvG
yiyan.baidu.com/share/dGkiOTYcb9
yiyan.baidu.com/share/aminmdKGG8
yiyan.baidu.com/share/HLDXOSNUS6
yiyan.baidu.com/share/vbDfGjt1lN
yiyan.baidu.com/share/k7xDHzfwGZ
yiyan.baidu.com/share/SSKQqkfrKz
yiyan.baidu.com/share/BvzSTfHRkV
yiyan.baidu.com/share/vZaQjg9aUp
yiyan.baidu.com/share/7dYWfjwYpj
yiyan.baidu.com/share/v7iKigXBEa
yiyan.baidu.com/share/OGmS7sanBa
yiyan.baidu.com/share/xIkjVGI7oB
yiyan.baidu.com/share/dySeFnrwGr
yiyan.baidu.com/share/qftveRxZI8
yiyan.baidu.com/share/sYoDLxxSMf
yiyan.baidu.com/share/P2cCbP39MR
yiyan.baidu.com/share/au5SVhZDiM
yiyan.baidu.com/share/hbTABgrVg7
yiyan.baidu.com/share/3uSLSGoKRQ
yiyan.baidu.com/share/deCyiLgglQ
yiyan.baidu.com/share/SN0cvpOvix
yiyan.baidu.com/share/tRhN2A72Db
yiyan.baidu.com/share/xunKx3ekNl
yiyan.baidu.com/share/7titWBb68R
yiyan.baidu.com/share/F0361Uf2UO
yiyan.baidu.com/share/l8BRvGUayS
yiyan.baidu.com/share/y1RQ0vmK6T
yiyan.baidu.com/share/IzP5SQlhI3
yiyan.baidu.com/share/3RFdVNdix1
yiyan.baidu.com/share/fYtbo39mue
yiyan.baidu.com/share/lKy44CLdoP
yiyan.baidu.com/share/86f7SKTf1x
yiyan.baidu.com/share/cp3nBkQXfL
yiyan.baidu.com/share/XAoBdovh1Y
yiyan.baidu.com/share/Ud90MWdxRW
yiyan.baidu.com/share/Xf2fxP3vTU
yiyan.baidu.com/share/xNATMbOcAL
yiyan.baidu.com/share/CoQSY6s14n
yiyan.baidu.com/share/iQMU6vvWSG
yiyan.baidu.com/share/ULrPvKNGpL
yiyan.baidu.com/share/kcZ7rjk5ic
yiyan.baidu.com/share/XV4Z2pqE3E
yiyan.baidu.com/share/IUGuqCXRF1
yiyan.baidu.com/share/d8SijYUZq3
yiyan.baidu.com/share/QPuy7GQcHX
yiyan.baidu.com/share/RGjI6Hbf0S
yiyan.baidu.com/share/lZyHuUGLxw
yiyan.baidu.com/share/sqijGxvrqK
yiyan.baidu.com/share/6A42ojWdBV
yiyan.baidu.com/share/iFqIA3WHLg
yiyan.baidu.com/share/ew02k7biGa
yiyan.baidu.com/share/nBIYgARPXm
yiyan.baidu.com/share/AttBWi5mKt
yiyan.baidu.com/share/LTnwBCkrPO
yiyan.baidu.com/share/85vaGs7VFQ
yiyan.baidu.com/share/XAc1ZH4AAz
yiyan.baidu.com/share/GdSbx8VO33
yiyan.baidu.com/share/uK1k4mPQfR
yiyan.baidu.com/share/40TfbG2Qmb
yiyan.baidu.com/share/7y1YXx4j9y
yiyan.baidu.com/share/RnAWk83W2h
yiyan.baidu.com/share/oFWGfiKXAA
yiyan.baidu.com/share/PwlLC2TAxz
yiyan.baidu.com/share/2eK67jX70d
yiyan.baidu.com/share/gaNxW5h0OT
yiyan.baidu.com/share/nVW4FRThAe
yiyan.baidu.com/share/UEhDbpuVnO
yiyan.baidu.com/share/cj1T99AyvG
yiyan.baidu.com/share/p2nuqkbZNo
yiyan.baidu.com/share/cup6LsWwiH
yiyan.baidu.com/share/K2Hr90tA9j
yiyan.baidu.com/share/OaEWHTA4zu
yiyan.baidu.com/share/BGXEGjl8YE
yiyan.baidu.com/share/GWFzVDSAjv
yiyan.baidu.com/share/eRvyUGbYIi
yiyan.baidu.com/share/C0XtDHzE8S
yiyan.baidu.com/share/GMUw9oZWcI
yiyan.baidu.com/share/QoaEKK0bwq
yiyan.baidu.com/share/ESsXMzh1b5
yiyan.baidu.com/share/H8rRGgG1qM
yiyan.baidu.com/share/F11QtqLNFA
yiyan.baidu.com/share/mcohjTecy9
yiyan.baidu.com/share/iG71bePF4B
yiyan.baidu.com/share/BxSWqTYMO6
yiyan.baidu.com/share/UTdZUWX1ca
yiyan.baidu.com/share/2sGXtapkQz
yiyan.baidu.com/share/ps24SMDxQA
yiyan.baidu.com/share/2irP2p71Pj
yiyan.baidu.com/share/FA1HZ7qMZw
yiyan.baidu.com/share/9tbhNRK2ay
yiyan.baidu.com/share/R5hFoGbAvp
yiyan.baidu.com/share/yHa5m6vDCz
yiyan.baidu.com/share/6afrftUqRg
yiyan.baidu.com/share/yYp8N57piF
yiyan.baidu.com/share/3htsYsKYb8
yiyan.baidu.com/share/7H1cQLCmGL
yiyan.baidu.com/share/VsYezmtmX7
yiyan.baidu.com/share/EZh9SmgBS2
yiyan.baidu.com/share/7fOs2NbQ9I
yiyan.baidu.com/share/eSDuMd1fZE
yiyan.baidu.com/share/dpG5ZG8KM2
yiyan.baidu.com/share/Y33bDZ5dlb
yiyan.baidu.com/share/HMYGNc89f6
yiyan.baidu.com/share/XF58zIAZFM
yiyan.baidu.com/share/BX5s3URvbl
yiyan.baidu.com/share/GlFa70dbQy
yiyan.baidu.com/share/17CdSoh74Z
yiyan.baidu.com/share/eVfAXLDGDQ
yiyan.baidu.com/share/Mp2LjO5ABW
yiyan.baidu.com/share/oeYYgkkudD
yiyan.baidu.com/share/Hegjs5VFLw
yiyan.baidu.com/share/3RvYARKLpn
yiyan.baidu.com/share/s2njlOPu7K
yiyan.baidu.com/share/21eNie2hn1
yiyan.baidu.com/share/9l7HOcGVIT
yiyan.baidu.com/share/FW5O2oy3OH
yiyan.baidu.com/share/X6KDisrpUs
yiyan.baidu.com/share/3V6fkMYZ3E
yiyan.baidu.com/share/qQeGkuqOaQ
yiyan.baidu.com/share/8Zx1GOC5MT
yiyan.baidu.com/share/plMXaDA5GF
yiyan.baidu.com/share/nEvILfr9DF
yiyan.baidu.com/share/qwev12sjwE
yiyan.baidu.com/share/41zjCzhlqq
yiyan.baidu.com/share/w032UmGPFN
yiyan.baidu.com/share/5M81U409KR
yiyan.baidu.com/share/5M4OzNhmae
yiyan.baidu.com/share/BORRQ514ZU
yiyan.baidu.com/share/ZzuEQbh61t
这段代码是完全按照官方文档的示例进行转译的。由于输出的URL路径中可能包含一些中文字符,导致许多智能体平台无法正确解析和处理这些路径,因此我们额外添加了URL编码的步骤。通过这种方式,可以确保URL中的中文字符被正确编码,从而保证路径能够被各个平台正常解析并使用。
最终生成的效果是,通过一个编码后的路径就能够顺利返回并展示对应的图片信息。
总结
回顾今天的分享,我们不仅回顾了如何快速生成智能体证书图片,更深入了解了 EdgeOne 提供的强大图片渲染功能。特别是对于智能体开发者来说,这一功能的无缝对接与加密生成方法,无疑是一个提升开发效率的绝佳工具。随着模板库不断完善,更多实用功能将陆续推出,大家可以抓住这次免费的试用机会。总的来说,EdgeOne 的图片渲染功能是开发者在日常工作中不可多得的得力助手。
我是努力的小雨,一名 Java 服务端码农,潜心研究着 AI 技术的奥秘。我热爱技术交流与分享,对开源社区充满热情。同时也是一位腾讯云创作之星、阿里云专家博主、华为云云享专家、掘金优秀作者。
💡 我将不吝分享我在技术道路上的个人探索与经验,希望能为你的学习与成长带来一些启发与帮助。
🌟 欢迎关注努力的小雨!🌟