当前位置: 首页>后端>正文

微信小程序开发:异步处理接入的生成式图像卡通化

书接上文,我们完成了对接阿里云人像动漫化接口,现已完成的界面是这样的:

微信小程序开发:异步处理接入的生成式图像卡通化,第1张

就是效果看着一般,看看效果:

微信小程序开发:异步处理接入的生成式图像卡通化,第2张

然后我就在阿里云api市场转悠,就想看看还有没有什么其他奇奇怪怪的api,结果就发现了这个:

微信小程序开发:异步处理接入的生成式图像卡通化,第3张

api链接这里:

https://help.aliyun.com/zh/viapi/api-generative-image-cartoon

看看这个效果,完全是之前的不能比的啊:

微信小程序开发:异步处理接入的生成式图像卡通化,第4张

果断想到接入自己的小程序里,SDK调试链接:

https://next.api.aliyun.com/api/imageenhan/2019-09-30/GenerateCartoonizedImage?sdkStyle=old

微信小程序开发:异步处理接入的生成式图像卡通化,第5张

它是一个异步任务,提交请求后会返回一个RequestId,我们需要拿这个RequestId去另一个接口拿到处理结果,可能需要等个8秒左右才有结果,因为处理需要耗时:

调试链接:

https://next.api.aliyun.com/api/imageenhan/2019-09-30/GetAsyncJobResult?sdkStyle=old

微信小程序开发:异步处理接入的生成式图像卡通化,第6张

大家也可以按我上面的方法使用。

看看它的SDK写法:

微信小程序开发:异步处理接入的生成式图像卡通化,第7张

就两个参数,一个图片链接、一个风格效果,在之前的配置上我们增加一个生成式图形卡通化的风格配置:

微信小程序开发:异步处理接入的生成式图像卡通化,第8张

接下来先让它显示到界面上,因为我们之前已经有了一些风格选择,所以之前的风格选择我们要做成组件形式,不然会代码重复:

微信小程序开发:异步处理接入的生成式图像卡通化,第9张

风格选择组件就这些简单HTML结构,我们在页面引用:

微信小程序开发:异步处理接入的生成式图像卡通化,第10张

这里有两个风格列表,和两个风格的索引还有不同风格的点击事件,先看看页面呈现效果:

微信小程序开发:异步处理接入的生成式图像卡通化,第11张

就是这样一个上下排列的结构。

我们这里只允许上下只能点击一个风格,就比如我们点了上面的3D特效,那么下面就不能选中,同理,选择了下面的风格,上面之前选中的就失焦了:

微信小程序开发:异步处理接入的生成式图像卡通化,第12张

如何实现这个效果呢?上面的既不能选择第一个也就是原图、也不能上下两行风格同时选择。

首先第一个,只需要在点击时判断是否为0即可,为0则跳过,否则设置当前索引为点击时的索引:

微信小程序开发:异步处理接入的生成式图像卡通化,第13张

可以看到我这里有一个设置为null的操作,这是因为设置为null以后某一条就不会选中任何风格了:

微信小程序开发:异步处理接入的生成式图像卡通化,第14张

这里的style_select_index允许为null类型,否则设置null时,style_select_index就只能为0了,因为这是Number类型的默认值为0。

处理好了风格选择后,开始处理提交事件,点击上面一排风格时走原先的人像动漫化接口,如果点击的是下面一排风格,那么就得走生成式图像卡通化接口。

我们先把生成式图像卡通化接口接进来:

微信小程序开发:异步处理接入的生成式图像卡通化,第15张

接口挺简单的,传入图片和风格类型即可。

再在选择第二排风格时做走生成式图像卡通化接口的逻辑:

微信小程序开发:异步处理接入的生成式图像卡通化,第16张

这里我判断的逻辑是:如果为选中人像动漫化那一排的风格,那么就肯定选中了生成式图像卡通化风格。

这里的逻辑是先调用异步任务创建阿里云任务,再将阿里云创建的任务放到我本地创建的一个队列中,再去轮询阿里云任务处理的结果。

让我们看看代码,先创建异步任务、再将异步任务添加到本地队列:

微信小程序开发:异步处理接入的生成式图像卡通化,第17张

本地队列追加的逻辑:

微信小程序开发:异步处理接入的生成式图像卡通化,第18张

然后再起一个定时任务去轮询定时任务状态:

微信小程序开发:异步处理接入的生成式图像卡通化,第19张

先while去检查本地队列是否存在任务,如果没有任务则继续下次轮询判断,如果本地队列存在任务,则从头部弹出一个任务,并向阿里云查询异步任务结果:

微信小程序开发:异步处理接入的生成式图像卡通化,第20张

大概流程就是如上↑。

我们实际提交一个任务看看,当为异步任务时,我会将追加到列表的上传任务的状态设为loading,意为上传中:

微信小程序开发:异步处理接入的生成式图像卡通化,第21张

因为定时任务一直在跑,所以队列有内容时就会开始处理了:

微信小程序开发:异步处理接入的生成式图像卡通化,第22张

第一排的特效每次返回基本都差不多,但是第二排的特效有些返回都是不一样的,我比较喜欢这个炫彩卡通的,因为它每次都返回不一样的图片:

微信小程序开发:异步处理接入的生成式图像卡通化,第23张

小程序名:《一方云知》。首页就是人像动漫化功能,欢迎大家使用。

小程序二维码:

微信小程序开发:异步处理接入的生成式图像卡通化,第24张

https://www.xamrdz.com/backend/3v61940075.html

相关文章: