美文网首页
04-JS中图片压缩的一般方法

04-JS中图片压缩的一般方法

作者: 零涂 | 来源:发表于2022-02-22 16:37 被阅读0次

原文地址:https://zhuanlan.zhihu.com/p/31003294

// 图片压缩

// 1、urltoImage(url,fn) 会通过一个url加载所需要的图片对象,其中 url 参数传入图片的 url , fn 为回调方法,包含一个 Image 对象的参数,代码如下:

export function urltoImage(url,fn){
    var img = new Image();
    img.src = url;
    img.onload = function(){
        fn(img);
    }
}

// 2、 imagetoCanvas(image) 会将一个 Image 对象转变为一个 Canvas 类型对象,其中 image 参数传入一个Image对象,代码如下

export function imagetoCanvas(image){
    var cvs = document.createElement("canvas");
    var ctx = cvs.getContext('2d');
    cvs.width = image.width;
    cvs.height = image.height;
    ctx.drawImage(image, 0, 0, cvs.width, cvs.height);
    return cvs ;
};

// 3、 canvasResizetoFile(canvas,quality,fn) 会将一个 Canvas 对象压缩转变为一个 Blob 类型对象;其中 canvas 参数传入一个 Canvas 对象; quality 参数传入一个0-1的 number 类型,表示图片压缩质量; fn 为回调方法,包含一个 Blob 对象的参数;代码如下:

export function canvasResizetoFile(canvas,quality,fn){
    canvas.toBlob(function(blob) {
        fn(blob);
    },'image/jpeg',quality);
};

// 4、canvasResizetoDataURL(canvas,quality) 会将一个 Canvas 对象压缩转变为一个dataURL 字符串,其中 canvas 参数传入一个 Canvas 对象; quality 参数传入一个0-1的number类型,表示图片压缩质量;代码如下:

export function canvasResizetoDataURL(canvas,quality){
    return canvas.toDataURL('image/jpeg',quality);
};

// 5、 filetoDataURL(file,fn) 会将 File(Blob)类型文件转变为 dataURL 字符串,其中 file 参数传入一个 File (Blob)类型文件; fn 为回调方法,包含一个 dataURL 字符串的参数;代码如下:

export function filetoDataURL(file,fn){
    var reader = new FileReader();
    reader.onloadend = function(e){
        fn(e.target.result);
    };
    reader.readAsDataURL(file);
};

// 6、 dataURLtoImage(dataurl,fn) 会将一串 dataURL 字符串转变为 Image 类型文件,其中 dataurl 参数传入一个 dataURL 字符串, fn 为回调方法,包含一个 Image 类型文件的参数,代码如下:

export function dataURLtoImage(dataurl,fn){
    var img = new Image();
    img.onload = function() {
        fn(img);
    };
    img.src = dataurl;
};

// 7、 dataURLtoFile(dataurl) 会将一串 dataURL 字符串转变为 Blob 类型对象,其中 dataurl 参数传入一个 dataURL 字符串,代码如下:

export function dataURLtoFile(dataurl) {
    var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
        bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
    while(n--){
        u8arr[n] = bstr.charCodeAt(n);
    }
    return new Blob([u8arr], {type:mime});
};

// 进一步封装   
//对于常用的将一个 File 对象压缩之后再变为 File 对象,我们可以将上面的方法再封装一下,参考如下代码:
export function fileResizetoFile(file,quality,fn){
    filetoDataURL (file,function(dataurl){
        dataURLtoImage(dataurl,function(image){
            canvasResizetoFile(imagetoCanvas(image),quality,fn);
        })
    })
}
// file 参数传入一个 File (Blob)类型文件; quality 参数传入一个 0-1 的 number 类型,表示图片压缩质量; fn 为回调方法,包含一个 Blob 类型文件的参数。
// 它使用起来就像下面这样:
// var file = document.getElementById('demo').files[0];
// fileResizetoFile(file,0.6,function(res){
//     console.log(res);
//     //拿到res,做出你要上传的操作;
// })

相关文章

  • 04-JS中图片压缩的一般方法

    原文地址:https://zhuanlan.zhihu.com/p/31003294[https://zhuanl...

  • iOS 图片压缩方法

    iOS 图片压缩方法 更多图片处理方法见图片组件 BBWebImage iOS 图片压缩方法 两种图片压缩方法 两...

  • JS中图片压缩的一般方法

    前两天公司业务上有需求需要将较大的图片压缩后再传到远程服务器,网上找了不少方法都不太好用,今天有空索性自己写了一个...

  • iOS 图片压缩方法

    两种图片压缩方法 两种图片压缩方法:压缩图片质量(Quality),压缩图片尺寸(Size)。 压缩图片质量 通过...

  • iOS 图片压缩限制大小

    一、两种图片压缩方法 两种压缩图片的方法:压缩图片质量(Quality),压缩图片尺寸(Size)。 压缩图片质量...

  • iOS 图片压缩方法

    两种图片压缩方法 两种压缩图片的方法:压缩图片质量(Quality),压缩图片尺寸(Size)。 压缩图片质量 N...

  • elementUi el-upload组件图片上传之前压缩图片大

    将图片导入到canvas画布中,利用画布重绘压缩图片,降低图片质量 压缩方法调用

  • iOS 图片压缩限制大小最优解

    iOS 图片压缩限制大小最优解 图片的两种压缩方法 1.1 压缩图片质量 1.2 压缩图片尺寸 压缩图片使图片文件...

  • iOS 图片压缩限制大小最优解

    概要: 图片的两种压缩方法1.1 压缩图片质量1.2 压缩图片尺寸压缩图片使图片文件小于指定大小2.1 压缩图片质...

  • 图片压缩方法

    两种图片压缩方法 压缩图片质量(quality)、压缩图片尺寸(size) 压缩图片质量 或 前者可以控制压缩比例...

网友评论

      本文标题:04-JS中图片压缩的一般方法

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