js压缩图片

这段代码主要实现了图片文件上传前的大小检查与压缩处理。如果图片大小超过2MB,则使用readImg函数读取图片并压缩至指定尺寸,然后通过compressImg函数进行质量压缩,最后将压缩后的图片以FormData形式上传至服务器。
摘要由CSDN通过智能技术生成
            let form_data = new FormData();
            form_data.append("file", document.getElementById("upfile").files[0]);
            let file = document.getElementById("upfile").files[0]
            if(file.size > 2097152){
                const imged = this.readImg(file)
                imged.then((res) => {
                    const blob = that.compressImg(res, file.type, 300, 300)
                    blob.then((res) => {
                        let formData = new FormData()
                        formData.append('file', res, 'xxx.jpg')
                         //上传图片到服务器
                    }).catch(err => {
                        console.log(err)
                    })
                }).catch((err) => {
                })
            }else{
                //上传图片到服务器
            }
            
        readImg(file) {
            return new Promise((resolve, reject) => {
                const img = new Image()
                const reader = new FileReader()
                reader.readAsDataURL(file)
                reader.onload = function (e) {
                    img.src = e.target.result
                }
                reader.onerror = function (e) {
                    reject(e)
                }
                img.onload = function () {
                    resolve(img)
                }
                img.onerror = function (e) {
                    reject(e)
                }
            })
        },
        compressImg(img, type, mx, mh) {
            return new Promise((resolve, reject) => {
                const canvas = document.createElement('canvas')
                const context = canvas.getContext('2d')
                const {width: originWidth, height: originHeight} = img
                // 最大尺寸限制
                const maxWidth = mx
                const maxHeight = mh
                // 目标尺寸
                let targetWidth = originWidth
                let targetHeight = originHeight
                if (originWidth > maxWidth || originHeight > maxHeight) {
                    if (originWidth / originHeight > 1) {
                        // 宽图片
                        targetWidth = maxWidth
                        targetHeight = Math.round(maxWidth * (originHeight / originWidth))
                    } else {
                        // 高图片
                        targetHeight = maxHeight
                        targetWidth = Math.round(maxHeight * (originWidth / originHeight))
                    }
                }
                canvas.width = targetWidth
                canvas.height = targetHeight
                context.clearRect(0, 0, targetWidth, targetHeight)
                // 图片绘制
                context.drawImage(img, 0, 0, targetWidth, targetHeight)
                canvas.toBlob(function (blob) {
                    resolve(blob)
                }, type || 'image/png')
            })
        },
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值