当前位置:   article > 正文

html2canvas生成图片地址Base64格式转成blob在转成file(二进制)可正常发送(保姆教程,复制粘贴可用)_html2canvas base64

html2canvas base64

开始:                                                  最终结果:          

 

                                       

1. html2canvas方法生成的图片地址已Base64编码形式放在img标签src中可直接展示生成的图片(注意页面标签获取位置,还有个setTimeout页面渲染需要时间)

  1. setTimeout(function () {
  2. var result = {};
  3. var htmlContent = document.getElementById("cockpit-drag");
  4. html2canvas(htmlContent,{
  5. background:`${htmlContent.style.backgroundImage}`,
  6. useCORS: true,
  7. // height:'100%',
  8. // scale: 2, // 处理模糊问题
  9. // dpi: 300, // 处理模糊问题
  10. }).then(function (canvas) {
  11. var imgData = canvas.toDataURL('image/png');
  12. var img = document.createElement("img");
  13. img.src = imgData;
  14. console.log(img);
  15. document.body.appendChild(img);
  16. },3000)

2. 直接发给后端存储也可以  但是不严谨而且 Base64编码很长,有一个文件那么长  (正常已二进制file流的形式传输),所以我们要把Base64编码变成二进制流的形式,也是查了很多资料,踩了很多坑,做了很多尝试,最终成功和大家分享一下

   2-1. 需要先把生成的Base64编码转成blob(查了很多,网上这个方法都很统一,所以不会出大问题,以至于这个blob是什么不太懂 , 能用就行呀)

下边是var一个:blob方法 ↓↓↓↓↓↓↓↓↓↓↓↓

  1. var dataURLtoBlob = function (dataurl){
  2. var arr = dataurl.split(','),
  3. mime = arr[0].match(/:(.*?);/)[1],
  4. bstr = atob(arr[1]),
  5. n = bstr.length,
  6. u8arr = new Uint8Array(n);
  7. while (n--) {
  8. u8arr[n] = bstr.charCodeAt(n);
  9. }
  10. return new Blob([u8arr], { type: mime })
  11. }

在这个位置调用   ↓↓↓↓↓↓↓↓↓↓↓↓

        2-2. 再把生成的blob转成二进制流(查了很多,网上这个方法都很杂,所以当时很蒙,只能不断尝试,各种踩坑,最终功夫不负有心人)

把blob转成二进制流的方法(这个东西打印有自己的方法,log打印不出来,想提升的同学再去多查查吧,今天不在这里说了

  1. const formData = new FormData()
  2. formData.append('file',blob)

直接写在这个位置就能用  ↓↓↓↓↓↓↓↓↓↓↓↓

OK,现在二进制流已生成 ,万事俱备(直接把formData作为参数传进接口里就可以用了)

接下来老规矩上完整代码  复制粘贴可用的(我用的是angular项目所以比较老,自己改一下红色方框位置,放接口就好)

图例:

代码:可复制

  1. setTimeout(function () {
  2. var result = {};
  3. var htmlContent = document.getElementById("cockpit-drag");
  4. html2canvas(htmlContent,{
  5. background:`${htmlContent.style.backgroundImage}`,
  6. useCORS: true,
  7. // height:'100%',
  8. // scale: 2, // 处理模糊问题
  9. // dpi: 300, // 处理模糊问题
  10. }).then(function (canvas) {
  11. var imgData = canvas.toDataURL('image/png');
  12. var blob = dataURLtoBlob(imgData);
  13. const formData = new FormData()
  14. formData.append('file',blob)
  15. var xmlhttp = new XMLHttpRequest();
  16. xmlhttp.open("POST", url_+"dashboard/uploadImage", false);
  17. xmlhttp.send(formData);
  18. $scope.$apply(function () {
  19. $scope.persistFinish = true;
  20. });
  21. // var img = document.createElement("img");
  22. // img.src = imgData;
  23. // console.log(img);
  24. // document.body.appendChild(img);
  25. });
  26. }, 3000)

大功告成,在大前端的路上又有点进步

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/923895
推荐阅读
相关标签
  

闽ICP备14008679号