小程序組件Painter,畫布canvas的使用心得


1. 先行准備

① 下載

在Github上下載代碼,代碼包里打開component目錄,復制下面的整個painter文件夾,到小程序項目的component目錄下。
由於painter本身比較大,如果放在主包里可能在編譯預覽及上傳時會提示 超出文件大小限制 的錯誤,所以建議將painter放在子包里面。(使用分包)

② 引用組件

在需要繪制海報的頁面.json中添加:

{ "usingComponents": 
{ 
"painter":"../components/painter/painter
}
}

 


③ 使用組件

在.wxml添加:

<painter palette="{{template}}" 
bind:imgOK="onImgOK" 
bind:imgErr="onImgErr" 
/>

 


獲得界面樣式的json數據
可以打開 Painter海報生成Json工具 網站,例如先導入左邊的模板,然后點擊導出Json,再點擊復制代碼,即可得到生成的Json樣式數據。

新建一個放海報樣式的文件夾
如下是我的練手項目的目錄結構,Painter和海報數據都放在分包里。
新建一個js文件,例如card.js,將第二個步驟的json數據粘貼進去。

如果數據是動態的,或者圖片是本地圖片,那么就需要再修改json數據中的值。
在最前面的palette()方法中添加參數 params,它是object
export default class LastMayday { palette(params) {
在需要動態賦值的地方修改為:${params.company}

"text": "公司名:"+`${params.company}`,
本地圖片路徑:一定不能用../形式,不然會出現file not found錯誤

"type": "image",
"url": "/wxsocial/palette/images/tp1.jpg",
1
cloud://開頭的雲存儲FileID也可以存入,跟上面一樣。但是要顯示cloud://圖片還需要修改Painter的源碼,這個在后面介紹。

小程序碼:存入圖片地址,type用image:

"type": "image",
"url": `${qrcodePath}`,
1
qrcodePath是小程序碼接口返回的路徑,我這里是 http://usr/qrcode.png

准備工作做完了,接下來進入頁面的js。

4 .js:

1> 引入 card.js

import Card from '../../palette/card';


2> 實例化並賦值

this.setData({ 
template: new Card().palette(params)
});

 


其中params就是要傳入card.js的數據:

let params = { 
"company": this.data.company, 
"contact": this.data.contact, 
"image1": this.data.image1, 
"image2": this.data.image2 
}


template賦值之后,海報會自動開始繪制,繪制完畢后會在 imgOK() 得到回調結果,如果繪制失敗則是在 imgErr() 方法中。 繪制完成后海報則會顯示。
如果不希望一直繪制,下載圖片,在 imgOK() 里可以保存圖片的路徑,下一次直接顯示圖片。

5. 對於cloud://圖片的顯示

如果用到雲開發,有時候我們會將圖片保存在雲存儲里,而微信返回的是一個FileID,而不是一個具體的下載地址,那么這種情況下要怎么將cloud://地址傳入Painter呢?
Painter默認是下載http圖片的,但是在查看Painter.js源碼時發現,它的下載工具是wx.downloadFile,而在判斷是下載圖片還是打開本地圖片時,有一個正則表達判斷是否為http(s)開頭,因此只要攔截這個判斷,並添加 cloud:// 開頭的判斷,如果是雲ID圖片,則下載雲儲存圖片,否則走正常的下載http圖片。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM