canvas生成带二维码海报的踩坑记录


Posted in HTML / CSS onSeptember 11, 2019

canvas海报内容有背景图,圆形头像,用户昵称,链接的二维码图片。

问题如下

图片不显示

  • 绘制渲染的时候图像不显示:是因为图片异步加载,所以canvas的操作需要放在onload事件中,否则图片会不显示,因为图片不止一张,建议放在promise中,用async,await调用
  • canvas最终生成图片分享出去,生成的图片不显示:是因为图像跨域问题,设置img的attr,‘crossOrigin'为'Anonymous'就好了,但是要注意,如果不小心为base64也设置了这个参数,在低版本的安卓(我出现问题是在华为安卓4.4.2中)base64就不会显示。

图像模糊

一开始对安卓机型统一做了dpr=1的处理,结果安卓机上图片非常的模糊,圆角头像锯齿严重,网上的解决方法无一成功,后来还是将dpr设为window.devicePixelRatio就好了,只是图片的宽高最好设置为固定值,根据flexble自适应

部分代码示例

// 头像;
const imgAvadar = await promiseLoadImg(this.userInfoExternal.headUrl);
const imgSize = 40 * this.dpr;
const imgPos = 24 * this.dpr;

ctx.arc((this.canvas.width / 2), (imgPos + (imgSize / 2)), (imgSize / 2), 0, 2 * Math.PI);
ctx.clip();
ctx.drawImage(imgAvadar, ((this.canvas.width / 2) - (imgSize / 2)), imgPos, imgSize, imgSize);

 

new Promise(resolve => {
    const img = new Image();
    // base64添加了以下跨域配置,在低版本安卓中会不显示图片
    if (src.indexOf('base64,') === -1) {
        img.setAttribute('crossOrigin', 'Anonymous');
    }
    img.onload = function () {
        resolve(img);
    };
    img.src = src;
});

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

HTML / CSS 相关文章推荐
纯CSS3实现的8种Loading动画效果
Jul 05 HTML / CSS
用CSS3绘制三角形的简单方法
Jul 17 HTML / CSS
CSS3弹性盒模型flex box快速入门心得(必看篇)
May 24 HTML / CSS
HTML5 Canvas画线技巧——实现绘制一个像素宽的细线
Aug 02 HTML / CSS
深入剖析HTML5 内联框架iFrame
May 04 HTML / CSS
html5简单示例_动力节点Java学院整理
Jul 07 HTML / CSS
详解如何通过H5(浏览器/WebView/其他)唤起本地app
Dec 11 HTML / CSS
HTML5 canvas 瀑布流文字效果的示例代码
Jan 31 HTML / CSS
HTML5实现自带进度条和滑块滑杆效果
Apr 17 HTML / CSS
HTML5 weui使用笔记
Nov 21 HTML / CSS
CSS3 制作的悬停缩放特效
Apr 13 HTML / CSS
浅谈css清除浮动(clearfix和clear)的用法
May 21 HTML / CSS
html5写一个BUI折叠菜单插件的实现方法
Sep 11 #HTML / CSS
html5借用repeating-linear-gradient实现一把刻度尺(ruler)
Sep 09 #HTML / CSS
做一个能自适应高度的textarea的示例代码
Sep 06 #HTML / CSS
3种方式实现瀑布流布局小结
Sep 05 #HTML / CSS
Html5 页面适配iPhoneX(就是那么简单)
Sep 05 #HTML / CSS
html5 外链式实现加减乘除的代码
Sep 04 #HTML / CSS
three.js模拟实现太阳系行星体系功能
Sep 03 #HTML / CSS
You might like
PHP伪造referer实例代码
2008/09/20 PHP
php抽奖小程序的实现代码
2013/06/18 PHP
php递归删除目录下的文件但保留的实例分享
2014/05/10 PHP
兼容各大浏览器带关闭按钮的漂浮多组图片广告代码
2014/06/05 PHP
php简单实现数组分页的方法
2016/04/30 PHP
php基于Redis消息队列实现的消息推送的方法
2018/11/28 PHP
[原创]提供复制本站内容时出现,该文章转自脚本之家等字样的js代码
2007/03/27 Javascript
javascript 极速 隐藏/显示万行表格列只需 60毫秒
2009/03/28 Javascript
基于Jquery的温度计动画效果
2010/06/18 Javascript
JS 仿腾讯发表微博的效果代码
2013/12/25 Javascript
javascript二维数组转置实例
2015/01/22 Javascript
jquery实现滑动特效代码
2015/08/10 Javascript
深入浅析JavaScript系列(13):This? Yes,this!
2016/01/05 Javascript
Jquery获取第一个子元素简单实例
2016/06/02 Javascript
JavaScrpt中如何使用 cookie 设置查看与删除功能
2017/07/09 Javascript
Vue.js通用应用框架-Nuxt.js的上手教程
2017/12/25 Javascript
对Vue2 自定义全局指令Vue.directive和指令的生命周期介绍
2018/08/30 Javascript
利用jsonp解决js读取本地json跨域的问题
2018/12/11 Javascript
VueQuillEditor富文本上传图片(非base64)
2020/06/03 Javascript
关于vue-cli3打包代码后白屏的解决方案
2020/09/02 Javascript
[42:39]老党炸弹人试玩视频
2014/09/03 DOTA
Python实现根据IP地址和子网掩码算出网段的方法
2015/07/30 Python
浅析python中numpy包中的argsort函数的使用
2018/08/30 Python
python如何解析配置文件并应用到项目中
2019/06/27 Python
Python获取命令实时输出-原样彩色输出并返回输出结果的示例
2019/07/11 Python
python Canny边缘检测算法的实现
2020/04/24 Python
CSS3中新增的对文本和字体的设置
2020/02/03 HTML / CSS
html5 postMessage前端跨域并前端监听的方法示例
2018/11/01 HTML / CSS
GUESS西班牙官方网上商城:美国服饰品牌
2017/03/15 全球购物
Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型
2013/10/30 面试题
店长岗位的工作内容
2013/11/12 职场文书
正规的求职信范文分享
2013/12/11 职场文书
文明演讲稿范文
2014/05/12 职场文书
逃课检讨书
2015/01/26 职场文书
综合素质评价自我评价
2015/03/06 职场文书
学校党支部公开承诺书
2015/04/30 职场文书