JavaScript 实现base64图片压缩

本文通过一个实际案例展示了如何使用JavaScript进行图片压缩。从加载原始图片到压缩处理并展示压缩后的效果,详细介绍了整个过程的实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看如下效果图,第一张是原图,点击Convert按钮后,第二张图显示压缩后的图,可以看到第一张的图的宽度是1600,压缩后图片的宽度是800

 废话少说,直接上代码。

<textarea id="a">
data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAkACQAAD/4QB0RXhpZgAATU0AKgAAAAgABAEaAAUAAA//2wBDAQICAgQEBAcEBAcQCwkLEBAQEAUUUUAf//Z
</textarea>
<img id="imga" width="200" height="200" />
<HR>
<button type="button" onclick="convert()">convert</button>
<textarea id="b">
data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAkACQAAD/4QB0RX+tD0jMjqn0q5VR/v1mdBFRRRQAUUUUAf//Z
</textarea>
<img id="imgb" width="200" height="200" />
<HR>
<script>
    imga.src = a.innerHTML;
    imgb.src = b.innerHTML;

    function convert() {
        compress(a.innerHTML, 800, 0.5).then(function (val) {
            imgb.src = val;
        });
    }

    function compress(base64String, w, quality) {
        var getMimeType = function (urlData) {
            var arr = urlData.split(',');
            var mime = arr[0].match(/:(.*?);/)[1];
            // return mime.replace("image/", "");
            return mime;
        };
        var newImage = new Image();
        var imgWidth, imgHeight;

        var promise = new Promise(resolve => newImage.onload = resolve);
        newImage.src = base64String;
        return promise.then(() => {
            imgWidth = newImage.width;
            imgHeight = newImage.height;
            var canvas = document.createElement("canvas");
            var ctx = canvas.getContext("2d");
            if (Math.max(imgWidth, imgHeight) > w) {
                if (imgWidth > imgHeight) {
                    canvas.width = w;
                    canvas.height = w * imgHeight / imgWidth;
                } else {
                    canvas.height = w;
                    canvas.width = w * imgWidth / imgHeight;
                }
            } else {
                canvas.width = imgWidth;
                canvas.height = imgHeight;
            }
            ctx.clearRect(0, 0, canvas.width, canvas.height);
            ctx.drawImage(newImage, 0, 0, canvas.width, canvas.height);
            var base64 = canvas.toDataURL(getMimeType(base64String), quality);
            console.log(base64);
            return base64;
        });
    }
</script>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值