国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

微信小程序使用canvas繪制海報(bào)并保存本地相冊(cè)

這篇具有很好參考價(jià)值的文章主要介紹了微信小程序使用canvas繪制海報(bào)并保存本地相冊(cè)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

在做微信小程序的時(shí)候,很多都會(huì)用到生成海報(bào)分享功能,剛好最近項(xiàng)目有這個(gè)需求,今天就發(fā)出來(lái)記錄下

首先是使用canvas繪制一張海報(bào),微信小程序的canvas有老版本和新版本我是用的是新版本

代碼如下

<canvas class="canvas" type="2d" id="myCanvas"></canvas>

js部分

我的做法是給canvas隱藏了不看到 ,等canvas繪制完畢后導(dǎo)出的url直接賦給image的url,然后彈出層展示,只展示生成的海報(bào)和保存圖片按鈕

 qrcode(e) {
        let _this = this
        let type = e.currentTarget.dataset.type
        if (_this.data.canvasurl !== '' && type === 'open') {
            _this.setData({
                show: true
            })
            return
        }
        if (type === 'open') {
            wx.showLoading({
                title: '分享海報(bào)生成中',
            })
            const query = wx.createSelectorQuery()
            query.select('#myCanvas')
                .fields({
                    node: true,
                    size: true
                })
                .exec((res) => {
                    const canvas = res[0].node
                    const ctx = canvas.getContext('2d')
                    // 獲取設(shè)備像素比
                    const dpr = wx.getSystemInfoSync().pixelRatio;
                    canvas.width = res[0].width * dpr
                    canvas.height = res[0].height * dpr
                    ctx.scale(dpr, dpr)
                    // 商品圖片
                    const bg = canvas.createImage();
                    bg.src = _this.data.goodList.imgurl
                    bg.onload = () => {
                        ctx.drawImage(bg, 0, 0, 251, 225)
                    }
                    // 分割線
                    ctx.strokeStyle = 'rgba(255,255,255,0.1)';
                    ctx.beginPath();
                    ctx.moveTo(0, 225);
                    ctx.lineTo(251, 225);
                    ctx.stroke();
                    // 下半部分矩形
                    ctx.fillStyle = '#fff';
                    ctx.fillRect(0, 0, 251, 406);
                    ctx.fill()
                    // 商品名稱(chēng)
                    ctx.fillStyle = '#000';
                    ctx.font = "16px Arial";
                    ctx.fillText(_this.data.goodList.goods_name, 12.5, 250);
                    ctx.fill()
                    // 商品規(guī)格
                    let width = _this.data.goodList.goods_attr.length * 10
                    _this.strokeRoundRect(ctx, 12.5, 260, width, 20, 10, 'rgba(255, 111, 96,0.2)')
                    ctx.font = "12px Arial";
                    ctx.fillStyle = "#FF6F60";
                    ctx.fillText(_this.data.goodList.goods_attr, 20, 274);
                    // 商品價(jià)格
                    ctx.font = "20px Arial";
                    ctx.fillText('¥' + _this.data.goodList.goods_price, 150, 280);
                    // 最下方文字
                    ctx.font = "12px Arial";
                    ctx.fillStyle = "#949494";
                    ctx.fillText('長(zhǎng)按識(shí)別·去看看', 77, 380);
                    // 繪制二維碼
                    App._post_form('qr', {
                        id: _this.data.goodList.goods_id
                    }, result => {
                        const code = canvas.createImage();
                        code.src = result.data
                        code.onload = () => {
                            ctx.drawImage(code, 80, 285, 80, 80)
                        }
                        setTimeout(() => {
                            _this.setData({
                                // 導(dǎo)出canvas的url(base64格式)
                                canvasurl: canvas.toDataURL('image/png'),
                                show: true
                            })
                            wx.hideLoading()
                        }, 1000)
                    })
                })
        } else {
            _this.setData({
                show: false
            })
        }

    },

canvas繪制完畢,導(dǎo)出url后開(kāi)始實(shí)現(xiàn)保存本地功能

如果是后端返的海報(bào)圖片的話直接使用wx.downloadFile方法先下載到本地然后使用

wx.saveImageToPhotosAlbum再保存到相冊(cè)

微信小程序使用canvas繪制海報(bào)并保存本地相冊(cè)

?我是用的是canvas繪制后生成的base64所以先將base64轉(zhuǎn)成圖片保存在本地再使用wx.saveImageToPhotosAlbum保存到相冊(cè)

// 保存圖片到本地
    download() {
        const _this = this;
        // 生成臨時(shí)路徑
        var filepath = wx.env.USER_DATA_PATH + '/test.png';
        //獲取文件管理器對(duì)象
        var aa = wx.getFileSystemManager();
        aa.writeFile({
            filePath: filepath,
            //只保留base64編碼 截掉data:image/png;base64,
            data: _this.data.canvasurl.slice(22),
            encoding: 'base64',
            success: function (res) {
                wx.showLoading({
                    title: '保存中...'
                })
                wx.saveImageToPhotosAlbum({
                    filePath: filepath,
                    success: function (data) {
                        console.log('保存成功', data)
                        wx.hideLoading()
                        _this.setData({
                            show: false
                        })
                        wx.showToast({
                            title: '保存成功',
                            icon: 'success',
                            duration: 2000
                        })
                        // 刪除下載暫存在本地的圖片
                        let fileMgr = wx.getFileSystemManager()
                        fileMgr.unlink({
                            filePath: res.filePath,
                            success: () => {
                                console.log('刪除緩存成功!')
                            }
                        })
                    },
                    fail: function (err) {
                        //   判斷用戶是否授權(quán)相冊(cè)寫(xiě)入權(quán)限
                        if (err.errMsg === "saveImageToPhotosAlbum:fail auth deny" || err.errMsg === "saveImageToPhotosAlbum:fail:auth denied") {
                            //當(dāng)初用戶拒絕,再次發(fā)起授權(quán)
                            wx.showModal({
                                title: '提示',
                                content: '需要您授權(quán)保存相冊(cè)',
                                showCancel: false,
                                success: () => {
                                    wx.openSetting({
                                        success(settingdata) {
                                            if (settingdata.authSetting['scope.writePhotosAlbum']) {
                                                wx.showModal({
                                                    title: '提示',
                                                    content: '獲取權(quán)限成功,再次點(diǎn)擊按鈕即可保存',
                                                    showCancel: false,
                                                })
                                            } else {
                                                wx.showModal({
                                                    title: '提示',
                                                    content: '獲取權(quán)限失敗,將無(wú)法保存到相冊(cè)',
                                                    showCancel: false,
                                                })
                                            }
                                        },
                                        fail(failData) {
                                            console.log("failData", failData)
                                        },
                                        complete(finishData) {
                                            console.log("finishData", finishData)
                                        }
                                    })
                                }
                            })
                        }
                    },
                    complete(result) {
                        //console.log(result);
                        //wx.hideLoading()
                    }
                })

            }
        })



    },

所有代碼對(duì)應(yīng)的注釋都在里面,所有的API官方文檔都有,只是做的時(shí)候需要一個(gè)一個(gè)查

附上效果圖

?微信小程序使用canvas繪制海報(bào)并保存本地相冊(cè)

?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-404696.html

發(fā)帖只是記錄,謝謝觀看

?

到了這里,關(guān)于微信小程序使用canvas繪制海報(bào)并保存本地相冊(cè)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【uniapp】微信小程序 , 海報(bào)輪播圖彈窗,點(diǎn)擊海報(bào)保存到本地,長(zhǎng)按海報(bào)圖片分享,收藏或保存
  • 微信小程序canvas type=2d生成海報(bào)保存到相冊(cè)、文字換行溢出顯示...、文字刪除線、分享面板

    微信小程序canvas type=2d生成海報(bào)保存到相冊(cè)、文字換行溢出顯示...、文字刪除線、分享面板

    做個(gè)簡(jiǎn)單的生成二維碼海報(bào)分享, 我做的時(shí)候也找簡(jiǎn)單的方法看能不能實(shí)現(xiàn)頁(yè)面直接截圖那種生成圖片,原生小程序不支持, 不多介紹下面有全部代碼有注釋、參數(shù)自行替換運(yùn)行看看,還有需要優(yōu)化的地方,有問(wèn)題可以咨詢我,我寫(xiě)的已經(jīng)上線 如圖:

    2024年02月11日
    瀏覽(93)
  • uniapp 使用canvas畫(huà)海報(bào)(微信小程序)

    uniapp 使用canvas畫(huà)海報(bào)(微信小程序)

    效果展示: ?項(xiàng)目要求:點(diǎn)擊分享繪制海報(bào),并實(shí)現(xiàn)分享到好友,朋友圈,并保存 先實(shí)現(xiàn)繪制海報(bào) ? 下面是海報(bào)下面的分享彈窗 因?yàn)榉窒淼脚笥讶?shí)在沒(méi)找到有使用自定義按鈕的可能,所以還是需要點(diǎn)擊右上角膠囊 ? ?以上就是畫(huà)海報(bào)以及分享的全部過(guò)程了,另有一個(gè)點(diǎn):

    2024年02月13日
    瀏覽(100)
  • 微信小程序使用canvas生成分享海報(bào)功能復(fù)盤(pán)

    微信小程序使用canvas生成分享海報(bào)功能復(fù)盤(pán)

    近期需要開(kāi)發(fā)一個(gè)微信小程序生成海報(bào)分享的功能。在h5一般都會(huì)直接采用 html2canvas 或者 dom2image 之類(lèi)的庫(kù)直接處理。但是由于小程序不具備傳統(tǒng)意義的dom元素,所以也沒(méi)有辦法采用此類(lèi)工具。 所以就只能一筆一筆的用 canvas 畫(huà)出來(lái)了,下面對(duì)實(shí)現(xiàn)這個(gè)功能中遇到的問(wèn)題做一

    2024年02月16日
    瀏覽(99)
  • uniapp小程序使用canvas繪制內(nèi)容并保存到本地相冊(cè)

    需求: 根據(jù)不同用戶自動(dòng)生成對(duì)應(yīng)證書(shū),并且可以下載該證書(shū)(下載后得到的是一張圖片),故要想實(shí)現(xiàn)該功能,則需要借助canvas將動(dòng)態(tài)生成的內(nèi)容繪制到頁(yè)面中,然后再實(shí)現(xiàn)下載功能。 1.html代碼 頁(yè)面很簡(jiǎn)單,只包含一個(gè)canvas和下載按鈕即可。 2.js代碼 3.效果圖展示 注:下

    2024年02月09日
    瀏覽(24)
  • 微信小程序canvas畫(huà)布繪制base64圖片并保存圖片到相冊(cè)中

    WXML部分: 樣式可以根據(jù)自己需求自行調(diào)整 canvas繪制成圖片部分: 這就將圖片繪制出來(lái)了。 首先獲取用戶相冊(cè)權(quán)限。 保存功能:

    2024年02月13日
    瀏覽(35)
  • 微信小程序使用canvas畫(huà)布生成二維碼海報(bào)分享圖片(完整示例代碼)

    微信小程序使用canvas畫(huà)布生成二維碼海報(bào)分享圖片(完整示例代碼)

    canvas.js //獲取應(yīng)用實(shí)例 const app = getApp() Page({ /** 頁(yè)面的初始數(shù)據(jù) */ data: { // canvas _width: 0, //手機(jī)屏寬 _heigth: 0,//手機(jī)屏高 swiperHeight: 300,//主圖圖片高度 canvasType: false,//canvas是否顯示 loadImagePath: ‘’,//下載的圖片 imageUrl: ‘https://cos.myfaka.com/car/service/1.jpg’, //主圖網(wǎng)絡(luò)路徑 codeU

    2024年04月12日
    瀏覽(103)
  • 小程序使用canvas標(biāo)簽生成海報(bào)并保存圖片

    小程序使用canvas標(biāo)簽生成海報(bào)并保存圖片

    先說(shuō)一下做功能前的感受,簡(jiǎn)直一臉懵逼,第一次用canvas,只知道是個(gè)畫(huà)布,其余什么都不知道…琢磨了一天才畫(huà)出來(lái)… 開(kāi)始之前百度了很久,想看看別人怎么寫(xiě)的,但是目前網(wǎng)上基本上用的都是wx.createCanvasContext這個(gè)api,但是這個(gè)api已經(jīng)停止維護(hù)了,要求使用canvas代替, ?

    2024年02月11日
    瀏覽(21)
  • 微信小程序使用canvas繪制網(wǎng)絡(luò)圖片,使用canvas將圖片變成圓形

    微信小程序使用canvas繪制網(wǎng)絡(luò)圖片,使用canvas將圖片變成圓形

    以上的寫(xiě)法 會(huì)造成某些圖標(biāo)無(wú)法繪制上去, 解決方法是在網(wǎng)絡(luò)圖片中不斷嵌套,先繪制大圖片,再繪制小圖片的順序 網(wǎng)上說(shuō)使用先下載到本地,再使用img.src加載,我嘗試過(guò)還是不行 長(zhǎng)用在海報(bào),需要將用戶的頭像畫(huà)到canvas圖片上,如: 其原理就是在圖片上面放一個(gè)圓

    2024年02月13日
    瀏覽(30)
  • 基于 Taro 框架的微信小程序 canvas 繪圖海報(bào)組件

    基于 Taro 框架的微信小程序 canvas 繪圖海報(bào)組件

    項(xiàng)目需要保存收款碼,效果如圖: (此文僅代表個(gè)人日常工作記錄,能力有限描述并不全面) 1.安裝 npm i taro-plugin-canvas -S --production(taro-plugin-canvas 是基于 Taro 框架的微信小程序 canvas 繪圖組件,封裝了常用的操作,通過(guò)配置的方式生成分享圖片) ?2.引入:import?{?TaroCanvas

    2024年01月21日
    瀏覽(95)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包