美文网首页JavaScript 进阶营
JavaScript实现图片压缩

JavaScript实现图片压缩

作者: Wang_Yi | 来源:发表于2019-07-31 10:01 被阅读6次

1. 选择一张图片

    const img_original = document.getElementById('img_original');
    const img_output = document.getElementById('img_output');
    let blob;

    function preview(file) {
        let reader = new FileReader();
        reader.onload = function () {
            img_original.src = this.result;
            img_original.onload = () => {
                console.log('图片原始宽高:', img_original.naturalWidth, img_original.naturalHeight);
                console.log('图片原始大小:', file.size)
            }
        };
        reader.readAsDataURL(file);
    }

2. 使用Canvas压缩

function compress() {
        // 压缩到图片原始宽高的一半
        let w = img_original.naturalWidth / 2;
        let h = img_original.naturalHeight / 2;

        let canvas = document.createElement('canvas');
        let ctx = canvas.getContext('2d');
        let anw = document.createAttribute("width");
        anw.nodeValue = w;
        let anh = document.createAttribute("height");
        anh.nodeValue = h;
        canvas.setAttributeNode(anw);
        canvas.setAttributeNode(anh);

        ctx.fillRect(0, 0, w, h);
        ctx.drawImage(img_original, 0, 0, w, h);

        const base64 = canvas.toDataURL('image/jpeg', 0.75);// 压缩后质量
        const bytes = window.atob(base64.split(',')[1]);
        const ab = new ArrayBuffer(bytes.length);
        const ia = new Uint8Array(ab);
        for (let i = 0; i < bytes.length; i++) {
            ia[i] = bytes.charCodeAt(i);
        }
        blob = new Blob([ab], {type: 'image/jpeg'});

        console.log('压缩后的图片大小', blob.size);
        // 预览压缩后的图片
        img_output.src = base64
    }

3. 保存到本地

 function save() {
        if (blob) {
            let a = document.createElement('a');
            let event = new MouseEvent('click');
            a.download = Math.round(new Date() / 1000) + '.jpg';
            a.href = URL.createObjectURL(blob);
            a.dispatchEvent(event)
        }
    }

在线DEMOhttps://oktools.net/tinyimg

相关文章

  • JavaScript实现图片压缩

    1. 选择一张图片 2. 使用Canvas压缩 3. 保存到本地 在线DEMOhttps://oktools.n...

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

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

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

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

  • 前端性能优化方式

    2.前端性能优化方式 减少http请求。 大量图片渲染使用懒加载技术,图片压缩。 压缩代码,将javascript...

  • iOS 图片压缩方法

    图片压缩可以通过两种方式实现,压缩图片质量和压缩图片尺寸。如果对图片清晰度有要求的,可以先压缩图片质量,在压缩图片...

  • JavaScript前端图片压缩

    实现思路 获取input的file 使用fileReader() 将图片转为base64 使用canvas读取ba...

  • 关于Web性能优化

    [Yahoo前端优化十四条军规] · 压缩源码与图片 JavaScript文件源文件可以采用混淆压缩方式,css文...

  • iOS 图片压缩至指定大小内

    支持网络和本地图片压缩实现思路:先压缩图片的大小,再压缩图片的质量。网络图片转image对象: data转imag...

  • vue(2019/7/15)

    vue实现照片选择或者拍照功能 照片格式校验, 图片质量压缩, 图片尺寸压缩, 图片离线保存, 图片base64编...

  • 图片压缩上传

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

网友评论

    本文标题:JavaScript实现图片压缩

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