您现在的位置是:网站首页> 编程资料编程资料
html5 canvas合成海报所遇问题及解决方案总结微信小程序之html5 canvas绘图并保存到系统相册详解html5 canvas 微信海报分享(个人爬坑)HTML5+Canvas实现飞机加速减速特效源码HTML5 Canvas微信运动折线图特效源码HTML5+canvas实现微信朋友圈发红包照片特效源码使用canvas生成含有微信头像的邀请海报没有微信头像问题
2021-08-31
966人已围观
简介 这篇文章主要介绍了html5 canvas合成海报所遇问题及解决方案总结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
前言:最近做了一个用canvas合成海报图片的移动端项目,由于一点canvas基础都没有,所以去网上搜了一位前辈的demo,但是开发过程中遇到了很多问题,现将所遇问题及解决方法总结如下:
1、移动端canvas项目适配全屏问题
问题描述:由于canvas的width和height只能设置px值,不支持rem单位,所以想在移动设备屏幕分辨率繁杂的情况下达到canvas铺满全屏的效果很困难。解决方法:通过js获取到手机屏幕的clientWidth值,赋给canvas,以此来达到适配全屏的效果;
var clientWidth = document.documentElement.clientWidth; var canvasWidth = Math.floor(clientWidth); var canvasHeight = Math.floor(clientWidth*(1334/750)); $("#main").css('width',canvasWidth+'px'); $("#main").css('height',canvasHeight+'px'); 2、canvas合成的图片出现模糊现象
问题描述:canvas生成的图片出现模糊问题,尤其是图片上有二维码需要识别的,用户根本无法识别;
解决方法:1)可以引用hidpi-canvas.js插件解决此问题;
2)也可以将canvas的style中的width和height值设置为你想要的大小,然后将canvas的width和height的值分别放大x倍,此处注意,当你在画布中绘制图片或者文字时,相应数值也应放大x倍。
3、合成图片时部分机型图片错乱
问题描述:部分安卓手机在导出canvas的base64图片时,只能显示想要效果图片的一半,初步分析是设备像素比引起的bug。
解决方法:获取设备像素比pr,判断机型,此处我只判断了是iphone还是安卓,暂时还未出现问题,合成图片时再将width和height值恢复到原来的大小。
//hidpi-canvas将canvas的width和height属性放大pr倍 if (navigator.userAgent.match(/iphone/i)) { canvas.width = width ;//恢复为原先的大小 canvas.height = height ; }else{ canvas.width = width / pr;//恢复为原先的大小 canvas.height = height / pr; } 4、iphone手机上传图片出现旋转问题
问题描述:测试时发现,iPhone手机上传照片出现旋转情况,而上传从网上保存的图片则不会出现此问题,安卓正常。
解决方法:此问题可使用exif.js插件解决,此插件会获取照片拍摄时的角度等信息,主要是Orientation属性,从而进行相应操作;

var file = $(this)[0].files[0]; EXIF.getData(file, function() { EXIF.getAllTags(this); Orientation = EXIF.getTag(this, 'Orientation'); }); 5、canvas绘制跨域图片无法导出base64图片
问题描述:当画布中存在跨域请求来的图片时,导出base64图片失败,初步分析应该是canvas本身的安全机制引起的。
解决方法:此bug需要前后端配合解决,首先后端设置图片允许跨域,然后前端设置Img.crossOrigin = "Anonymous";即可。
var pageqrcodeimg = qrcodecanvas.toDataURL('image/jpg'); var qrcodeImg = new Image(); qrcodeImg.crossOrigin = "Anonymous"; qrcodeImg.src = pageqrcodeimg; qrcodeImg.onload=function(){ //绘制图片 } 6、canvas绘制图片时会出现白屏情况
问题描述:canvas绘制图片时偶尔会出现白屏情况,初步分析是图片还没读取完毕就执行了绘图操作。
解决方法:给img添加onload函数,图片读取完毕再执行绘图操作。
qrcodeImg.onload=function(){ //绘制图片 }7、微信浏览器中长按图片无法保存
问题描述:通过canvas生成的图片在微信浏览器中长按无法保存或者识别二维码,安卓部分图片出现此情况,iphone正常,初步分析是图片质量太大导致。
解决方法:导出base64图片时压缩图片质量。
var mycanvas = document.getElementById("main"); var image = mycanvas.toDataURL("image/jpeg",0.7); 后记:目前遇到的问题基本就这些,后期如果遇到什么问题会持续更新。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
相关内容
- 从零实现一个自定义html5播放器的示例代码html5 音乐播放器 audio 标签使用概述仿酷狗html5手机音乐播放器主要部分代码HTML5网页音乐播放器的示例代码
- 浅谈HTML5 服务器推送事件(Server-sent Events) html5服务器推送_动力节点Java学院整理 浅析HTML5的WebSocket与服务器推送事件
- 基于HTML5陀螺仪实现ofo首页眼睛移动效果的示例html5实现点击弹出图片功能html5 录制mp3音频支持采样率和比特率设置html5表单的required属性使用html5调用摄像头实例代码HTML5页面音频自动播放的实现方式Html5大屏数据可视化开发的实现html实现弹窗的实例HTML5来实现本地文件读取和写入的实现方法HTML 罗盘式时钟的实现HTML5简单实现添加背景音乐的几种方法
- html5教你做炫酷的碎片式图片切换 (canvas) html5实现点击弹出图片功能html5 录制mp3音频支持采样率和比特率设置html5表单的required属性使用html5调用摄像头实例代码HTML5页面音频自动播放的实现方式Html5大屏数据可视化开发的实现html实现弹窗的实例HTML5来实现本地文件读取和写入的实现方法HTML 罗盘式时钟的实现HTML5简单实现添加背景音乐的几种方法
- H5 canvas实现贪吃蛇小游戏教你如何一步一步用Canvas写一个贪吃蛇
- 基于HTML5实现类似微信手机摇一摇功能(计算摇动次数)HTML5仿微信聊天界面、微信朋友圈实例代码详解html5 canvas 微信海报分享(个人爬坑)HTML5实现分享到微信好友朋友圈QQ好友QQ空间微博二维码功能利用HTML5+css3+jquery+weui实现仿微信聊天界面功能html5 canvas合成海报所遇问题及解决方案总结HTML5微信播放全屏问题的解决方法HTML5页面音视频在微信和app下自动播放的实现方法HTML5仿手机微信聊天界面微信端html5页面调用分享接口示例
- H5调用相机拍照并压缩图片的实例代码HTML5 和小程序实现拍照图片旋转、压缩和上传功能HTML5 Plus 实现手机APP拍照或相册选择图片上传功能HTML5调用手机摄像头拍照的实现思路及代码HTML5中5个简单实用的API(第二篇,含全屏、可见性、拍照、预加载、电html5拍照功能实现代码(htm5上传文件)使用HTML5拍照示例代码基于HTML5超酷摄像头(HTML5 webcam)拍照功能实现代码HTML5拍照和摄像机功能实战详解
- HTML5新特性之语义化标签css3实现动画的三种方式如何使用css3实现一个类在线直播的队列动画的示例代码html5新特性与用法大全使用html5新特性轻松监听任何App自带返回键的示例HTML5新特性之type=file文件上传功能前端面试必备之html5的新特性CSS3动画和HTML5新特性详解
- 解决HTML5手机端页面缩放的问题HTML5实现可缩放时钟代码可使任何HTML元素动态缩放适合父元素的js插件scalable.jsHtml5之svg可缩放矢量图形_动力节点Java学院整理HTML5全屏响应式缩放切换幻灯片代码用HTML5实现鼠标滚轮事件放大缩小图片的功能HTML5基于SVG实现可拖拽和缩放的世界地图效果源码HTML5之SVG 2D入门1—SVG(可缩放矢量图形)概述HTML5添加禁止缩放功能
- 基于HTML5的WebGL实现json和echarts图表展现在同一个界面Html5中localStorage存储JSON数据并读取JSON数据的实现方法举例详解HTML5中使用JSON格式提交表单HTML5中使用json对象的实例代码
