亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > HTML > 正文

詳解html5 canvas 微信海報(bào)分享(個(gè)人爬坑)

2024-08-26 00:20:20
字體:
供稿:網(wǎng)友

本文介紹了canvas 微信海報(bào)分享,分享給大家,具體如下:

  1. 隨機(jī)產(chǎn)生一張圖片
  2. 拿到微信用戶的頭像和稱呢(自己調(diào)后端的接口獲?。?/li>
  3. 把用戶頭像和稱呢和隨機(jī)產(chǎn)生一張圖片合成一張海報(bào)
  4. 可能上一頁用戶還有填入的心愿文本也要填入圖片中

canvas,微信海報(bào),canvas生成微信海報(bào)

實(shí)現(xiàn)效果圖

canvas,微信海報(bào),canvas生成微信海報(bào)

記錄下在實(shí)現(xiàn)功能過程中遇到的問題

  1. canvas在微信瀏覽器中長按無效不能像img一樣長按分享(那我就轉(zhuǎn)成img唄)
  2. 轉(zhuǎn)成img后在微信開發(fā)者工具中能顯示,真機(jī)無效(欲哭無淚),度娘說可能是圖片跨域^-^
  3. 用戶頭像合成還要圓角,我表示不會啊,直接看canvas api文檔了對度娘無愛了
  4. canvas填入文字超過指定寬度也要換行,我表示只知道不超多指定寬度的各種文字對齊方式 ctx.textAlign = 'center' ;
  5. canvas在高清屏下模糊的問題(超簡單的不知道度娘怎么會那么啰嗦)不就是canvas.witdt=innerWidth*devicePixelRatio

HTML結(jié)構(gòu)

<div class="imgBox" v-cloak>    <img :src='imgSrc' v-if="imgSrc" /></div>

CSS

<style>    *{        margin:0;        padding:0;    }    body,    html {        width: 100%;        height: 100%;    }    .imgBox {        width: 100%;        height: 100%;    }    img {        width: 100%;        display: block;    }</style>

script

// js主要結(jié)構(gòu)new Vue({    el:'imgBox',    data:{        urlParam: {},//獲取url中的傳值對象        randomNum: 1,//隨機(jī)數(shù)用于確定那個(gè)祈福頁        userName: '',//用戶稱呢        imgSrc: '',//合成最終圖片        userImg: '',//用戶頭像圖片        userMessage: '',//用戶留言    },    methods: {        // 分享到盆友圈        wxShareFriends: function () {},        // 初始化請求頭        wxHttp: function () {            $.ajaxSetup({                headers: {                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')                }            });        },        // 獲取隨機(jī)數(shù)[1,10]        randomNumbers() {            this.randomNum = Math.ceil(Math.random() * 10)        },        // 獲取微信用戶頭像和稱呢和用戶輸入祝福語        getUserInfo() {            var vm = this;            $.post('API請求地址', function (data) {                if (data.code == 1) {                    vm.userImg = data.data.headimg;                    vm.userName = data.data.nickname;                    if (vm.randomNum % 2 == 0) {                        vm.userMessage= '紅塵相遇,年華已老。歲月花開多少不在,古往今來相遇是一件既微妙。而又神圣的事情,紅塵的情網(wǎng)中'                    } else {                        vm.userMessage = '紅塵相遇,年華已老'                    }                }                vm.$nextTick(function () {                    vm.drawCanvasBgImg();                })            })        },        // 獲取頁面dpr和寬度        getWindowInfo() {            var windowInfo = {};            windowInfo.dpr = window.devicePixelRatio;            if (window.innerWidth) {                windowInfo.width = window.innerWidth;            }            else {                windowInfo.width = document.body.clientWidth;            }            return windowInfo;        },        // 畫活動頁分享背景大圖        drawCanvasBgImg () {},        // 在背景圖片的畫布上截取一個(gè)圓然后填充入用戶頭像        drawCanvasUserImg(canvas, ctx, dpr) {},        // 填寫用戶稱呢或者用戶留言        canvasFillText (canvas, ctx, dpr, circleR) {},        // 合成base64位分享圖        convertCanvasToImage (canvas) {            this.imgSrc = canvas.toDataURL("image/jpeg");//png有毒在安卓機(jī)下識別二維碼無法跳轉(zhuǎn)            this.$Spin.hide();        }    }})

畫圖方法步驟

  1. drawCanvasBgImg ()
  2. drawCanvasUserImg (canvas, ctx, dpr)
  3. canvasFillText (canvas, ctx, dpr, circleR)
  4. convertCanvasToImage (canvas)

畫活動頁分享背景大圖 drawCanvasBgImg ()

//拿到數(shù)據(jù)后開始畫背景大圖 想法很簡單就是把圖片畫到canvas中然后在畫布上再畫頭像文字讓后轉(zhuǎn)成img drawCanvasBgImg () {    var vm = this;    var canvas = document.createElement("canvas");    var ctx = canvas.getContext("2d");    var clientWidth = this.getWindowInfo().width;  //獲取屏幕寬度用于canvas寬度自適應(yīng)移動端屏幕    var dpr = this.getWindowInfo().dpr;    ctx.globalCompositeOperation = "source-atop";//** 坑鋸齒感覺沒什么用不知道是不是用錯(cuò)地方了 **    canvas.width = dpr * clientWidth;  //由于手機(jī)屏幕時(shí)retina屏,都會多倍渲染,用dpr來動態(tài)設(shè)置畫布寬高,避免圖片模糊    canvas.height = dpr * clientWidth * 609 / 375;//去掉微信頭部的狀態(tài)欄應(yīng)該是603 沒搞懂603還是不能讓圖片滿屏直接多加到了609    var img = new Image();    img.crossOrigin = '';//死坑的圖片跨域 (img.crossOrigin = "Anonymous"這種寫法還是不能顯示base64格式圖片)    img.src = "http://xxx" + this.randomNum + ".jpg";    img.onload = function () {        ctx.drawImage(img, 0, 0, canvas.width, canvas.height);        vm.drawCanvasUserImg(canvas, ctx, dpr);    }},

用戶頭像 drawCanvasUserImg (canvas, ctx, dpr)

// 在背景圖片的畫布上截取一個(gè)圓然后填充入用戶頭像drawCanvasUserImg: function (canvas, ctx, dpr) {    var vm = this;    var circleR = 50 * dpr;//半徑    var circleX = canvas.width / 2;//圓心X坐標(biāo)    var circleY = 50 * dpr;//圓心Y坐標(biāo)    var imgX = circleX - circleR;//圖片X開始坐標(biāo)    var imgY = circleY - circleR;//圖片Y開始坐標(biāo)    var imgWidth = 2 * circleR;//圖片按圓形大小    var img = new Image();    img.crossOrigin = '';    img.src = this.userImg;    img.onload = function () {        ctx.save(); // 保存當(dāng)前ctx的狀態(tài)        ctx.arc(circleX, circleY, circleR, 0, 2 * Math.PI); //畫出圓        ctx.clip(); //裁剪上面的圓形        ctx.drawImage(img, imgX, imgY, imgWidth, imgWidth); // 在剛剛裁剪的園上畫圖        ctx.restore(); // 還原狀態(tài)        vm.canvasFillText(canvas, ctx, dpr, circleR);    }},

在canvas中畫文字

// 填寫用戶稱呢或者用戶留言canvasFillText (canvas, ctx, dpr, circleR) {    var fontSizeThis = dpr * 20 + 'px' + ' Arial';    var userNameY = 0;//用戶名Y軸坐標(biāo)    var userMessageX = dpr * 40;//用戶留言X軸坐標(biāo)    var userMessageY = 0;//用戶留言Y軸坐標(biāo)    var lastSubStrIndex = 0;//字符串下標(biāo)    var lineWidth = 0;//一行寬度    var allTextWidth = 0;//所有字符寬度    ctx.font = fontSizeThis;    // 需要用戶名是寫入用戶名    if (this.userName) {        userNameY = circleR * 2.5;        ctx.fillStyle = "#0094ff";        ctx.textAlign = 'center';        ctx.fillText(this.userName, canvas.width / 2, userNameY);    }    if (this.userMessage) {        userMessageY = userNameY + dpr * 35;        ctx.fillStyle = "#000";        // 獲取字符寬度        for (var i = 0; i < this.userMessage.length; i++) {            allTextWidth += ctx.measureText(this.userMessage[i]).width;        }        // 字符串長度大于畫布區(qū)域要換行        if (allTextWidth > canvas.width - 2* userMessageX) {            for (var i = 0; i < this.userMessage.length; i++) {                lineWidth += ctx.measureText(this.userMessage[i]).width;                if (lineWidth > canvas.width - 2*userMessageX) {                    ctx.textAlign = 'left';                    ctx.fillText(this.userMessage.substring(lastSubStrIndex, i), userMessageX, userMessageY);                    userMessageY += dpr * 25;//設(shè)置行高                    lineWidth = 0;                    lastSubStrIndex = i;                }                if (i == this.userMessage.length - 1) {                    ctx.fillText(this.userMessage.substring(lastSubStrIndex, i + 1), userMessageX, userMessageY);                }            }        } else {            // 小于者居中顯示            ctx.textAlign = 'center';            ctx.fillText(this.userMessage, canvas.width / 2, userMessageY);        }    }    this.convertCanvasToImage(canvas);},

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VeVb武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到HTML教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
国产一区二区三区四| 日韩亚洲欧美在线观看| 成人欧美一区二区三区黑人麻豆| bdsm精品捆绑chinese| 激情久久一区二区| 第九色区aⅴ天堂久久香| 亚洲视频在线播放| 少妇一级淫片免费放中国| 国产伦子伦对白视频| av动漫精品一区二区| 中文一区在线观看| 91精品国产自产拍在线观看蜜| 欧美午夜精品伦理| 亚洲午夜在线观看| 天堂资源最新版在线视频观看免费网| 久久精品无码一区二区三区毛片| 小视频在线播放| 夜鲁夜鲁夜鲁视频在线播放| 国产伦精品一区二区三区免费| 99产精品成人啪免费网站| 小泽玛利亚视频在线观看| 你懂得在线观看| 亚洲成人三级| 久久久久久久久久看片| 久久精品福利| 在线免费成人| 久久视频在线看| 日韩精品亚洲人成在线观看| 欧美性xxxxx极品娇小| 性色av一区二区咪爱| 亚洲人做受高潮| 欧美黄色一区二区三区| 亚洲国产精品suv| 国产成人无码精品久久久久| 99国产精品视频免费观看一公开| 久久久av亚洲男天堂| 999在线免费观看视频| 欧美性猛交xxxx免费看久久| 日韩啪啪电影网| 日韩成人免费av| 亚洲午夜一区二区三区| 国内毛片毛片毛片毛片| 一区二区三区视频在线观看视频| 丁香婷婷深情五月亚洲| 在线日韩欧美| 亚洲日本青草视频在线怡红院| 亚洲精品成a人ⅴ香蕉片| 国产在线精品一区二区三区| 亚洲人人精品| 欧美午夜精品一区二区| 欧美黄网免费在线观看| 欧美日本不卡视频| 精品国产三级a∨在线| sm国产在线调教视频| 亚洲色图 在线视频| 欧美tk丨vk视频| 五月天亚洲视频| www.欧美.com| 久久伊人精品视频| www.夜夜爽| 亚洲欧美国产不卡| 日韩av电影在线观看| 无码人妻丰满熟妇精品区| 欧美精品一区在线播放| 国产激情片在线观看| 国产精品乱战久久久| 日韩国产一区久久| 97se亚洲国产综合自在线观| 伊人精品在线视频| 91免费看片在线观看| 中文字幕亚洲乱码| 日韩国产在线一| 久久成人综合网| 最新版天堂资源中文官网| 樱花在线免费观看| 欧美 亚洲 视频| 蜜桃av一区二区三区| 久久夜色精品国产亚洲aⅴ| 日本一级片免费看| 精品免费国产一区二区三区四区| 亚洲一区二区日本| 欧美一级鲁丝片| 在线观看国产精品一区| 精品人妻一区二区三区含羞草| 亚洲女人视频| 欧美精品一区在线观看| 亚洲一区二区三区加勒比| 麻豆成人免费电影| 日韩成人小视频| 在线视频国内自拍亚洲视频| 色狠狠综合天天综合综合| 99久久精品网站| 久久精品日产第一区二区三区精品版| 亚洲免费成人在线| 91免费版网站入口| 国产成人精品亚洲精品| 精品国产av一区二区| 亚洲电影av在线| 三级国产在线观看| 久久精品电影网站| 欧美日韩一区二区三区免费看| 欧美激情综合色综合啪啪五月| 色网站在线视频| 中文字幕第一页在线| 国产又大又黄视频| 精东传媒在线观看| 欧美老女人性开放| 日韩成人av毛片| 午夜精品久久久久久久久久久久| 在线视频你懂得一区二区三区| 免费观看国产精品视频| 日韩专区一卡二卡| 亚洲成人精品一区二区| 超碰在线免费观看97| 91精品视频国产| 天天爽人人爽夜夜爽| 福利地址发布页| 日韩一区二区三区资源| 国产精品高清一区二区| 亚洲资源在线观看| 91精品中国老女人| 精品少妇一区二区三区视频免付费| 国产一区二区免费电影| 91牛牛免费视频| 一区二区电影| 第四色男人最爱上成人网| 日本不良网站在线观看| 亚洲三级影院| 三区精品视频观看| 亚洲va久久久噜噜噜久久天堂| 欧美高清hd| 99久久伊人精品影院| 亚洲网址在线观看| 第四色中文综合网| 免费黄色网页在线观看| 午夜精品999| 亚洲一级片网站| 久久久久人妻一区精品色欧美| 波多野结衣加勒比| 国产男女无遮挡| 国产精品自拍首页| 中文字幕9999| 欧美国产精品专区| 19j韩国主播韩宝贝在线| 久久99久久99精品免观看软件| 91精品国产黑色紧身裤美女| 黄色一级大片免费| 在线观看av网站| 亚洲激情自拍图| 伊人色综合一区二区三区影院视频| 蜜臀av免费在线观看| 日韩理论电影| 2019中文亚洲字幕| 日本道在线观看一区二区| 六九午夜精品视频| 天天色天天色| 综合网插菊花| av网站观看| free性欧美1819hd| shkd中文字幕久久在线观看| 国产欧美日本在线| 蜜桃传媒一区二区三区| 国产一区视频观看| 亚洲欧美精品| 中文字幕免费在线不卡| 亚洲影视资源| 成人爽a毛片一区二区| 小黄文在线观看| 一二三在线视频社区| 制服丝袜网站| 少妇久久久久久被弄到高潮| 91福利入口| 在线免费av网| 欧美图片第一页| 精品久久国产老人久久综合| 在线免费观看色| 成人免费视频国产免费| 国产精品美女久久久浪潮软件| 日韩av电影天堂| 蜜桃视频m3u8在线观看| 亚洲成人最新网站| h网站在线播放| 国内精品国产三级国产a久久| 日韩性xxxx爱| 中文在线中文字幕| 91福利视频在线观看| 亚洲尤物在线视频观看| 开心九九激情九九欧美日韩精美视频电影| 日韩在线视频免费观看| 精品一区二区三区三区| 国产精品免费久久久| 人人超碰91尤物精品国产| 国产精品yjizz| 国产系列在线观看| 成年美女黄网站色大片不卡| 精品欧美一区二区久久久伦| 亚洲精品在线观| 无码精品一区二区三区在线| 一级特黄aaa大片在线观看| 久久久久国产精品免费网站| 8x8x华人在线| 成看片vvv222| 亚洲午夜国产一区99re久久| 日本在线观看| 亚洲欧美日韩中文字幕在线观看| 国产精品美乳在线观看| 青青草免费观看完整版高清| 91日韩视频| 精品这里只有精品| 国产少妇在线观看| 色先锋影音岛国av资源| av网站网址| 国产精品视频黄色| av高清不卡在线| 野花国产精品入口| 国产精品 欧美精品| 亚洲一区二区三| 九九热播视频在线精品6| 在线播放性xxx欧美| 91久久香蕉国产日韩欧美9色| 高清日韩电视剧大全免费| 欧美一区=区| 欧美福利网站| 成人午夜短视频| 亚洲第一在线播放| 精品成人免费自拍视频| 日韩a级黄色片| 色噜噜狠狠狠综合曰曰曰88av| 亚洲一区二区三区四区在线免费观看| 激情小说综合区| 欧美午夜激情小视频| 亚洲欧美激情四射在线日| 久久免费视频精品| 日韩欧美中文字幕制服| 亚洲综合中文字幕在线| 欧美性猛交视频| 精品国产乱码久久久久久蜜柚| 欧美日韩精品久久| 亚洲新声在线观看| 亚洲成人免费在线视频| 亚洲精品第一国产综合野草社区| 阿v视频在线| 国一区二区在线观看| 欧美激情网站在线观看| 男女精品网站| 91大神在线观看线路一区| 国产情侣免费视频| 国产精品亚洲无码| 日韩欧美视频网站| 国产在线视频你懂的| 国产123在线| 天堂综合网久久| 神马久久精品| 久草视频手机在线| 蜜桃特黄a∨片免费观看| 日本动漫理论片在线观看网站| 欧美午夜女人视频在线| 久久久久九九九九| 成人免费黄色av| 亚洲人成无码网站久久99热国产| 野战少妇38p| 黄污网站在线观看| 国产资源在线观看入口av| 国产中文精品久高清在线不| 91精品国产福利| 亚洲日本免费电影| 亚洲欧美另类小说| 精品无码国模私拍视频| 久久久久亚洲精品国产| 在线观看免费看片| 精品婷婷伊人一区三区三| 国产精品a成v人在线播放| 午夜伦理一区二区| 老司机亚洲精品| 91成人福利视频| 九九**精品视频免费播放| 国产激情小视频| 一本久道久久综合狠狠爱| 嫩草国产精品入口| 亚洲国产精品国自产拍久久| 亚洲国产精品专区久久| avav免费在线观看| 中文字幕99页| 久久av无码精品人妻系列试探| 亚洲国产精品传媒在线观看| 免费国产精品视频| 欧美中文在线观看| 日韩不卡中文字幕| 人妻丰满熟妇av无码久久洗澡| 天天操天天干天天做| 亚洲九九精品| 久久色.com| 秋霞电影网一区二区| 日本在线视频站| 欧美午夜网站| 免费电影网站在线视频观看福利| 影音先锋中文在线视频| 最新欧美色图| 一区二区在线观看av| 日本成人黄色网址| 激情文学综合| 天堂8中文在线| 91国产在线免费观看| 久久一级免费视频| 99在线观看精品视频| 精品中文av资源站在线观看| 98精品国产高清在线xxxx天堂| 国产精品中文久久久久久久| 一本一本久久a久久精品综合妖精| 二区在线播放| www.av毛片| 午夜影院免费体验区| 日韩一区二区精品视频| 亚洲自拍av在线| 一级日本黄色片| 日韩一区二区在线播放| 一级特黄录像免费看| 九九热播视频在线精品6| 亚洲靠逼com| 91麻豆精品国产91久久久更新时间| 九九热精品在线视频| 97精品视频在线观看自产线路二| 亚洲午夜网未来影院| 亚洲尤物影院| 成人av资源在线| 国内精品久久久久久影院老狼| 精品视频在线视频| 亚洲第一天堂网|