小程式canvas繪製商品海報實現分享朋友圈
小程式的canvas繪圖絕對是整個小程式開發中坑最多的了 。
先上效果圖:
實現步驟就是點選生成圖片 在canvas畫布中畫出一張海報 然後儲存在本地 在imags標籤中展示,此處儘可能的把canvas元件隱藏 但是不能用wx:if。 用hidden或者display屬性
<button bindtap='gotoSubmit'>生成圖片</button> <!-- 彈框 --> <view class='tankuang2' wx:if="{{showhaibao}}"> <view class='container1' bindtap="previewImg"> <image style="width:100%;height:80%" src="{{imagePath}}" ></image> </view> </view> <canvas style="width:{{windowW}}px;height:{{windowH}}px;display:{{maskHidden?'none':''}}" canvas-id="mycanvas" />
css不做說明直接上程式碼
button{ width: 100%; position: fixed; z-index: 1; bottom:0; } .tankuang2{ height: 100%; width: 100%; background-color: rgba(0, 0, 0, 0.6); z-index: 999999; position: absolute; right: 0; bottom: 0; display: flex; align-items: center; justify-content: center; } .tankuang2 .container1{ height: 90%; width: 90%; background-color:#FFF; }
第一大坑
我在js中註釋的程式碼很重要,實際開發中繪製商品海報必然是用網路圖片,但經過多次嘗試網路圖片是不可以直接繪製在canvas畫布上的,就必須要把他快取下來,弄一個本地路徑,此處我用本地圖片所以就註釋了
第二大坑 坑
經過多次測試發現當你第一次點選生成圖片的時候,它會生成一張透明的圖片,根本看不到,必須要點選兩次,就是呼叫兩次生成圖片的方法才可以看到生成的圖片,我這裡為了只讓他點選一次就生成圖片,在小程式生命週期函式onReady先呼叫一次 初始化一下圖片。
好了以下就是具體程式碼
Page({ data: { showhaibao:false,//隱藏顯示 maskHidden: true,//隱藏顯示 }, onLoad: function(options) { // 此處獲取裝置的寬高。canvas繪製的圖片以次寬高為準 var _this = this; wx.getSystemInfo({ success: function(res) { console.log(res) _this.setData({ windowW: res.windowWidth , windowH: res.screenHeight, }) }, }) // wx.downloadFile({ // url: 網路圖片地址必須要在小程式中配備合法域名, // success: function (res1) { // console.log(res1.tempFilePath) // //快取商品圖片 // _this.setData({ // img1: res2.tempFilePath // }) // } // }) // wx.downloadFile({ // url: 網路圖片地址必須要在小程式中配備合法域名, // success: function (res1) { // console.log(res1.tempFilePath) // //快取二維碼圖片 // _this.setData({ // img2: res2.tempFilePath // }) // } // }) }, onReady: function() { // 頁面渲染完成 this.createNewImg(); //建立初始化圖片 }, //將金額繪製到canvas的固定 setMoney: function(context) { var money ='¥29.9' context.setFontSize(24); context.setFillStyle("red"); context.fillText(money, 40, 360); context.stroke(); }, //將說明繪製到canvas固定 setSuoming :function(context){ var Suoming="長按識別小程式碼訪問" context.setFontSize(18); context.setFillStyle("#484a3d"); context.fillText(Suoming, 15, 460); context.stroke(); }, //將說明2繪製到canvas固定 setSuoming1: function (context) { var Suoming = "子謙出品" context.setFontSize(18); context.setFillStyle("#484a3d"); context.fillText(Suoming, 50, 510); context.stroke(); }, //將標題繪製到canvas的固定 setName: function(context) { var name = "ONLY2018夏季新款蕾絲短袖連衣裙" context.setFontSize(15); context.setFillStyle("#67695b"); context.fillText(name, 40, 320); context.stroke(); }, //將canvas轉換為圖片儲存到本地,然後將圖片路徑傳給image圖片的src createNewImg: function() { var _this = this; var context = wx.createCanvasContext("mycanvas"); context.setFillStyle('#FFF') console.log(this.data.windowW, this.data.windowH) context.fillRect(0, 0, this.data.windowW, this.data.windowH) var path = "這裡放你的本地圖片路徑,或者網路圖片快取在本地的路徑"; //詳細看onLoad函式註釋部分 context.drawImage(path, 30, 20, 300, 250); //這裡是商品圖片 this.setSuoming(context); this.setName(context); this.setMoney(context); this.setSuoming1(context); context.drawImage(path, 205, 430, 150, 150);//這裡是二維碼圖片 context.draw(_this.getImg()) }, //將生成好的圖片儲存到本地 下面這句註釋是文件中的原話。 // tip: 在 draw 回撥裡呼叫canvasToTempFilePath方法才能保證圖片匯出成功。 getImg() { var _this = this; wx.canvasToTempFilePath({ canvasId: 'mycanvas', success: function success(res) { _this.setData({ imagePath: res.tempFilePath, }); } }); }, //點選圖片進行預覽,長按儲存分享圖片 previewImg: function(e) { var img = this.data.imagePath wx.previewImage({ current:img, // 當前顯示圖片的http連結 urls: [img] // 需要預覽的圖片http連結列表 }) }, gotoSubmit: function(e) { var _this=this this.setData({ maskHidden:false, showhaibao:true }) wx.showToast({ title: '圖片生成中...', icon: 'loading', duration: 2000 }); setTimeout(function() { wx.hideToast() _this.createNewImg(); }, 2000) } })
以上就是canvas繪製商品海報的全部程式碼。希望能幫助到大家 ,有不懂的或者更好的方法,歡迎大家留言或者提問
相關推薦
小程式canvas繪製商品海報實現分享朋友圈
小程式的canvas繪圖絕對是整個小程式開發中坑最多的了 。 先上效果圖: 實現步驟就是點選生成圖片 在canvas畫布中畫出一張海報 然後儲存在本地 在imags標籤中展示,此處儘可能的把canvas元件隱藏 但是不能用wx:if。 用hidden或者disp
小程式學習--點選按鈕實現分享(元件複用)
首先,第一步,建立一個按鈕的元件,方便複用,當點選按鈕時候,會跳出是否授權的對話方塊: 元件的wxml程式碼: <button bind:getuserinfo="onGetUserInfo" open-type="{{openType}}" plain="{{true}}
小程式Canvas繪製圖片太大,自動閃退,安卓會有crash問題
問題說明; 目前小程式Canvas版本還有不少bug,效能較低。 對於圖片太大使用ctx.drawImage(imgpath, 0, 0, width, height, 0, 0, tempWidth, tempHeight); 方法會出現閃退或者黑屏。 當canvas尺寸過大,比如大於2000px以上
微信小程式canvas繪製雷達圖
效果圖展示: 程式碼實現(具體實現): const DEFAULT_COLOR = '#FC9A00'; class Radar { constructor(options) { const { canvasId, width,
支付寶小程式canvas繪製線上圖片失敗
最近在做一個支付寶小程式,需求是編輯圖片,包含縮放、旋轉、拖拽,編輯後的圖片需要上傳,採用了canvas繪圖並儲存圖片後上傳,繪圖的時候用本地的圖片沒有問題,換成線上圖片後,無法顯示。 解決辦法:把網路圖片轉換成本地路徑,再放進drawImage。 my.download
小程式canvas繪製環形進度條
最近微信小程式是真的很火!依稀還記得自己第一次寫android的環形對比圖(點選開啟連結),一晃兩年已經過去了。時間過得真快。第一次寫部落格的時候還是上大三的時候。現在已經工作將近三年了。最近半年由於工作的原因很少寫部落格,那麼現在同樣從環形圖開始擼小程式,廢話
小程式canvas繪製倒計時
效果展示: //廣告倒計時 advTimeCountDown:function(advTime){ var step = 1,//計數動畫次數 num = 0,//
微信小程式用canvas生成分享朋友圈的海報
在公司遇到一個需求小程式分享到朋友圈,套路就是生成小程式的二維碼圖片,技術思路簡單點直接下載小程式二維碼的圖但是這麼簡單就不用多BB寫文章分享了,複雜點就是用canvas畫出一張圖片效果如下。 說一下解決過程吧 1.小程式canvas畫圖自己一點點畫需要不停的算東西而且
微信小程式——點選商品分類跳轉到該商品的商品詳情頁面(已實現)
首先,我不得不感慨下,慕課網上“7七月”老師的課真的很強大,此處放連結https://coding.imooc.com/learn/list/75.html。 我只是學習到了一半就開
微信小程式canvas 圖片繪製
看其他人寫的程式碼出現的其中的imageResource的路徑是網路路徑,這個在手機端預覽是有問題的圖片是需要下載的 onShow: function () { const that = this; wx.downloadFile({ url: that.data.img,
小程式js繪製海報
使用小程式畫布js程式碼如下: onLoad: function (options) { var that = this; //1. 請求後端API生成小程式碼 //that.getQr(); //2. canvas繪
微信小程式自定義二維碼分享圖--Canvas畫圖及注意事項
在一二月份做專案的時候,需要做一個微信小程式的自定義的二維碼,在此記錄與分享如何用Canvas畫圖怎麼自定義一個美觀的二維碼分享圖。 先展示下效果: 展示的是一個個人中心的
微信小程式canvas合成圖片 分享
先要獲取圖片的資訊 然後將需要合成的內容用canvas繪製出來,得到一個合成好的畫布,接下來用 wx.canvasToTempFilePath 把當前畫布指定區域的內容匯出生成指定大小的圖片,並返回檔案路徑。這個時候的路徑 是微信的臨時路徑,瀏覽器是訪問不了的,因此需要請求
微信小程式分享朋友圈的實現思路與解決辦法
原文:http://www.wxapp-union.com/portal.php?mod=view&aid=3708簡介截止我寫這篇文章的時候,小程式應該是還沒有能夠直接分享到朋友圈的api,轉發給朋友和群是可以實現的,這篇文章主要是講如何實現分享到朋友圈,所以分享給
微信小程序-canvas繪制文字實現自動換行
就是 creat 代碼 eas fun 一定的 文本 分割 func 在使用微信小程序canvas繪制文字時,時常會遇到這樣的問題:因為canvasContext.fillText參數為 我們只能設置文本的最大寬度,這就產生一定的了問題。如果我們繪制的文本長度不確定或者我
微信小程式開發——使用wxParse外掛實現html程式碼的支援
前言: 大家都知道,無論是微信小程式還是支付寶小程式都不支援html程式碼的展示的,甚至說你想貼個純html程式碼做demo都不方便,更不用說解析html了。那麼怎麼解決這個問題呢? 解決方案: 使用WxParse外掛(微信小程式富文字解析元件)就能解決這個問題。本來這個外掛是專為微信小程式設計的,但是
在微信小程式上,幫助中心介面實現類似手風琴案例
小程式wxml程式碼如下: <block wx:for="{{arrdata}}" wx:key=""> <view class="centent_title" @tap="open_that" data-index="{{index}}">
微信小程式自定義欄位實現選項的動態新增和刪除
問題描述: 在自定義選項中,點選新增選項按鈕,會出現一個選項的輸入框,輸入的選項可以通過點選左側的減號刪除 效果如圖: 解決過程: 1.首先寫出大體的框架。在pages下,建立了一個selfdefine的資料夾,在wxml中寫出靜態結構 selfdefine.wxml 說明
微信小程式 canvas 問題
微信小程式 canvas 問題 問題描述 場景:當前頁面用 canvas 畫了個圖片,獲取到臨時路徑;之後再用這個臨時路徑去畫圖,手機上會出現畫不出來或者畫不全的情況;開發者工具沒問題。 解決方案 原因不明,小程式的問題,儘量避免這種場景,沒有找到解決方案
微信小程式生成分享圖然後儲存圖片分享朋友圈
微信小程式可以實現快速的轉發好友實現分享,但是不能直接分享到朋友圈,但是有需要要這麼做,要怎麼實現呢? 檢視文件之後,大概有了實現思路 1.使用微信小程式的wx.createCanvasContext()方法,繪製圖片; 2.使用wx.canvasToTempFilePath()方法,把