uniapp生成二維碼、掃描贿衍、分享

一授舟、前端生成二維碼
1、import uQRCode from './uqrcode.js' 引入
2贸辈、結(jié)構(gòu)

<template>
    <view class="main_box">
        <canvas canvas-id="qrcode" style="width: 450rpx; height: 450rpx;"></canvas>
    </view>
</template>

3释树、數(shù)據(jù)

data() {
            return {
                id: '123456'  //用戶id
            }
},

4、生成方法

toJSON() {},  //不加會(huì)報(bào)錯(cuò)
async loadList() {
                await uQRCode.make({
                    canvasId: 'qrcode',
                    componentInstance: this,
                    text: this.id,
                    size: uni.upx2px(450),
                    margin: 20,
                    backgroundColor: '#ffffff', //背景顏色
                    foregroundColor: '#000000',
                    fileType: 'jpg',
                    correctLevel: uQRCode.defaults.correctLevel,
                }).then(res => {
                    console.log(res)
                })
            }

5裙椭、掃描方法

            const _this = this;
            uni.scanCode({
                // scanType: ['qrCode'],   掃描的類型
                success(res) {
                    //這里即拿到了掃描出的數(shù)據(jù)
                     _this.code = res.result;
                },
                fail(err) {
                    console.log('掃碼失敗', err);
                },
                complete(end) {
                       console.log('掃碼結(jié)束',end)
                }
            });

二躏哩、后端生成,前端繪制圓角矩形卡片
1、結(jié)構(gòu)

<canvas canvas-id="card" :style="{ width: windowWidth + 'px', height: windowHeight + 'px' }"></canvas>

2揉燃、數(shù)據(jù)

data() {
        return {
            windowWidth: 0,
            windowHeight: 0,
            url: '',
                        headPortrait:''
        };
    },

3扫尺、初始化數(shù)據(jù)

getRange() {
            let { windowWidth, windowHeight } = uni.getSystemInfoSync();
            this.windowHeight = windowHeight;
            this.windowWidth = windowWidth;
        },

4、調(diào)用接口,獲取返回值

//轉(zhuǎn)化圖片
this.base64ToSrc(res.data.result, src => {
        this.initCanvas(src);
                        });
//將base64轉(zhuǎn)化
base64ToSrc: function(base64Data, callback) {
            // base64 轉(zhuǎn)格式圖片
            base64ToPath('data:image/png;base64,' + base64Data)
                .then(path => {
                    callback(path);
                })
                .catch(error => {
                    console.error(error);
                });
        },

5、

let ctx = uni.createCanvasContext('card')
            // 繪畫圖片
                let sp_left = this.computedSpaceBetween(this.windowWidth, this.computedPoorWidth(66));
                
                let x = 0,
                 y = 0,
                 w = this.windowWidth,
                 h = this.windowHeight,
                 r = 10
                ctx.beginPath()
                // 因?yàn)檫吘壝柽叴嬖阡忼X,最好指定使用 transparent 填充
                ctx.setFillStyle('transparent')
                ctx.setStrokeStyle('transparent')
                // 左上角
                ctx.arc(x + r, y + r, r, Math.PI, Math.PI * 1.5)
                ctx.setFillStyle('#3F72F1');
                    ctx.fill();
                            
                // border-top
                ctx.moveTo(x + r, y)
                ctx.lineTo(x + w - r, y)
                ctx.lineTo(x + w, y + r)
                // 右上角
                ctx.arc(x + w - r, y + r, r, Math.PI * 1.5, Math.PI * 2)
                ctx.setFillStyle('#3F72F1');
                    ctx.fill();
                            
                // // border-right
                ctx.lineTo(x + w, y + h - r)
                ctx.lineTo(x + w - r, y + h)
                // // 右下角
                ctx.arc(x + w - r, y + h - r, r, 0, Math.PI * 0.5)
                ctx.setFillStyle('#ffffff');
                    ctx.fill();
                            
                // // border-bottom
                ctx.lineTo(x + r, y + h)
                ctx.lineTo(x, y + h - r)
                // // 左下角
                ctx.arc(x + r, y + h - r, r, Math.PI * 0.5, Math.PI)
                ctx.setFillStyle('#ffffff');
                    ctx.fill();
                // // border-left
                ctx.lineTo(x, y + r)
                ctx.lineTo(x + r, y)
                            
                // 這里是使用 fill 還是 stroke都可以摔癣,二選一即可姑曙,但是需要與上面對(duì)應(yīng)
                // ctx.fill()
                // ctx.stroke()
                ctx.closePath()
                // 剪切
                ctx.clip()
                ctx.restore()
                // ctx.setFillStyle('#ffffff');
                // ctx.strokeStyle = "#ffffff"
                ctx.fillStyle = "#ffffff";
                ctx.fill();
                ctx.fillRect(
                 this.computedSpaceBetween(this.windowWidth, this.computedPoorWidth(337)),
                 this.computedPoorWidth(25),
                 this.computedPoorWidth(337),
                 this.computedPoorWidth(500)
                );
                let path = 'https://dev.gchshi.com/patient/images/reproduction/share_head.png'
                ctx.drawImage(path, 0, this.computedPoorWidth(0), this.windowWidth, this.computedPoorWidth(100));
            
                ctx.drawImage(this.headPortrait, sp_left, this.computedPoorWidth(50), this.computedPoorWidth(66), this.computedPoorWidth(66));
                // 頭像

                // 二維碼
                sp_left = this.computedSpaceBetween(this.windowWidth, this.computedPoorWidth(100));
                ctx.drawImage(this.url, sp_left, this.computedPoorWidth(205), this.computedPoorWidth(100), this.computedPoorWidth(110));

                sp_left = this.computedSpaceBetween(this.windowWidth, this.computedPoorWidth(200));

                ctx.setFontSize(18);
                ctx.setTextAlign('center');
                ctx.setTextBaseline('top');
                ctx.setFillStyle('black');
                sp_left = this.computedSpaceBetween(this.windowWidth, 0);
                ctx.fillText('名字', sp_left, this.computedPoorWidth(140));
                ctx.setFontSize(12);
                ctx.setTextAlign('center');
                ctx.setTextBaseline('top');
                ctx.setFillStyle('#666666');
                sp_left = this.computedSpaceBetween(this.windowWidth, 0);
                ctx.fillText('標(biāo)題一', sp_left, this.computedPoorWidth(170));
                sp_left = this.computedSpaceBetween(this.windowWidth, 35);

                ctx.stroke();
                ctx.setFontSize(18);
                ctx.setTextAlign('center');
                ctx.setTextBaseline('top');
                ctx.setFillStyle('black');
                sp_left = this.computedSpaceBetween(this.windowWidth, 0);
                // ctx.fillText('標(biāo)題二', sp_left, this.computedPoorWidth(210));

                ctx.setFontSize(14);
                ctx.setTextAlign('center');
                ctx.setTextBaseline('top');
                ctx.setFillStyle('#999999');

                sp_left = this.computedSpaceBetween(this.windowWidth, 0);
                // ctx.fillText('標(biāo)題三', sp_left, this.computedPoorWidth(240));

                // ctx.setFontSize(12);
                // ctx.setTextAlign('center');
                // ctx.setTextBaseline('top');
                // ctx.setFillStyle('#525157');

                sp_left = this.computedSpaceBetween(this.windowWidth, 0);
                ctx.fillText('標(biāo)題四', sp_left, this.computedPoorWidth(345));
                // ctx.fillText('標(biāo)題五', sp_left, this.computedPoorWidth(405));
                ctx.draw();

三襟交、保存圖片,分享朋友伤靠,分享朋友圈
1捣域、保存圖片

        // 保存圖片
        saveImage: function() {
            uni.showLoading({ title: '正在生成圖片...' });
            uni.canvasToTempFilePath({
                x: 0,
                y: 0,
                width: this.windowWidth,
                height: this.windowHeight,
                canvasId: 'card',
                success: res => {
                    uni.saveImageToPhotosAlbum({
                        filePath: res.tempFilePath,
                        success: data => {
                            showToast({
                                title: '已保存至手機(jī)相冊(cè)',
                                icon: 'none'
                            });
                            uni.hideLoading();
                        },
                        fail: err => {
                            console.log(err);
                        },
                        complete: () => {
                            uni.hideLoading();
                        }
                    });
                }
            });
        },

2、分享朋友

        // 分享到微信好友
        shareWeixin() {
            uni.showLoading({
                title: '努力加載中'
            });
            uni.share({
                provider: 'weixin',
                scene: 'WXSceneSession',
                type: 5,
                imageUrl: '',//png地址
                title: '',
                miniProgram: {
                    id: '',
                    path: '',
                    type: 0,
                    webUrl: ''
                },
                success: ret => {
                    showToast({
                        title: '分享成功',
                        icon: 'none'
                    });
                    uni.hideLoading();
                }
            });
        },
        

3宴合、分享到朋友圈

        // 分享到微信朋友圈
        shareTimeline() {
            uni.showLoading({ title: '正在生成圖片...' });
            uni.canvasToTempFilePath({
                x: 0,
                y: 0,
                width: this.windowWidth,
                height: this.windowHeight,
                canvasId: 'card',
                success: res => {
                    uni.saveImageToPhotosAlbum({
                        filePath: res.tempFilePath,
                        success: data => {
                            uni.share({
                                provider: 'weixin',
                                scene: 'WXSenceTimeline',
                                type: 2,
                                imageUrl: res.tempFilePath,
                                success: function(res) {
                                    showToast({
                                        title: '分享成功',
                                        icon: 'none'
                                    });
                                    uni.hideLoading();
                                },
                                fail: function(err) {
                                    console.log(err);
                                }
                            });
                        },
                        fail: err => {
                            console.log(err);
                        },
                        complete: () => {
                            uni.hideLoading();
                        }
                    });
                }
            });
        }
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末焕梅,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子卦洽,更是在濱河造成了極大的恐慌贞言,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阀蒂,死亡現(xiàn)場(chǎng)離奇詭異该窗,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蚤霞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門酗失,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人昧绣,你說我怎么就攤上這事级零。” “怎么了滞乙?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長鉴嗤。 經(jīng)常有香客問我斩启,道長,這世上最難降的妖魔是什么醉锅? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任兔簇,我火速辦了婚禮,結(jié)果婚禮上硬耍,老公的妹妹穿的比我還像新娘垄琐。我一直安慰自己,他們只是感情好经柴,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布狸窘。 她就那樣靜靜地躺著,像睡著了一般坯认。 火紅的嫁衣襯著肌膚如雪翻擒。 梳的紋絲不亂的頭發(fā)上氓涣,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音陋气,去河邊找鬼劳吠。 笑死,一個(gè)胖子當(dāng)著我的面吹牛巩趁,可吹牛的內(nèi)容都是我干的痒玩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼议慰,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蠢古!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起褒脯,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤便瑟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后番川,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體到涂,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年颁督,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了践啄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡沉御,死狀恐怖屿讽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吠裆,我是刑警寧澤伐谈,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站试疙,受9級(jí)特大地震影響诵棵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜祝旷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一履澳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧怀跛,春花似錦距贷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至漓拾,卻和暖如春什湘,著一層夾襖步出監(jiān)牢的瞬間长赞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國打工闽撤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留得哆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓哟旗,卻偏偏與公主長得像贩据,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子闸餐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容