日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > vue >内容正文

vue

小程序mpvue图片绘制水印_开发笔记:使用 mpvue 开发斗图小程序

發(fā)布時(shí)間:2023/12/20 vue 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 小程序mpvue图片绘制水印_开发笔记:使用 mpvue 开发斗图小程序 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

之前用過?wepy?框架寫了個(gè)小程序?GitHub - yshkk/shanbay-mina: 基于 wepy 框架的 “扇貝閱讀” 微信小程序?,感覺寫法上類似 vue,但不那么徹底。現(xiàn)在美團(tuán)點(diǎn)評(píng)發(fā)布的?mpvue?支持開發(fā)者可以用 vue 的語法開發(fā)微信小程序,正好有強(qiáng)需求需要一個(gè)斗圖小程序,所以就嘗試了下。

掃碼體驗(yàn)

截圖

開發(fā)細(xì)節(jié)和坑

使用?iView Weapp?組件庫

相關(guān)代碼 pages/index/main.js 第 8 行

將組件庫的 dist 目錄拷貝到自己項(xiàng)目 static 目錄,然后在需要用到組件的頁面配置?usingComponents?即可。開發(fā)期間可能對(duì)組件的樣式不太滿意,或者一些蜜汁問題(比如 input 下邊框突然消失?issue?),要改的話方式非常詭異?相關(guān) issue?,所以粗暴點(diǎn)的方式就是直接改組件庫里的 wxss 文件。

v-show 和 v-model 不好使

相關(guān)代碼 pages/index/index.vue 第 4 行

關(guān)于?v-show?相關(guān)?issue?,所以只能用?v-if?替代。使用?v-if?會(huì)銷毀不顯示的組件,但有個(gè)場(chǎng)景是期望保留原來的組件,因此只能曲線救國在組件外層包一個(gè)?< view >?使用?:style="{display?condition?'block':'none'}"?的方式(其實(shí)最好是用 keep-alive 的方法,可惜 mpvue 不支持)。

v-model?就很奇怪了,好像 input 不能雙向綁定,原因是自定義組件就沒有支持?v-model?,所以得手動(dòng) update data。同理使用組件庫 input 后不能使用?v-focus?。(相關(guān)?issue?)

模板語法里不能調(diào)用 methods 方法

相關(guān)代碼 components/homppage.vue 第 52 行

可以說是血坑了,一直以為我使用姿勢(shì)有誤,費(fèi)了好長(zhǎng)時(shí)間。后來才從?articles / 美團(tuán)小程序框架 mpvue 蹲坑指南. md at master · noahlam/articles · GitHub?看到原來這是 mpvue 不支持。 當(dāng)時(shí)的場(chǎng)景是這樣的: 在圖片列表里,給被用戶 “收藏” 過的圖片加個(gè)額外的 className,該 className 可以給圖片加個(gè)粉色邊框,這樣就能在圖片列表中一眼看到哪些是被收藏過的。data 里有一個(gè)表示所有圖片的數(shù)組?imageList?和一個(gè)表示收藏列表的數(shù)組?favoriteList?。起初的寫法是

復(fù)制代碼

其中?isFavorite?是在 methods 里的一個(gè)方法,判斷當(dāng)前圖片 url 是否在?favoriteList?里。然而這樣寫一直不 work,后來只能換個(gè)方案:在 computed 里跟據(jù)?imageList?和?favoriteList計(jì)算出 一個(gè)叫?imageListWithFavorite?的數(shù)組,遍歷這個(gè)數(shù)據(jù)即可:joy: 雖然很丑陋但是還能用。

將用戶收藏同步到本地存儲(chǔ)

相關(guān)代碼 components/homppage.vue 第 63 行

用戶收藏的表情會(huì)放到微信提供的 storage,類似瀏覽器的 localstorage,這樣在關(guān)閉小程序以后下次來還能看到自己的收藏,因此在組件需要 watch?favoriteList?的變更并調(diào)用?wx.setStorage?方法。但是不知為何直接 watch?favoriteList?并不會(huì)觸發(fā)相應(yīng)函數(shù),而 watch ‘favoriteList.length’就能觸發(fā),希望有大佬能指點(diǎn)下。

watch: {

'favoriteList.length': {

// 將變化更新到本地存儲(chǔ)

handler: function (val, oldval) {

this.updateStorage({method: val > oldval ? 'ADD' : 'DELETE'})

}

}

}

復(fù)制代碼

表情包圖片制作

相關(guān)代碼 pages/maker/index.vue

思路是初始化一個(gè) canvas,將表情模版(一張圖片,url 從跳轉(zhuǎn)過來的頁面的 query 里取得)繪制到 canvas 上,用戶打字 / 設(shè)置顏色字體 的時(shí)候調(diào)用?updateCanvas?。最后調(diào)用?wx.canvasToTempFilePath?方法輸出成圖片。 關(guān)鍵代碼如下

ctx = wx.createCanvasContext('maker') // 選擇當(dāng)前 canvas

...

updateCanvas () {

ctx.drawImage(this.path, 0, 0, 300, 300) //path 為當(dāng)前表情包的路徑

ctx.setTextAlign('center') // 必須每次在 updateCanvas 重新設(shè)置,否則模擬器上生效但真機(jī)下不會(huì)生效

ctx.setFontSize(this.fontSize)

ctx.setFillStyle(this.currentColor)

ctx.fillText(this.txt, this.x, this.y)

ctx.draw()

},

復(fù)制代碼

有幾個(gè)小坑:

將圖片繪制到 canvas 時(shí)指定的圖片不能是一個(gè)遠(yuǎn)端圖床的鏈接,必須先本地下載下來(調(diào)用?wx.getImageInfo?獲取圖片,得到本地一個(gè)臨時(shí) path)才能繪制。

canvas 指定的大小單位是 px,而用 css 控制的單位是 rpx(mpvue 用了?px2rpx-loader?,就算在 css 里寫成 px 也會(huì)被編譯成 rpx)。

小程序 canvas 的?save?和?restore?功能在這里很雞肋,每次都需要完全重繪一次。特別是用戶拖動(dòng)文字更新文字坐標(biāo)的功能,?touchmove?事件一直觸發(fā),就一直更新 canvas,小程序里沒有?requestAnimationFrame?的方法,所以就自己得~~ 從網(wǎng)上找~~ 封裝一個(gè),在拖動(dòng)時(shí)起到節(jié)流的效果。

canvas 輸出的圖片只支持 jpg 或者 png,因此即使用 gif 圖的模版也只能生成靜態(tài)的表情包,殘念。

總結(jié)

大體上使用 mpvue 的體驗(yàn)還是挺好的。mpvue 和 wepy 的寫法上比較類似,mpvue 對(duì) vue 開發(fā)者來說更友好容易上手,wepy 更接近于原生小程序。雖然框架的出現(xiàn)屏蔽了一些原生小程序?qū)懫饋砗艹舐牡胤?#xff0c;?但是不管用什么框架,原生小程序的文檔還是需要掌握的?,有一大堆的坑等著要踩,有時(shí)候不得不從編譯出的文件里面找原因。

總結(jié)

以上是生活随笔為你收集整理的小程序mpvue图片绘制水印_开发笔记:使用 mpvue 开发斗图小程序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。