sharp
库对图片进行一系列操作,个人认为该库能够进行很多相应地浏览器端的深度学习应用。一、准备工作
sharp
库cnpm i sharp
const sharp = require('sharp')
二、sharp库的使用
2.1 重置图片的大小
sharp
的构造函数创建一个图片对象,并将原图片重新设置大小为300 * 200
后输出const img_name = './images/cat_rabbit.jpg'
const resize_img_name = './images/resize_img.jpg'
sharp(img_name)
.resize(300, 200)
.toFile(resize_img_name, err => {
if (err) console.log(err)
})
2.2 旋转图片
sharp
的构造函数创建一个图片对象,并将原图片旋转180°
后输出const img_name = './images/cat_rabbit.jpg'
const rotate_img_name = './images/rotate_img.jpg'
sharp(img_name)
.rotate(180)
.toFile(rotate_img_name, err => {
if (err) console.log(err)
})
2.3 flatten
alpha
通道图层(为图片添加一个透明的背景色)
该函数的应用,应用在rgba
格式的图片上,如png
上效果能够可见
sharp
的构造函数创建一个图片对象,并使用flatten
为其添加背景色const img_name = './images/flower.png'
const flatten_img_name = './images/flatten_img.png'
sharp(img_name)
.rotate(180)
.toFile(rotate_img_name, err => {
if (err) console.log(err)
})
2.4 两张图片进行叠加的操作
composite
函数完成两张图片叠加的操作const img_name = './images/flower.png'
const composite_img = './images/composite.png'
sharp(img_name)
.composite([{
input: './images/cat_rabbit.jpg',
gravity: 'southeast' // 从东南角,也就是右下角开始
}])
.toFile(composite_img_name, err => {
if (err) console.log(err)
})
2.5 将图片转换为webp
格式
const webp_img = './images/webp_img.png'
sharp(img_name)
.webp({
quality: 90
})
.toFile(composite_img_name, err => {
if (err) console.log(err)
})
2.6 将图片转换为buffer
sharp(img_name)
.toBuffer()
.then(outputBuffer => {
console.log(outputBuffer)
})
2.7 以X轴
, Y轴
作为旋转轴,进行镜像
sharp(img_name) // 以 X轴 为旋转轴
.flip(true)
.toFile('./images/flip_img.jpg', err => {
if (err) console.log(err)
})
sharp(img_name) // 以 Y轴 为旋转轴
.flop(true)
.toFile('./images/flop_img.jpg', err => {
if (err) console.log(err)
})
2.8 使用固定的卷积核对图像进行卷积
convolve
函数进行滤波操作sharp(img_name)
.convolve({
width: 3,
height: 3,
kernel: [-1, 0, 1, -2, 0, 2, -1, 0, 1] // 索伯尔滤波
})
.toFile('./images/convolve_img.jpg', err => {
if (err) console.log(err)
})
2.9 进行二值化处理
threshold
函数实现sharp(img_name)
.threshold(128)
.toFile('./images/threshold_img.jpg', err => {
if (err) console.log(err);
})
2.8 其余对图片进行操作的函数有
sharpen(锐化)
median(中值滤波)
blur(模糊)
flatten(合并alpha
通道)
gamma
negate(反转显示图像)
normalise/normalize(图像均衡化操作)
boolean(二元运算操作)
linear(线性运算)
recomb(重整图像)
modulate(调整明亮度)
三、图像的相关操作
3.1 图像灰度化
grayscale
函数进行灰度化sharp(img_name)
.grayscale(true)
.toFile('./images/grayscale_img.jpg', err => {
if (err) console.log(err)
})
3.2 提取某个图片中的某个通道
extractChannel
函数sharp(img_name)
.extractChannel('green')
.toFile('green_img.jpg', function(err, info) {
// info.channels === 1
// input_green.jpg contains the green channel of the input image
});
四、总结
最后,附上我自己的项目链接
项目地址