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属性选择符介绍
Oct 17 HTML / CSS
使用CSS媒体查询(Media Queries)和JavaScript判断浏览器设备类型的方法
Apr 03 HTML / CSS
用CSS3的box-reflect设置文字倒影效果的方法讲解
Mar 07 HTML / CSS
纯CSS3打造属于自己的“小黄人”
Mar 14 HTML / CSS
html5使用html2canvas实现浏览器截图的示例
Aug 31 HTML / CSS
Html5游戏开发之乒乓Ping Pong游戏示例(三)
Jan 21 HTML / CSS
HTML5之SVG 2D入门1—SVG(可缩放矢量图形)概述
Jan 30 HTML / CSS
让ie浏览器成为支持html5的浏览器的解决方法(使用html5shiv)
Apr 08 HTML / CSS
HTML5制作3D爱心动画教程 献给女友浪漫的礼物
Nov 05 HTML / CSS
html5 初试 indexedDB(推荐)
Jul 21 HTML / CSS
AmazeUI 输入框组的示例代码
Aug 14 HTML / CSS
解决flex布局中子项目尺寸不受flex-shrink限制
May 11 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应用程序来获取Web服务器的状态信息
2006/10/09 PHP
对text数据类型不支持代码页转换 从: 1252 到: 936
2011/04/23 PHP
PHPExcel读取Excel文件的实现代码
2011/12/06 PHP
php在文件指定行中写入代码的方法
2012/05/23 PHP
php中的curl使用入门教程和常见用法实例
2014/04/10 PHP
php导入模块文件分享
2015/03/17 PHP
php实现用手机关闭计算机(电脑)的方法
2015/04/22 PHP
浅谈php数组array_change_key_case() 函数和array_chunk()函数
2016/10/22 PHP
php和html的区别点详细总结
2019/09/24 PHP
Jquery ajax传递复杂参数给WebService的实现代码
2011/08/08 Javascript
拉动滚动条加载数据的jquery代码
2012/05/03 Javascript
jQuery固定元素插件scrolltofixed使用指南
2015/04/21 Javascript
js中setTimeout的妙用--防止循环超时
2017/03/06 Javascript
JavaScript函数节流的两种写法
2017/04/07 Javascript
vue select二级联动第二级默认选中第一个option值的实例
2018/01/10 Javascript
再谈Angular4 脏值检测(性能优化)
2018/04/23 Javascript
vue项目中vue-i18n和element-ui国际化开发实现过程
2018/04/25 Javascript
Vue中错误图片的处理的实现代码
2019/11/07 Javascript
webpack4从0搭建组件库的实现
2020/11/29 Javascript
[04:40]DOTA2-DPC中国联赛1月26日Recap集锦
2021/03/11 DOTA
Python随机生成彩票号码的方法
2015/03/05 Python
Django + Uwsgi + Nginx 实现生产环境部署的方法
2018/06/20 Python
Python多线程同步---文件读写控制方法
2019/02/12 Python
Django视图扩展类知识点详解
2019/10/25 Python
python单例模式原理与创建方法实例分析
2019/10/26 Python
Python读取文件内容为字符串的方法(多种方法详解)
2020/03/04 Python
Keras load_model 导入错误的解决方式
2020/06/09 Python
巴西男士胡须和头发护理产品商店:Beard
2017/11/13 全球购物
思想品德课教学反思
2014/02/10 职场文书
幼儿园儿童节主持词
2014/03/21 职场文书
第二批党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
漂亮妈妈观后感
2015/06/08 职场文书
Jupyter notebook 不自动弹出网页的解决方案
2021/05/21 Python
深入理解以DEBUG方式线程的底层运行原理
2021/06/21 Java/Android
简单总结SpringMVC拦截器的使用方法
2021/06/28 Java/Android
JavaScript最完整的深浅拷贝实现方式详解
2022/02/28 Javascript