文件大小判断 图片压缩上传 拍照 blob转base64 分段 base64转blob canvas图片处理

 <input
          multiple="multiple"
          type="file"
          accept="image/*"
          @change="upImage"
          class="input-avatar"
        />
 // 图片
    upImage(e) {
      let file = e.target.files[0];
      // this.folderList.imgfile = file;
      let fileSize = file.size / 1024 / 1024;
      if (fileSize > 0) {
        let reader = new FileReader();

        reader.onload = f => {
          console.log(f, "f");
          let content = f.target.result; //图片的src,base64格式
          let img = new Image();
          img.src = content;
          img.onload = () => {
            //图片加载完毕
            let canvas = document.createElement("canvas");
            let ctx = canvas.getContext("2d");
            let initSize = img.src.length;
            let width = img.width;
            let height = img.height;
            canvas.width = width;
            canvas.height = height;
            //downloadedImg.crossOrigin = "Anonymous"; 图片跨域处理
            ctx.drawImage(img, 0, 0, width, height);
            let dataURL = canvas.toDataURL("image/jpeg", 0.1);
            let blob = base64ToBlob(dataURL);
              this.folderList.imgfile=blob
            // let formData = new FormData();
            
             //   var blob1 = blob1.slice(0,3); 分割图片
            //   var blob2 = blob1.slice(0,3); 分割图片  
            
            // formData.append("file", blob, file.name);
            // console.log(formData, "formData");
            // this.folderList.imgfile = formData;
            this.imagtype = 1;
            this.upfile();

            function base64ToBlob(code) {
              let parts = code.split(";base64,");
              let contentType = parts[0].split(":")[1];
              let raw = window.atob(parts[1]);
              let rawLength = raw.length;

              let uInt8Array = new Uint8Array(rawLength);

              for (let i = 0; i < rawLength; ++i) {
                uInt8Array[i] = raw.charCodeAt(i);
              }
              return new Blob([uInt8Array], { type: contentType });
            }
          };
        };
        reader.readAsDataURL(file);
      }
    },

canvas 图片转化


<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>

<body><script id="__bs_script__">//<![CDATA[
    document.write("<script async src='/browser-sync/browser-sync-client.js?v=2.26.7'><\/script>".replace("HOST", location.hostname));
//]]></script>

    <video id="video" prepend controls="controls">
        <source src="./1.mp4" />
    </video>
    <button id="capture">Capture</button>
    <div id="output"></div>

    <script src="https://cdn.bootcss.com/jquery/1.10.1/jquery.min.js"></script>
    <script>
        (function () {
            "use strict";
            var video, $output;
            var scale = 1;
            var initialize = function () {
                $output = $("#output");
                video = $("#video").get(0);
                $("#capture").click(captureImage);
            };
            var captureImage = function () {
                var canvas = document.createElement("canvas");
                canvas.width = video.videoWidth * scale;
                canvas.height = video.videoHeight * scale;
                canvas.getContext('2d')
                    .drawImage(video, 0, 0, canvas.width, canvas.height);
                var img = document.createElement("img");
                // img.src = canvas.toDataURL('image/png');
                canvas.toBlob(function (blob) {//blob将base64编码的src 以二进制的形式存进了 Blob对象
                    img.src = window.URL.createObjectURL(blob)
                    // $('img').attr('src',HTMLMediaElement.srcObject(blob))//这个方法是MDN说会替代上面的方法 但是我在浏览器中使用还不支持(什么鬼???)
                    // 图片ajax上传-》将blob二进制数据上传上去
                    console.log(blob)




                }, 'image/png');
                $output.prepend(img);
            };
            $(initialize);
        }());
    </script>
</body>

</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
可以使用 JavaScript 的 FileReader 和 Canvas API 实现图片压缩换为 base64 编码。 首先,使用 FileReader 将图片读取为 Blob 对象,然后使用 Canvas API 将图片压缩为指定的宽度和高度,最后将压缩后的图片换为 base64 编码。 以下是一个示例代码: ``` function compressAndConvertToBase64(file, maxWidth, maxHeight, callback) { const reader = new FileReader(); reader.readAsDataURL(file); reader.onload = function(event) { const img = new Image(); img.src = event.target.result; img.onload = function() { const canvas = document.createElement('canvas'); let width = img.width; let height = img.height; if (width > height) { if (width > maxWidth) { height *= maxWidth / width; width = maxWidth; } } else { if (height > maxHeight) { width *= maxHeight / height; height = maxHeight; } } canvas.width = width; canvas.height = height; const ctx = canvas.getContext('2d'); ctx.drawImage(img, 0, 0, width, height); const compressedBase64 = canvas.toDataURL('image/jpeg', 0.7); callback(compressedBase64); } } } ``` 其中,参数 `file` 是要压缩的图片文件,`maxWidth` 和 `maxHeight` 分别是压缩后的图片最大宽度和高度,`callback` 是压缩完成后的回调函数。压缩后的图片质量可以通过 `toDataURL` 方法的第二个参数来控制,值越小表示压缩后的图片质量越低。 使用示例: ``` const fileInput = document.querySelector('#file-input'); fileInput.addEventListener('change', function() { const file = fileInput.files[0]; compressAndConvertToBase64(file, 800, 600, function(base64) { console.log(base64); }); }); ``` 以上代码可以将选择的文件压缩为最大宽度为 800、最大高度为 600 的图片,并将压缩后的图片换为 base64 编码输出到控制台。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

web修理工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值