1、移动端无法全屏问题

问题描述:由于canvas的width和height只能设置px值,不支持rem单位,所以想在移动设备屏幕分辨率繁杂的情况下达到canvas铺满全屏的效果很困难。

  解决方法:通过js获取到手机屏幕的clientWidth值,赋给canvas,以此来达到适配全屏的效果;

1
2
3
4
5
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值恢复到原来的大小。

1
2
3
4
5
6
7
8
//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属性,从而进行相应操作;

  

1
2
3
4
5
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";即可。

1
2
3
4
5
6
7
var pageqrcodeimg = qrcodecanvas.toDataURL('image/jpg');
var qrcodeImg = new Image();
qrcodeImg.crossOrigin = "Anonymous";
qrcodeImg.src = pageqrcodeimg;
qrcodeImg.οnlοad=function(){
        //绘制图片
}

6、canvas绘制图片时会出现白屏情况

  问题描述:canvas绘制图片时偶尔会出现白屏情况,初步分析是图片还没读取完毕就执行了绘图操作。

  解决方法:给img添加onload函数,图片读取完毕再执行绘图操作。

1
2
3
qrcodeImg.οnlοad=function(){
        //绘制图片
}

7、微信浏览中中长按图片无法保存

  问题描述:通过canvas生成的图片在微信浏览器中长按无法保存或者识别二维码,安卓部分图片出现此情况,iphone正常,初步分析是图片质量太大导致。

  解决方法:导出base64图片时压缩图片质量。

1
2
var mycanvas = document.getElementById("main");
var image = mycanvas.toDataURL("image/jpeg",0.7);

最新文章

  1. Nancy之实现API的功能
  2. Caf.CMS是一个免费的、 开源,功能齐全的CMS
  3. I/O流——File类及使用
  4. CSS3-给网页添加图片
  5. BZOJ2965 : 保护古迹
  6. WPF中ListBox的样式设置
  7. SpinLock 实现
  8. VI操作--跳到最后一行和跳到最后一行的最后一个字符
  9. Scrapy源码学习(一)
  10. Filter过滤非法字符
  11. kindle paperwhite2 root 密码修改方法
  12. [LeetCode] 86. Partition List 解题思路
  13. Highcharts 时间序列,可缩放的图表
  14. php 邮件发送代码-php邮件群发
  15. javascript监听事件兼容
  16. Varint code
  17. [Cpp] 面向对象程序设计 C++
  18. python识别验证码——PIL,pytesser,pytesseract的安装
  19. bash下如何使用bind[En]
  20. Python——Pyqt5(界面)——基本设置

热门文章

  1. ansible的role(6)
  2. Linux磁盘修复命令----fsck
  3. Linux 文件常用权限
  4. Qt 用户通过对话框选择文件
  5. 走 进 java 的 四 个 基 本 特 性
  6. 翻译 - Kafka Streams 介绍(一)
  7. Spring LDAP的使用
  8. Onedrive File Open Problem
  9. CSDN排名及积分规则
  10. P1457 城堡 The Castle 位运算+BFS+思维(难题,好题)