Sharp:高性能图片处理库 - 功能、优势与适用场景
Sharp:高性能图片处理库 🚀
Sharp 是一个 基于 libvips 的高效图片处理库,主要用于 图片压缩、格式转换、裁剪、旋转、水印、滤镜 等操作。相比 Jimp
和 gm
,sharp
性能更高、内存占用更低,适用于大规模图片处理场景。
📌 Sharp 的主要功能
1️⃣ 图片格式转换
const sharp = require('sharp');
sharp('input.jpg')
.toFormat('png') // 转换格式
.toFile('output.png', (err, info) => console.log(info));
🔹 支持的格式:JPEG、PNG、WebP、AVIF、TIFF、GIF、SVG(部分支持)
2️⃣ 调整大小(缩放、裁剪)
sharp('input.jpg')
.resize(300, 200) // 调整大小(宽 300,高 200)
.toFile('resized.jpg');
🔹 裁剪模式:
.resize(300, 200, { fit: 'cover' })
- 等比例裁剪填充.resize(300, 200, { fit: 'contain' })
- 缩放但不裁剪.resize(300, 200, { fit: 'fill' })
- 强制拉伸
3️⃣ 图片旋转
sharp('input.jpg')
.rotate(90) // 旋转 90°
.toFile('rotated.jpg');
🔹 rotate()
可自动检测 EXIF 方向信息,确保图片方向正确。
4️⃣ 图片裁剪
sharp('input.jpg')
.extract({ left: 100, top: 50, width: 300, height: 200 }) // 裁剪区域
.toFile('cropped.jpg');
🔹 指定裁剪区域(left, top, width, height
)
5️⃣ 添加文本水印
const fs = require('fs');
sharp('input.jpg')
.composite([{ input: 'watermark.png', gravity: 'southeast' }]) // 右下角添加水印
.toFile('watermarked.jpg');
🔹 gravity: 'southeast'
指定水印位置(东北 northeast
、西北 northwest
、中央 center
等)。
6️⃣ 处理透明度
sharp('input.png')
.flatten({ background: { r: 255, g: 255, b: 255 } }) // 背景填充白色
.toFile('no-transparent.png');
🔹 flatten()
可以去掉透明背景,填充为指定颜色。
7️⃣ 调整图片质量
sharp('input.jpg')
.jpeg({ quality: 80 }) // 80% 质量输出
.toFile('compressed.jpg');
🔹 降低 quality
参数可以减少文件大小。
8️⃣ 模糊 & 锐化
sharp('input.jpg')
.blur(5) // 模糊程度 5
.toFile('blurred.jpg');
sharp('input.jpg')
.sharpen() // 默认增强锐度
.toFile('sharpened.jpg');
9️⃣ 颜色调整
sharp('input.jpg')
.grayscale() // 转换为灰度图
.toFile('gray.jpg');
sharp('input.jpg')
.tint({ r: 255, g: 0, b: 0 }) // 颜色加红色调
.toFile('tinted.jpg');
📌 Sharp 的优势
✅ 高性能 - 基于 libvips,比 Jimp
和 gm
快 4-5 倍
✅ 低内存占用 - 直接流式处理,不加载整个图像到内存
✅ 支持异步处理 - 适合批量处理大规模图片
✅ 功能强大 - 支持缩放、裁剪、旋转、格式转换、滤镜、水印等
📌 适用场景
🔹 用户头像处理(裁剪、缩放、格式转换)
🔹 网站图片优化(压缩、WebP 转换)
🔹 水印添加(防盗用)
🔹 批量处理大图(电商、社交平台)
💡 总结:Sharp 是 Node.js 处理图片的最佳选择,性能强、功能全,适用于大多数场景!如果你的项目需要图片处理,建议优先选择它。 🚀