在JavaScript中压缩图片大小通常涉及到图像处理库的使用,比如canvas
元素结合FileReader
和Blob
对象,或者使用专门的库如compressor.js
、pica
等。以下是使用canvas
进行图片压缩的基本步骤:
FileReader
读取用户选择的图片文件。Image
对象,并设置其src
属性为读取到的图片数据。canvas
绘制该图片。canvas
的尺寸为小于原图的尺寸,以实现压缩效果。canvas.toDataURL
或canvas.toBlob
方法导出压缩后的图片数据。function compressImage(file, maxWidth, maxHeight, quality) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function(event) {
const img = new Image();
img.src = event.target.result;
img.onload = function() {
const canvas = document.createElement('canvas');
let width = img.width;
let height = img.height;
// 计算新的尺寸
if (width > height) {
if (width > maxWidth) {
height *= maxWidth / width;
width = maxWidth;
}
} else {
if (height > maxHeight) {
width *= maxHeight / height;
height = maxHeight;
}
}
// 设置canvas尺寸并绘制图片
canvas.width = width;
canvas.height = height;
const ctx = canvas.getContext('2d');
ctx.drawImage(img, 0, 0, width, height);
// 导出压缩后的图片
canvas.toBlob((blob) => {
if (blob) {
resolve(blob);
} else {
reject(new Error('图片压缩失败'));
}
}, 'image/jpeg', quality);
};
img.onerror = function() {
reject(new Error('图片加载失败'));
};
};
reader.onerror = function() {
reject(new Error('文件读取失败'));
};
});
}
// 使用示例
const input = document.querySelector('input[type="file"]');
input.addEventListener('change', async (event) => {
const file = event.target.files[0];
try {
const compressedBlob = await compressImage(file, 800, 600, 0.8);
// 这里可以将compressedBlob上传到服务器或进行其他处理
} catch (error) {
console.error(error);
}
});
quality
)来平衡压缩比和图片质量。canvas
和FileReader
的支持程度不同。可以通过特性检测和降级处理来确保兼容性。通过以上方法,可以在JavaScript中实现图片的压缩,优化图片的存储和传输。
领取专属 10元无门槛券
手把手带您无忧上云