Canvas小结

1、在图片的onload事件中把图片绘到画布上后:

  当图片的src值是本地文件目录时,canvas.toDataURL()、ctx.getImageData()方法无法使用,并且浏览器会报错;

  当图片的src值是base64形式时则canvas.toDataURL()、ctx.getImageData()方法都能使用且浏览器也不会报错;

    

   解决:通过服务器访问页面而不是直接双击html文件浏览。

2、canvas转为图片

  可以使用canvas.toDataURL()或者canvas2image.js插件将canvas元素转为图片;

  如果转出来的图片有点模糊可以尝试这样做:

  (1)假设最终导出来的图片的宽高分别为380px和380px;

  (2)设置canvas的width和height是380的3倍(或者更高的倍数),再设置canvas的样式宽高与最终导出来的图片宽高相同,即canvas.setAttribute("style","width:380px;height:380px;");

  (3)设置绘图放大:ctx.scale(3,3);

  (4)接下来就是一系列绘图操作,注意ctx.drawImage()等方法的参数会自动乘以放大倍数3,但也有例外,如ctx.getImageData()中的参数就没有自动乘以倍数;

  (5)最后可利用canvas2image.js插件将canvas转为380x380的图片。

3、利用canvas压缩、旋转图片

在移动端上传图片可能出现图片旋转的情况,可以使用small-exif.js插件获取Orientation字段的值从而根据这个值了解图片发生了怎样的旋转:

 通过<input type="file">控件上传的图片是文件file的类型,用FileReader读成base64的形式后,将该base64字符串赋值给一个img的src属性:

然后在img的onload事件中设置好压缩后的图片的宽高(保持原有的宽高比),也就是画布canvas的宽高。根据Orientation字段的值再次调整画布宽高、旋转、绘图:

 

最后通过canvas.toDataURL(imgType,压缩质量0-1)实现压缩:

posted @ 2020-05-27 14:37  蜉蝣草  阅读(165)  评论(0)    收藏  举报