微信小程式開發:非同步處理接入的生成式影像卡通化

一方_self發表於2024-03-15

書接上文,我們完成了對接阿里雲人像動漫化介面,現已完成的介面是這樣的:

微信小程式開發:非同步處理接入的生成式影像卡通化

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

微信小程式開發:非同步處理接入的生成式影像卡通化

然後我就在阿里雲api市場轉悠,就想看看還有沒有什麼其他奇奇怪怪的api,結果就發現了這個:

api連結這裡:
https://help.aliyun.com/zh/viapi/api-generative-image-cartoon

微信小程式開發:非同步處理接入的生成式影像卡通化

看看這個效果,完全是之前的不能比的啊:

微信小程式開發:非同步處理接入的生成式影像卡通化

微信小程式開發:非同步處理接入的生成式影像卡通化

果斷想到接入自己的小程式裡,SDK除錯連結:
https://next.api.aliyun.com/api/imageenhan/2019-09-30/GenerateCartoonizedImage?sdkStyle=old

微信小程式開發:非同步處理接入的生成式影像卡通化

它是一個非同步任務,提交請求後會返回一個RequestId,我們需要拿這個RequestId去另一個介面拿到處理結果,可能需要等個8秒左右才有結果,因為處理需要耗時:
除錯連結:
https://next.api.aliyun.com/api/imageenhan/2019-09-30/GetAsyncJobResult?sdkStyle=old

微信小程式開發:非同步處理接入的生成式影像卡通化

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

看看它的SDK寫法:

微信小程式開發:非同步處理接入的生成式影像卡通化

就兩個引數,一個圖片連結、一個風格效果,在之前的配置上我們增加一個生成式圖形卡通化的風格配置:

微信小程式開發:非同步處理接入的生成式影像卡通化

接下來先讓它顯示到介面上,因為我們之前已經有了一些風格選擇,所以之前的風格選擇我們要做成元件形式,不然會程式碼重複:

微信小程式開發:非同步處理接入的生成式影像卡通化

風格選擇元件就這些簡單HTML結構,我們在頁面引用:

微信小程式開發:非同步處理接入的生成式影像卡通化

這裡有兩個風格列表,和兩個風格的索引還有不同風格的點選事件,先看看頁面呈現效果:

微信小程式開發:非同步處理接入的生成式影像卡通化

就是這樣一個上下排列的結構。

我們這裡只允許上下只能點選一個風格,就比如我們點了上面的3D特效,那麼下面就不能選中,同理,選擇了下面的風格,上面之前選中的就失焦了:

微信小程式開發:非同步處理接入的生成式影像卡通化

如何實現這個效果呢?上面的既不能選擇第一個也就是原圖、也不能上下兩行風格同時選擇。

首先第一個,只需要在點選時判斷是否為0即可,為0則跳過,否則設定當前索引為點選時的索引:

微信小程式開發:非同步處理接入的生成式影像卡通化

可以看到我這裡有一個設定為null的操作,這是因為設定為null以後某一條就不會選中任何風格了:

微信小程式開發:非同步處理接入的生成式影像卡通化

這裡的style_select_index允許為null型別,否則設定null時,style_select_index就只能為0了,因為這是Number型別的預設值為0。

處理好了風格選擇後,開始處理提交事件,點選上面一排風格時走原先的人像動漫化介面,如果點選的是下面一排風格,那麼就得走生成式影像卡通化介面。

我們先把生成式影像卡通化介面接進來:

微信小程式開發:非同步處理接入的生成式影像卡通化

介面挺簡單的,傳入圖片和風格型別即可。

再在選擇第二排風格時做走生成式影像卡通化介面的邏輯:

微信小程式開發:非同步處理接入的生成式影像卡通化

這裡我判斷的邏輯是:如果為選中人像動漫化那一排的風格,那麼就肯定選中了生成式影像卡通化風格。

這裡的邏輯是先呼叫非同步任務建立阿里雲任務,再將阿里雲建立的任務放到我本地建立的一個佇列中,再去輪詢阿里雲任務處理的結果。

讓我們看看程式碼,先建立非同步任務、再將非同步任務新增到本地佇列:

微信小程式開發:非同步處理接入的生成式影像卡通化

本地佇列追加的邏輯:

微信小程式開發:非同步處理接入的生成式影像卡通化

然後再起一個定時任務去輪詢定時任務狀態:

微信小程式開發:非同步處理接入的生成式影像卡通化

先while去檢查本地佇列是否存在任務,如果沒有任務則繼續下次輪詢判斷,如果本地佇列存在任務,則從頭部彈出一個任務,並向阿里雲查詢非同步任務結果:

微信小程式開發:非同步處理接入的生成式影像卡通化

大概流程就是如上↑。

我們實際提交一個任務看看,當為非同步任務時,我會將追加到列表的上傳任務的狀態設為loading,意為上傳中:

微信小程式開發:非同步處理接入的生成式影像卡通化

因為定時任務一直在跑,所以佇列有內容時就會開始處理了:

微信小程式開發:非同步處理接入的生成式影像卡通化

第一排的特效每次返回基本都差不多,但是第二排的特效有些返回都是不一樣的,我比較喜歡這個炫彩卡通的,因為它每次都返回不一樣的圖片:

微信小程式開發:非同步處理接入的生成式影像卡通化

小程式名:《一方雲知》。首頁就是人像動漫化功能,歡迎大家使用。

小程式二維碼:

微信小程式開發:非同步處理接入的生成式影像卡通化

這篇文章就到這裡啦!如果你對文章內容有疑問或想要深入討論,歡迎在評論區留言,我會盡力回答。同時,如果你覺得這篇文章對你有幫助,不妨點個贊並分享給其他同學,讓更多人受益。

想要了解更多相關知識,可以檢視我以往的文章,其中有許多精彩內容。記得關注我,獲取及時更新,我們可以一起學習、討論技術,共同進步。

感謝你的閱讀與支援,期待在未來的文章中與你再次相遇!

相關文章