使用canvas压缩图片的具体步骤

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的压缩效率相对较低,压缩的速度可能会比较慢,因此需要根据实际情况进行折中考虑。