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系列教程:背景图片(背景大小和多背景图) 应用说明
Dec 19 HTML / CSS
css3背景图片透明叠加属性cross-fade简介及用法实例
Jan 08 HTML / CSS
IE滤镜与CSS3效果(详细整理分享)
Jan 25 HTML / CSS
纯CSS3实现带动画效果导航菜单无需js
Sep 27 HTML / CSS
10种CSS3实现的loading动画,挑一个走吧?
Nov 16 HTML / CSS
解决img标签上下出现间隙的方法
Dec 14 HTML / CSS
html5摇一摇代码优化包括DeviceMotionEvent等等
Sep 01 HTML / CSS
用HTML5制作视频拼图的教程
May 13 HTML / CSS
HTML5微信播放全屏问题的解决方法
Mar 09 HTML / CSS
htnl5利用svg页面高斯模糊的方法
Jul 20 HTML / CSS
HTML5 图片悬停放大的实现代码示例
Dec 04 HTML / CSS
AmazeUI 加载进度条的实现示例
Aug 20 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 和 XML: 使用expat函数(一)
2006/10/09 PHP
php使用fopen创建utf8编码文件的方法
2014/10/31 PHP
PHP图片添加水印功能示例小结
2016/10/03 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
2019/12/30 PHP
用户注册常用javascript代码
2009/08/29 Javascript
基于jQuery实现左右div自适应高度完全相同的代码
2012/08/09 Javascript
JavaScript中的匀速运动和变速(缓冲)运动详细介绍
2012/11/11 Javascript
JS中令人发指的valueOf方法介绍
2013/02/22 Javascript
脚本合并提升javascript性能示例
2014/02/24 Javascript
.NET微信公众号开发之创建自定义菜单
2015/07/16 Javascript
javascript制作幻灯片(360度全景图片)
2015/07/28 Javascript
浅析JavaScript 调试方法和技巧
2015/10/22 Javascript
JS+CSS实现鼠标经过弹出一个DIV框完整实例(带缓冲动画渐变效果)
2016/03/25 Javascript
window.open不被拦截的简单实现代码(推荐)
2016/08/04 Javascript
JSON与XML的区别对比及案例应用
2016/11/11 Javascript
详谈JavaScript的闭包及应用
2017/01/17 Javascript
修改vue+webpack run build的路径方法
2018/09/01 Javascript
vue-cli构建vue项目的步骤详解
2019/01/27 Javascript
小程序多图列表实现性能优化的方法步骤
2019/05/28 Javascript
vue实现树形结构样式和功能的实例代码
2019/10/15 Javascript
vue通过v-html指令渲染的富文本无法修改样式的解决方案
2020/05/20 Javascript
Python中input和raw_input的一点区别
2014/10/21 Python
获取Django项目的全部url方法详解
2017/10/26 Python
python将txt文件读入为np.array的方法
2018/10/30 Python
Python imutils 填充图片周边为黑色的实现
2020/01/19 Python
解决Django Haystack全文检索为空的问题
2020/05/19 Python
PyCharm2019.3永久激活破解详细图文教程,亲测可用(不定期更新)
2020/10/29 Python
Canvas获取视频第一帧缩略图的实现
2020/11/11 HTML / CSS
英国最专业的健身器材供应商之一:Best Gym Equipment
2017/12/22 全球购物
上海期货面试题
2014/01/31 面试题
学生个人自我鉴定
2014/03/26 职场文书
体检通知范文
2015/04/21 职场文书
2016年社区六一儿童节活动总结
2016/04/06 职场文书
如何用JS实现网页瀑布流布局
2021/04/24 Javascript
教你在 Java 中实现 Dijkstra 最短路算法的方法
2022/04/08 Java/Android
彻底弄懂Python中的回调函数(callback)
2022/06/25 Python