首頁/ 歷史/ 正文

Canvas.toDataURL 用不了咋辦?

事由是這樣的,接到一個截圖需求(以  輸出),但是在某個環境下, 這個介面返回的資料是錯誤的。

為此,寫一篇文章記錄一下,如何繞過  ,生成  字串。

以下為 Cocos官網文件中給出的截圖事例程式碼。

https://docs。cocos。com/creator/manual/zh/render/camera。html#%E6%88%AA%E5%9B%BE

Canvas.toDataURL 用不了咋辦?

官網中的截圖程式碼

幸運的是  能讀到點陣圖的畫素資訊。

程式就是處理輸入和輸出的過程,為此,明確我們的輸入輸出。

輸入: 點陣圖資訊 和 圖片寬高。

輸出:帶有圖片資訊的字串。(可將該字串放瀏覽器中的位址列,會返回一張圖片)

經思考一番,決定採用以下幾步實現:

畫素資料 -> 轉  資料 -> 轉

如何轉  格式?按照廠裡的方法,應該去了解其檔案格式如何生成,需要什麼標頭檔案資訊,關於相關內容可參考wiki :

https://en。wikipedia。org/wiki/JPEG

但,在思考前,可以考慮是否有前任的輪子。畢竟時間也是一種成本。

很快,很有型地在大型交友網站  中找到了前人留下的輪子。

https://github。com/jpeg-js/jpeg-js/blob/master/lib/encoder。js

這是  的程式碼,白玉無冰這裡操作的是直接複製出來,放到一個  程式碼中,匯出  方法。

Canvas.toDataURL 用不了咋辦?

搬運與改造 jpeg-js

再參考  中的例項程式碼,組織一下,很快就生成了  的資料。

Canvas.toDataURL 用不了咋辦?

畫素資料 轉 JPEG 資料

再把 的資料中  轉 。

Canvas.toDataURL 用不了咋辦?

Uint8Array 轉 base64

但發現截圖反了。

Canvas.toDataURL 用不了咋辦?

截圖反了

最後,再對原來的資料翻轉一下,完整的核心程式碼如下:

完整程式碼工程:

https://github。com/baiyuwubing/cocos-creator-examples/tree/master/2。4。x/assets/demo06

相關文章

頂部