canvas截屏后显示到img中,上传给后台

步骤

1 截图,使用插件 cropper.js

// 引入样式和js,需要使用 jQuery
 <linkrel="stylesheet"href="https://cdnjs.cloudflare.com/ajax/libs/cropper/3.1.3/cropper.min.css">
<script src="https://cdn.bootcss.com/jquery/2.1.0-beta3/jquery.min.js"></script>
 <script src="https://cdnjs.cloudflare.com/ajax/libs/cropper/3.1.3/cropper.min.js"></script>
  <!-- html -->
 <div class="box">
    <img id="image" src="./test.jpg">
  </div>
 $('#image').cropper({
     aspectRatio: 16 / 9,   // 截取的高宽比
     viewMode:1,
     crop: function (e) {  // 主要使用截取属性,e.x ,  e.y,  e.width,  e.height
          ctx2.drawImage(image, e.x, e.y, e.width, (e.height/pre_h1)*pre_h2, 0, 0, pre_w2,       pre_h2);
    })
}  

2 将imgElement中的图片用canvas进行绘制,

//如果此图片是来自其他域,即跨域图片,要使用下一行,否则会报错
imgElement.setAttribute('crossOrigin', 'anonymous');  
// 将从图片左上角(33, 71)的位置开始,截取 164宽,124高的区域,在画布左上角(21, 20)处起,宽87,高104 的区域内绘制
ctx.drawImage(imgElement, 33, 71, 104, 124, 21, 20, 87, 104);  

3 渲染或预览,有两种方式(base64一种,blob两种,总共三种)

使用base64的方式
var bs64 =  canvasElement.toDataURL("image/jpeg")
imgElement2.src =  bs64 
blob方式1 : 需要将base64转为blob, 然后将blob转为DomString,就可以了。
 var b = dataURItoBlob(bs64 )  // 将base64 转为blob
 imgElement2.src = window.URL.createObjectURL(b)  // 将blob转为文件,此处为图片文件

// 将base64转为blob
    function dataURItoBlob(base64Data) {
      var byteString;
      if (base64Data.split(',')[0].indexOf('base64') >= 0)
          byteString = atob(base64Data.split(',')[1]);
      else
          byteString = unescape(base64Data.split(',')[1]);
      var mimeString = base64Data.split(',')[0].split(':')[1].split(';')[0];
      var ia = new Uint8Array(byteString.length);
      for (var i = 0; i < byteString.length; i++) {
          ia[i] = byteString.charCodeAt(i);
      }
      return new Blob([ia], {
          type: mimeString
      });
    }

blob方式2: 直接将canvas画布上的图片转为blob,然后放入ingElement的src中

// 直接用canvas将画布上的图片转为blob,不需要经过base64
// canvasElement.toBlob(callback, type, encoderOptions); 
// 参数1为转换后的回调,回调参数为转换后的blob;必选
// 参数2为指定图片格式,默认为image/png,即png;可为image/jpeg或者image/webp;可选
// 参数3为值在0与1之间的数值,当请求图片格式为image/jpeg或者image/webp时用来指定图片展示质量; 可选
canvasElement2.toBlob(function(blob) {
    imgElement.src = window.URL.createObjectURL(blob) 
})

4 上传图片到后台

将得到blob放入fomdata中,然后将formdata直接作为data提交给后台

var fd = new FormData();  // 将blob放入formdata中上传给后台 
fd.append("file", blob, 'i.jpeg'); 
$.ajax({
     url: url,
     type:"post",
     data: fd ,
     success:function(data){。。。}     
});

###############################################################

注意:使用base64和使用blob作为图片的src, 前者渲染更快更流畅,后者可使用setTimeOut来解决。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一:canvas简介 1.1什么是canvas? ①:canvas是HTML5提供的一种新标签 ②:HTML5 ...
    GreenHand1阅读 4,878评论 2 32
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,641评论 1 32
  • 前言 在 HTML5 File API 出现之前,前端对于文件的操作是非常有局限性的,大多需要配合后端实现。出于安...
    D_R_M阅读 2,355评论 0 2
  • 一个人改命过程: 心念变了,德行就变; 德行变了,气场就变; 气场变了,磁场就变; 磁场变了,风水就变; 风水变了...
    感谢有妳阅读 344评论 0 0
  • 数组的基本特点 数组元素是任意类型的 可能的最大索引是2^32-2,默认起始索引是 0 Javascript的数组...
    dooze阅读 546评论 0 1

友情链接更多精彩内容