vue Base64图片压缩上传OSS

摘要:
);/) [1]; letbstr=atob;letn=bstr长度;letu8arr=newUint8Array;虽然(n-){u8arr[n]=bstr.charCodeAt;}try{returnnewFile;}catch{/**与iOS9.3或Android 4.4版本兼容*/console.warn;returnthis.dataURL2blob;}},/**数据URL转换为blob*@paramdataURL*@returnblob*/dataURL2blob{letbinaryString=atob;letarrayBuffer=newArrayBuffer;letntArray=newUint8Array;letmime=dataURL.split(“,”)[0].match(/:(.*?
   this.compress(result, 800, 0.5).then(val => {
        //得到压缩图片
        let data = val;
        that.file = that.dataURLtoFile(data, that.file_name);
    //上传
        that.upload();
      });
  // 压缩图片
    compress(base64String, w, quality) {
      // var getMimeType = function(urlData) {
      //   var arr = urlData.split(",");
      //   var mime = arr[0].match(/:(.*?);/)[1];
      //   // return mime.replace("image/", "");
      //   return mime;
      // };
      var newImage = new Image();
      var imgWidth, imgHeight;

      var promise = new Promise(resolve => (newImage.onload = resolve));
      newImage.src = base64String;
      return promise.then(() => {
        imgWidth = newImage.width;
        imgHeight = newImage.height;
        var canvas = document.createElement("canvas");
        var ctx = canvas.getContext("2d");
        if (Math.max(imgWidth, imgHeight) > w) {
          if (imgWidth > imgHeight) {
            canvas.width = w;
            canvas.height = (w * imgHeight) / imgWidth;
          } else {
            canvas.height = w;
            canvas.width = (w * imgWidth) / imgHeight;
          }
        } else {
          canvas.width = imgWidth;
          canvas.height = imgHeight;
        }
        ctx.clearRect(0, 0, canvas.width, canvas.height);
        ctx.drawImage(newImage, 0, 0, canvas.width, canvas.height);
        // var base64 = canvas.toDataURL(getMimeType(base64String), quality);
        var base64 = canvas.toDataURL("image/jpeg", quality);
        console.log(base64);
        return base64;
      });
    }
 dataURLtoFile(dataurl, filename) {
      let arr = dataurl.split(",");
      let mime = arr[0].match(/:(.*?);/)[1];
      let bstr = atob(arr[1]);
      let n = bstr.length;
      let u8arr = new Uint8Array(n);
      while (n--) {
        u8arr[n] = bstr.charCodeAt(n);
      }
      try {
        return new File([u8arr], filename, { type: mime });
      } catch (err) {
        /**兼容iOS9.3或者Android4.4以下版本*/
        console.warn(
          "Browser does not support the File constructor,Will use blob instead of file"
        );
        return this.dataURL2blob(dataurl);
      }
    },
    /**
     * dataURL 转成 blob
     * @param dataURL
     * @return blob
     */
    dataURL2blob(dataURL) {
      let binaryString = atob(dataURL.split(",")[1]);
      let arrayBuffer = new ArrayBuffer(binaryString.length);
      let intArray = new Uint8Array(arrayBuffer);
      let mime = dataURL.split(",")[0].match(/:(.*?);/)[1];
      for (let i = 0, j = binaryString.length; i < j; i++) {
        intArray[i] = binaryString.charCodeAt(i);
      }
      let data = [intArray];
      let result;
      try {
        result = new Blob(data, { type: mime });
      } catch (error) {
        window.BlobBuilder =
          window.BlobBuilder ||
          window.WebKitBlobBuilder ||
          window.MozBlobBuilder ||
          window.MSBlobBuilder;
        if (error.name === "TypeError" && window.BlobBuilder) {
          var builder = new BlobBuilder();
          builder.append(arrayBuffer);
          result = builder.getBlob(type);
        } else {
          throw new Error("没救了");
        }
      }
      return result;
    },
    async upload() {
      try {
        let that = this;
        let params = { filename: that.file_name };
        console.log(params.filename);
        //获取签名
        Api.barthday2.getsign(params).then(res => {
          if (res.code == 0) {
            that.uploadFile(res.data.Sign);
          } else {
            that.$toast.clear();
            this.$toast(res.message);
          }
        });
      } catch (err) {
        that.$toast.clear();
        that.$toast(err);
      }
    },
    async uploadFile(url) {
      let that = this;
      let config = {
        headers: {
          "Content-Type": "application/octet-stream"
        }
      }; //添加请求头
      this.$http
        .put(url, this.file, config)
        .then(response => {
           //上传oss成功后把图片地址给服务器
          
        })
        .catch(res => {
          that.$toast("抱歉,系统异常,上传失败!");
        });
    },    

免责声明:文章转载自《vue Base64图片压缩上传OSS》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇现在可用——Windows Azure SDK 1.6JUC之StampedLock读写锁增强辅助类下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Golang压缩Jpeg图片和PNG图片

博主一直在维护一个导出PDF的服务,但是这个服务导出的PDF文件是真的巨大,动辄就上百MB。这里面主要是图片占据了大多数体积,所以考虑在导出前压缩一下图片。 Jpeg的图片压缩是很好做的,因为jpeg这个协议本身就支持调整图片质量的。在golang中,我们只需要使用标准库的image/jpeg,将图片从二进制数据解码后,降低质量再编码为二进制数据即可实现...

vue脚手架配置插件image-webpack-loader 图片压缩

vue脚手架配置插件image-webpack-loader 图片压缩 插件名称image-webpack-loader 插件文档地址 vuecli配置文档 我遇到的问题 前言:由于没仔细看文档,被坑的挺惨的,网上有很多关于此插件的资料但大多数是粘贴复制的 关于此插件要和file-loader结合使用,不用担心vue使用的url-loader插件...

使用 opencv 将图片压缩到指定文件尺寸

前言 图片压缩应用很广泛,如生成缩略图等。前期我在进行图片处理的过程中碰到了一个问题,就是如何将图片压缩到指定尺寸,此处尺寸指的是生成图片文件的大小。 我使用 opencv 进行图片处理,于是想着直接使用 opencv 进行图片压缩处理, opencv 本身包含了压缩到指定像素大小的方法,奈何寻找了很多方法均不能压缩到指定文件尺寸,于是自己在思考后写出了此...

Bitmap 转字节流字符, 压缩等处理

//压缩后转字节字符 public String bitmaptoString(Bitmap bitmap) { // 将Bitmap转换成字符串 String string = null; ByteArrayOutputStream baos = new ByteArrayOutputStream(); bitmap.compress(Bitma...

php图片压缩

php图片压缩 能对图片的大小、质量进行压缩。 <?php class ThumbHandler {     var $dst_img;// 目标文件     var $h_src; // 图片资源句柄     var $h_dst;// 新图句柄     var $h_mask;// 水印句柄     var $img_create_quality...

Java压缩图片

阅读目录 前言 压缩的要求 实现 优点 其他功能 前言 作为靠谱的java服务端程序员,图片这个事情一直是个头疼的事情。 现在很多网站上,都有上传图片这个功能,而图片对于现在的很多手机来说,拍摄出来的都是高清图片,分辨率也是相当的高,当然占用的存储空间也就大了。问题也就产生了,你每个用户都上传个3M的图片怎么办? 但是显然现在硬盘的存放空间是不值钱的...