使用FileReader + canvas.toDataURL() 实现图片压缩
// 假设有一个input元素允许用户上传图片
<input type="file" id="image-input" />
// JavaScript 代码
document.getElementById('image-input').addEventListener('change', function(e) {
// 读取文件并创建FileReader对象
var file = e.target.files[0];
var reader = new FileReader();
reader.onload = function(loadEvent) {
var img = new Image();
img.onload = function() {
// 创建Canvas元素
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
// 设置Canvas大小为原图的50%
var width = img.width * 0.5;
var height = img.height * 0.5;
canvas.width = width;
canvas.height = height;
// 绘制压缩后的图片到Canvas
ctx.drawImage(img, 0, 0, width, height);
// 将Canvas转换为base64格式的图片
var dataUrl = canvas.toDataURL('image/jpeg', 0.5); // 图片质量为50%
// 创建一个Image元素用于展示压缩后的图片
var compressedImg = new Image();
compressedImg.src = dataUrl;
// 将压缩后的图片添加到页面上显示
document.body.appendChild(compressedImg);
};
img.src = loadEvent.target.result;
};
reader.readAsDataURL(file);
});
这段代码首先监听了一个input元素的change事件,当用户选择文件后,会使用FileReader读取文件。读取完成后,创建一个Image对象并加载图片。图片加载完成后,创建一个Canvas,并将图片按照指定的比例绘制进去。然后使用canvas.toDataURL()
方法将Canvas内容转换为一个base64编码的图片。最后创建一个新的Image元素展示这个压缩后的图片。
评论已关闭