書接上文,我們完成了對接阿里雲人像動漫化介面,現已完成的介面是這樣的:
就是效果看著一般,看看效果:
然後我就在阿里雲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,意為上傳中:
因為定時任務一直在跑,所以佇列有內容時就會開始處理了:
第一排的特效每次返回基本都差不多,但是第二排的特效有些返回都是不一樣的,我比較喜歡這個炫彩卡通的,因為它每次都返回不一樣的圖片:
小程式名:《一方雲知》。首頁就是人像動漫化功能,歡迎大家使用。
小程式二維碼:
這篇文章就到這裡啦!如果你對文章內容有疑問或想要深入討論,歡迎在評論區留言,我會盡力回答。同時,如果你覺得這篇文章對你有幫助,不妨點個贊並分享給其他同學,讓更多人受益。
想要了解更多相關知識,可以檢視我以往的文章,其中有許多精彩內容。記得關注我,獲取及時更新,我們可以一起學習、討論技術,共同進步。
感謝你的閱讀與支援,期待在未來的文章中與你再次相遇!