美文网首页
前端实现图片压缩

前端实现图片压缩

作者: meng_281e | 来源:发表于2021-09-02 10:28 被阅读0次

1.思路

获取图片数据 —> 用canvans画图,压缩 —> 压缩后为base64 —> 转成文件格式 —> 上传文件

2.代码

        var file = fileObj ;
        var reader = new FileReader();
        reader.readAsDataURL(file);
        // 缩放图片需要的canvas
        var canvas = document.createElement('canvas');
        var context = canvas.getContext('2d');
        reader.onload=function () {
          var content = this.result; //图片的src,base64格式
          var img = new Image();
          img.src = content;
          img.onload = function (){ //图片加载完毕
            // 图片原始尺寸
            var originWidth = this.width;
            var originHeight = this.height;
            // 最大尺寸限制,可通过国设置宽高来实现图片压缩程度
            var maxWidth = 800,
                maxHeight = 800;
            // 目标尺寸
            var targetWidth = originWidth
            var targetHeight = originHeight;
            // 图片尺寸超过400x400的限制
            if(originWidth > maxWidth || originHeight > maxHeight) {
                if(originWidth / originHeight > maxWidth / maxHeight) {
                    // 更宽,按照宽度限定尺寸
                    targetWidth = maxWidth;
                    targetHeight = Math.round(maxWidth * (originHeight / originWidth));
                } else {
                    targetHeight = maxHeight;
                    targetWidth = Math.round(maxHeight * (originWidth / originHeight));
                }
            }
            // canvas对图片进行缩放
            canvas.width = targetWidth;
            canvas.height = targetHeight;
            // 清除画布
            context.clearRect(0, 0, targetWidth, targetHeight);
            // 图片压缩
            context.drawImage(img, 0, 0, targetWidth, targetHeight);
            /*第一个参数是创建的img对象;第二个参数是左上角坐标,后面两个是画布区域宽高*/
            //压缩后的图片base64 url
            /*canvas.toDataURL(mimeType, qualityArgument),mimeType 默认值是'image/jpeg';
             * qualityArgument表示导出的图片质量,只要导出为jpg和webp格式的时候此参数才有效果,默认值是0.92*/
            var dataURL = canvas.toDataURL(file.type||"image/jpeg", 0.92);//base64 格式
            // let blob = dataURItoBlob(dataURL,file.name);
            let newFile = dataURItoBlob(dataURL,file.name);
            let  formData = new FormData();
            // formData.append(option.fileName,blob);
            formData.append(option.fileName,newFile,file.name);
            callback(formData);
          }
        };
      };
function dataURItoBlob(dataurl,filename){   //dataurl是base64格式
        var arr = dataurl.split(',');
        var mime = arr[0].match(/:(.*?);/)[1];
        var bstr = atob(arr[1]);
        var n = bstr.length;
        var u8arr = new Uint8Array(n);
        while(n--){
          u8arr[n] = bstr.charCodeAt(n);
        }
        //发现ios11不支持new File()
        // let newFile = new File([u8arr], filename, {
        //   type: mime || "image/jpeg"
        // });
        // return newFile;
        return new Blob([u8arr], {type:mime || "image/jpeg"});
      };

相关文章

  • 前端实现图片裁剪和压缩

    前端实现图片的裁剪和压缩1、压缩图片drawImage,压缩图片长宽或者质量参数来实现压缩 2、图片base64转...

  • 21天习惯养成打卡-day1

    遇到的问题 前端进行图片压缩 bootstrap框架表单的使用 解决方法 张鑫旭博客上的解决方案前端实现图片压缩上...

  • 前端实现图片压缩

    1.思路 获取图片数据 —> 用canvans画图,压缩 —> 压缩后为base64 —> 转成文件格式 —> 上...

  • 图片压缩上传

    参考1-HTML5实现图片压缩上传功能参考2-移动前端—图片压缩上传实践参考3-移动端H5图片压缩上传 大体步骤 ...

  • Django 实现前端图片压缩

    思路: 上面是一个典型的HTML中的图片,在django中,src对应的path会经过url进行过滤处理,所以可以...

  • 前端(JavaScript)实现图片压缩

    业务场景 场景描述:前端使用 标签进行上传图片时,当图片过大时,会造成接口响应速度过慢,影响用户体验。解决方案:前...

  • 前端使用canvas对图片进行压缩

    纯前端对图片压缩 纯前端因为可以调用FileReader和canvas接口,在图片压缩方面非常便捷.思路就是获取图...

  • 前端使用canvas实现图片压缩

    代码来源于廖雪峰博客,是最实用的,也是最简洁的,但有个问题就是图片过小,‘压缩’后会更大,这个区间大概是1.5M以...

  • web前端实现图片压缩处理

    // 图片数组 以下为具体的功能实现js

  • 图片处理

    为了适应各种分辨率的显示和速度快,需要将图片进行压缩或者裁剪 前端图片处理 cropperjs可以实现图片的裁剪和...

网友评论

      本文标题:前端实现图片压缩

      本文链接:https://www.haomeiwen.com/subject/rgsqwltx.html