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弹性布局内容对齐(justify-content)属性使用详解
Jul 31 HTML / CSS
CSS3 filter(滤镜)实现网页灰色或者黑色模式的示例代码
Feb 24 HTML / CSS
html5 application cache遇到的严重问题
Dec 26 HTML / CSS
html5的画布canvas——画出简单的矩形、三角形实例代码
Jun 09 HTML / CSS
实例讲解利用HTML5 Canvas API操作图形旋转的方法
Mar 22 HTML / CSS
LocalStorage记住用户和密码功能
Jul 24 HTML / CSS
详解快速开发基于 HTML5 网络拓扑图应用
Jan 08 HTML / CSS
Canvas实现保存图片到本地的示例代码
Jun 28 HTML / CSS
html5中使用hotcss.js实现手机端自适配的方法
Apr 23 HTML / CSS
html5 拖拽及用 js 实现拖拽功能的示例代码
Oct 23 HTML / CSS
聊聊CSS粘性定位sticky案例解析
Jun 01 HTML / CSS
CSS浮动引起的高度塌陷问题
Aug 05 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的一些基础知识分享
2011/07/27 PHP
php smarty truncate UTF8乱码问题解决办法
2014/06/13 PHP
php生成随机颜色方法汇总
2014/12/03 PHP
php版微信自动获取收货地址api用法示例
2016/09/22 PHP
JavaScript CSS菜单功能 改进版
2008/12/20 Javascript
javascript重复绑定事件造成的后果说明
2013/03/02 Javascript
JavaScript 获取任一float型小数点后两位的小数
2014/06/30 Javascript
深入理解JavaScript系列(34):设计模式之命令模式详解
2015/03/03 Javascript
基于angular中的重要指令详解($eval,$parse和$compile)
2016/10/21 Javascript
js中的面向对象入门
2017/03/06 Javascript
Vue2.0权限树组件实现代码
2017/08/29 Javascript
微信小程序使用input组件实现密码框功能【附源码下载】
2017/12/11 Javascript
React组件内事件传参实现tab切换的示例代码
2018/07/04 Javascript
详解vue项目接入微信JSSDK的坑
2018/12/14 Javascript
Vue+Element UI+Lumen实现通用表格分页功能
2019/02/02 Javascript
jQuery事件blur()方法的使用实例讲解
2019/03/30 jQuery
javascript实现随机抽奖功能
2020/12/30 Javascript
python中的装饰器详解
2015/04/13 Python
解决uWSGI的编码问题详解
2017/03/24 Python
Django项目中model的数据处理以及页面交互方法
2018/05/30 Python
Numpy数据类型转换astype,dtype的方法
2018/06/09 Python
Python爬虫包BeautifulSoup学习实例(五)
2018/06/17 Python
python实现大学人员管理系统
2019/10/25 Python
浅谈django channels 路由误导
2020/05/28 Python
详解Python 中的容器 collections
2020/08/17 Python
HTML5 Video标签的属性、方法和事件汇总介绍
2015/04/24 HTML / CSS
欧缇丽美国官网:Caudalie美国
2016/12/31 全球购物
美国专营婴幼儿用品的购物网站:buybuy BABY
2017/01/01 全球购物
稀有和绝版书籍:Biblio.com
2017/02/02 全球购物
电气专业应届生求职信
2013/11/01 职场文书
党员自我评价分享
2013/12/13 职场文书
承诺书怎么写
2014/03/26 职场文书
中国梦我的梦演讲稿
2014/04/23 职场文书
检讨书范文1000字
2015/01/28 职场文书
公司年夜饭通知
2015/04/25 职场文书
python 安全地删除列表元素的方法
2022/03/16 Python