Nodejs 上传图片如何压缩图片的宽与高呢?
Nodejs 上传图片如何压缩图片的宽与高呢?
我想在上传图片的时候,压缩一下图片的高于宽,顺便可以压缩一下大小。网站的图片是需要压缩图片的宽与高的比如头像等等。。。如果直接css设置div宽高感觉不是很好。
4 回复
我想在上传图片的时候,压缩一下图片的高于宽,顺便可以压缩一下大小。网站的图片是需要压缩图片的宽与高的比如头像等等。。。如果直接css设置div宽高感觉不是很好。
gm https://github.com/aheckmann/gm 我自己二次封装了一下 gm https://github.com/skipify/webimg
当然可以!在 Node.js 中处理上传图片并进行压缩是一个常见的需求。我们可以使用 multer
来处理文件上传,并使用 sharp
库来压缩图片。下面是一份详细的示例代码,包括前端和后端的部分。
后端(Node.js)
首先,安装必要的依赖:
npm install multer sharp
然后创建一个简单的服务器来处理上传和压缩图片:
const express = require('express');
const multer = require('multer');
const sharp = require('sharp');
const path = require('path');
const app = express();
const upload = multer({ dest: 'uploads/' });
app.post('/upload', upload.single('image'), async (req, res) => {
try {
const { file } = req;
if (!file) {
return res.status(400).send('No image uploaded.');
}
// 压缩图片
await sharp(file.path)
.resize(200, 200) // 设置新的宽度和高度
.toFile(path.join('compressed', path.basename(file.path)));
res.send('Image uploaded and compressed successfully.');
} catch (error) {
console.error(error);
res.status(500).send('Internal Server Error');
}
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
前端(HTML + JavaScript)
创建一个简单的 HTML 表单来上传图片:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Upload Image</title>
</head>
<body>
<form id="uploadForm" enctype="multipart/form-data">
<input type="file" name="image" id="imageInput" accept="image/*">
<button type="submit">Upload</button>
</form>
<script>
document.getElementById('uploadForm').addEventListener('submit', async (event) => {
event.preventDefault();
const formData = new FormData();
formData.append('image', document.getElementById('imageInput').files[0]);
const response = await fetch('/upload', {
method: 'POST',
body: formData
});
const result = await response.text();
alert(result);
});
</script>
</body>
</html>
解释
-
后端:
- 使用
multer
处理文件上传,并将文件保存到uploads/
目录。 - 使用
sharp
库读取上传的图片,并将其压缩为指定的宽度和高度(例如 200x200)。 - 将压缩后的图片保存到
compressed/
目录。
- 使用
-
前端:
- 创建一个简单的 HTML 表单用于选择和上传图片。
- 使用
fetch
发送 POST 请求到/upload
端点,将文件作为表单数据发送。
这样,当用户上传图片时,服务器会自动对其进行压缩并保存。