使用 html 和javascript 实现 图片压缩上传到服务器
时间: 2023-06-24 11:04:35 浏览: 129
实现图片的上传以及压缩
可以通过以下步骤使用 HTML 和 JavaScript 实现图片压缩并上传到服务器:
1. 在 HTML 文件中创建一个 input 元素,使用户可以选择要上传的图片文件:
```html
<input type="file" id="file-input">
```
2. 使用 JavaScript 获取用户选择的图片文件,并将其转换为 base64 格式:
```javascript
const fileInput = document.getElementById('file-input');
const file = fileInput.files[0];
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function() {
const base64Image = reader.result;
};
```
3. 使用 JavaScript 创建一个 Image 对象,加载用户选择的图片文件,并在加载完成后将其绘制到一个 Canvas 上:
```javascript
const img = new Image();
img.src = base64Image;
img.onload = function() {
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
// 设置 Canvas 大小为图片大小
canvas.width = img.width;
canvas.height = img.height;
// 在 Canvas 上绘制图片
ctx.drawImage(img, 0, 0);
// 获取 Canvas 上的压缩后的图片数据
const compressedImage = canvas.toDataURL('image/jpeg', 0.5);
};
```
在这个例子中,我们将图片压缩为质量为 50% 的 JPEG 格式。
4. 创建一个 XMLHttpRequest 对象,将压缩后的图片数据作为请求体发送到服务器:
```javascript
const xhr = new XMLHttpRequest();
xhr.open('POST', '/upload');
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send(`image=${encodeURIComponent(compressedImage)}`);
```
在这个例子中,我们将压缩后的图片数据作为 image 参数发送到服务器。
完整的 HTML 和 JavaScript 代码如下:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>图片上传</title>
</head>
<body>
<input type="file" id="file-input">
<button id="upload-btn">上传</button>
<script>
const fileInput = document.getElementById('file-input');
const uploadBtn = document.getElementById('upload-btn');
fileInput.addEventListener('change', function() {
const file = fileInput.files[0];
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function() {
const base64Image = reader.result;
const img = new Image();
img.src = base64Image;
img.onload = function() {
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
// 设置 Canvas 大小为图片大小
canvas.width = img.width;
canvas.height = img.height;
// 在 Canvas 上绘制图片
ctx.drawImage(img, 0, 0);
// 获取 Canvas 上的压缩后的图片数据
const compressedImage = canvas.toDataURL('image/jpeg', 0.5);
uploadBtn.addEventListener('click', function() {
const xhr = new XMLHttpRequest();
xhr.open('POST', '/upload');
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send(`image=${encodeURIComponent(compressedImage)}`);
});
};
};
});
</script>
</body>
</html>
```
请注意,这只是一个简单的示例,实际应用中还需要考虑更多的因素,例如图片大小限制、上传进度显示、错误处理等等。
阅读全文