JavaScript中的图片压缩与Base64编码是两个相关联的概念。以下是对这两个概念的基础解释,以及相关的优势、类型、应用场景,以及可能遇到的问题和解决方案。
图片压缩:
Base64编码:
类型:
应用场景:
问题1:图片压缩后质量下降
问题2:Base64编码导致数据膨胀
示例代码:JavaScript图片压缩与Base64编码
// 使用canvas进行图片压缩
function compressImage(file, maxWidth, maxHeight, quality) {
return new Promise((resolve, reject) => {
const img = new Image();
img.src = URL.createObjectURL(file);
img.onload = () => {
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.width = width;
canvas.height = height;
const ctx = canvas.getContext('2d');
ctx.drawImage(img, 0, 0, width, height);
canvas.toBlob((blob) => {
const reader = new FileReader();
reader.onloadend = () => resolve(reader.result);
reader.readAsDataURL(blob);
}, 'image/jpeg', quality);
};
img.onerror = reject;
});
}
// 使用示例
const input = document.querySelector('input[type=file]');
input.addEventListener('change', async (event) => {
const file = event.target.files[0];
try {
const compressedBase64 = await compressImage(file, 800, 600, 0.8);
console.log('Compressed Image (Base64):', compressedBase64);
} catch (error) {
console.error('Compression failed:', error);
}
});
这段代码展示了如何使用HTML5的Canvas API来压缩图片,并将其转换为Base64编码。通过调整maxWidth
、maxHeight
和quality
参数,可以控制压缩后的图片尺寸和质量。
领取专属 10元无门槛券
手把手带您无忧上云