1. 前言
在实际开发中,需要使用到图片的压缩,主要是为了更好的展示和更快的加载速度。在前端开发中,可以使用HTML5中的Canvas来完成压缩图片的功能,本文将会介绍如何使用Canvas来压缩图片。
2. 获取图片
在使用Canvas压缩图片之前,需要先获取图片。可以使用<input>
标签,或者通过JavaScript代码来获取图片。
2.1 通过<input>
标签获取图片
可以使用 <input type='file'>
标签来获取图片。
<input type='file' id='fileInput' accept='image/*' onchange='loadImageFile()'>
接下来在JavaScript中编写loadImageFile函数,将获取到的图片文件读取为DataURL。在读取完成后,可以将DataURL赋值给Image对象的src属性,这样就可以在Canvas中使用了。
function loadImageFile() {
var fileInput = document.getElementById('fileInput');
var file = fileInput.files[0];
var reader = new FileReader();
reader.onload = function(e){
var img = new Image();
img.src = e.target.result;
img.onload = function(){
//图片加载完成后,可以将img对象传给canvas进行压缩处理
}
};
reader.readAsDataURL(file);
}
2.2 通过JavaScript代码获取图片
可以通过JavaScript代码,直接获取图片的URL地址,然后将其赋值给Image对象的src属性。
var img = new Image();
img.src = 'https://example.com/example.jpg';
img.onload = function(){
//图片加载完成后,可以将img对象传给canvas进行压缩处理
}
3. 压缩图片
在获取到图片后,可以将其传入Canvas中进行压缩。Canvas提供了toDataURL()方法可以将压缩后的图片转换成DataURL(Base64格式的字符串),然后可以将其上传至服务器,或者通过Ajax进行传输。
3.1 创建Canvas
在Canvas中绘制图片之前,需要先创建一个Canvas对象。
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
在Canvas元素的width和height属性中指定Canvas的尺寸。在下面的例子中,将Canvas的长宽都设置为原始图片的1/4。
canvas.width = img.width / 4;
canvas.height = img.height / 4;
3.2 在Canvas中绘制图片
通过Canvas的drawImage()方法,在Canvas中绘制图片。
ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
上面的代码将img对象的图片绘制在Canvas中,图片的长宽分别为canvas.width和canvas.height,左上角的坐标为(0,0)。
3.3 压缩图片
在绘制图片完成后,可以使用toDataURL()方法将Canvas中的图片转换成DataURL。
var dataURL = canvas.toDataURL();
上面的代码将压缩后的图片转换成了DataURL字符串,可以将其传给服务器,或者通过Ajax进行传输。
4. 总结
到此为止,使用Canvas压缩图片就完成了。实际上,Canvas还有很多强大的功能,例如裁剪、变换、滤镜等等,这些功能都可以通过Canvas来实现。
值得一提的是,Canvas处理图片的效果非常优秀,图片质量几乎没有损失。但是需要注意的是,Canvas的压缩效率相对较低,压缩的速度可能会比较慢,因此需要根据实际情况进行折中考虑。