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实现圆角效果(含IE兼容解决方法)
May 07 HTML / CSS
谈谈对css属性box-sizing的了解
Jan 04 HTML / CSS
CSS3下的渐变文字效果实现示例
Mar 02 HTML / CSS
纯css3制作煽动翅膀的蝴蝶的示例
Apr 23 HTML / CSS
CSS Houdini实现动态波浪纹效果
Jul 30 HTML / CSS
详解如何使用CSS3中的结构伪类选择器和伪元素选择器
Jan 06 HTML / CSS
使用CSS3实现字体颜色渐变的实现
Aug 10 HTML / CSS
CSS3中animation实现流光按钮效果
Dec 21 HTML / CSS
HTML5本地存储localStorage、sessionStorage基本用法、遍历操作、异常处理等
May 08 HTML / CSS
Canvas实现保存图片到本地的示例代码
Jun 28 HTML / CSS
H5 video poster属性设置视频封面的方法
May 25 HTML / CSS
sass 常用备忘案例详解
Sep 15 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
thinkphp常见路径用法分析
2014/12/02 PHP
PHP addslashes()函数讲解
2019/02/03 PHP
php中使用array_filter()函数过滤数组实例讲解
2021/03/03 PHP
关于__defineGetter__ 和__defineSetter__的说明
2007/05/12 Javascript
ext combox 下拉框不出现自动提示,自动选中的解决方法
2010/02/24 Javascript
jquery实现textarea输入字符控制(仿微博输入控制字符)
2013/04/26 Javascript
JS控件ASP.NET的treeview控件全选或者取消(示例代码)
2013/12/16 Javascript
jquery 页眉单行信息滚动显示实现思路及代码
2014/06/26 Javascript
jquery让指定的元素闪烁显示的方法
2015/03/17 Javascript
JS实现可点击展开与关闭的左侧广告代码
2015/09/02 Javascript
JQuery日期插件datepicker的使用方法
2016/03/03 Javascript
一步步教大家编写酷炫的导航栏js+css实现
2016/03/14 Javascript
jquery实现页面加载效果
2017/02/21 Javascript
Vue.2.0.5实现Class 与 Style 绑定的实例
2017/06/20 Javascript
Vue+webpack项目基础配置教程
2018/02/12 Javascript
浅谈Angular6的服务和依赖注入
2018/06/27 Javascript
JS实现移动端触屏拖拽功能
2018/07/31 Javascript
React中获取数据的3种方法及优缺点
2020/02/18 Javascript
Django1.7+python 2.78+pycharm配置mysql数据库教程
2014/11/18 Python
Python中强大的命令行库click入门教程
2016/12/26 Python
Python 批量合并多个txt文件的实例讲解
2018/05/08 Python
Python使用Pickle库实现读写序列操作示例
2018/06/15 Python
Python3.6.x中内置函数总结及讲解
2019/02/22 Python
python入门之井字棋小游戏
2020/03/05 Python
python 实现倒计时功能(gui界面)
2020/11/11 Python
python 合并多个excel中同名的sheet
2021/01/22 Python
匡威荷兰官方网站:Converse荷兰
2018/10/24 全球购物
会计系毕业个人自荐信格式
2013/09/23 职场文书
《自然之道》教学反思
2014/02/11 职场文书
保密工作实施方案
2014/02/24 职场文书
员工试用期考核自我鉴定
2014/04/13 职场文书
销售口号大全
2014/06/11 职场文书
工厂车间标语
2014/06/19 职场文书
本科毕业生应聘自荐信范文
2014/06/26 职场文书
2014年幼儿园教研工作总结
2014/12/04 职场文书
2015年前台文员工作总结
2015/05/18 职场文书