图片压缩功能

html部分(此处使用了element-ui的图片上传组件)

  <el-upload :action="Api" list-type="picture-card" :before-upload="beforeUpload"></el-upload>

js部分

      /* 限制图片上传 */
      beforeUpload(file) {
        let _this = this
        let suffix = _this.getFileType(file.name) //获取文件后缀名
        let suffixArray = ['jpg', 'png', 'jpeg', 'gif', 'jfif'] //限制的文件类型
        let limitWidth = 1280 //默认文件宽度
        if (suffixArray.indexOf(suffix) === -1) {
          _this.$message({
            message: '只允许上传图片',
            type: 'error',
            duration: this.elDuration
          })
        }
        return new Promise((resolve, reject) => {
          // let isLt10M = file.size / 1024 / 1024 < 10 // 判定图片大小是否小于10MB
          // if (!isLt10M) {
          //   reject()
          // }
          let image = new Image(),
            resultBlob = '';
          image.src = URL.createObjectURL(file);
          image.onload = () => {
            // 调用方法获取blob格式
            resultBlob = _this.compressUpload(image, file, limitWidth);
            resolve(resultBlob)
          }
          image.onerror = () => {
            reject()
          }
        })
      },

  compressUpload(image, file, limitWidth) {
    let canvas = document.createElement('canvas')
    let ctx = canvas.getContext('2d')
    // 获取原图比例
    let {
      width,
      height
    } = image
    let scale = width / height; //图片比例
    let ctxHeight = limitWidth / scale; //图片高度
    // 创建属性节点
    let nodeWidth = document.createAttribute("width");
    nodeWidth.nodeValue = limitWidth;
    let nodeHeight = document.createAttribute("height");
    nodeHeight.nodeValue = ctxHeight;
    canvas.setAttributeNode(nodeWidth);
    canvas.setAttributeNode(nodeHeight);
    ctx.drawImage(image, 0, 0, limitWidth, ctxHeight)

    // 进行压缩
    let compressData = canvas.toDataURL(file.type || 'image/jpeg', 1.0)

    // 压缩后进行base64转Blob
    let byteString;
    if (compressData.split(',')[0].indexOf('base64') >= 0) {
      byteString = atob(compressData.split(',')[1])
    } else {
      byteString = unescape(compressData.split(',')[1])
    }
    let mimeString = compressData.split(',')[0].split(':')[1].split(';')[0];
    let ia = new Uint8Array(byteString.length)
    for (let i = 0; i < byteString.length; i += 1) {
      ia[i] = byteString.charCodeAt(i)
    }
    let blobImg = new Blob([ia], {
      type: mimeString
    })
    return blobImg
  },
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要为Quill.js的编辑器添加图片压缩功能,可以使用quill-image-compress模块。首先,需要安装该模块,可以使用命令`yarn add quill-image-compress`进行安装。在创建Quill实例时,需要在modules中添加imageCompress模块,并设置quality参数来指定图片的压缩质量。 另外,可以使用vue-quill-editor库来创建一个带有图片上传功能的富文本编辑器。首先,新建一个input框,并设置其type为file,当用户选择图片时,通过添加默认点击事件,让其代理选取图片文件。然后,使用lrz插件来压缩图片,并将压缩完成的图片返回给vue-quill-editor富文本编辑器。 在Vue组件的methods中,可以编写一个压缩图片的方法。该方法首先获取用户选择的文件,并使用lrz插件对图片进行压缩,设置压缩后图片的宽度为1024。然后,创建一个新的Image对象,将压缩后的图片赋值给img的src属性。接下来,通过`this.$refs.myQuillEditor.quill`来获取富文本编辑器的编辑框,将焦点聚焦在编辑框上,并使用`quill.insertEmbed`方法将压缩后的图片插入到编辑器中。最后,返回压缩后的图片结果。 通过以上步骤,就可以为Quill-editor添加图片压缩功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [quill-image-compress:Quill富文本编辑器模块,可压缩上传到编辑器的图像](https://download.csdn.net/download/weixin_42118161/18324051)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [富文本编辑器vue-quill-editor上传图片过大](https://blog.csdn.net/m0_46754058/article/details/123723424)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值