图像处理 bimg
Small Go软件包,用于通过C绑定使用libvips进行快速的高级图像处理,提供了简单,优雅且流畅的编程API。
bimg被设计为一个小型高效的库,支持一组常见的图像操作,例如裁剪,调整大小,旋转,缩放或水印。如果libvips@8.3+
使用正确的库绑定进行编译,它可以本地读取JPEG,PNG,WEBP,还可以读取TIFF,PDF,GIF和SVG格式。
bimg能够将图像输出为JPEG,PNG和WEBP格式,包括它们之间的透明转换。
bimg在内部使用libvips,这是一个用C语言编写的功能强大的库,用于图像处理,它占用的内存很少,通常比使用最快的ImageMagick和GraphicsMagick设置或Go native image
包快4倍,并且在某些情况下甚至比处理JPEG图像快8倍。
如果您正在寻找基于HTTP的图像处理解决方案,请参见imaginary。
bimg受到Sharp的大力启发,Sharp的同源软件包是为node.js构建的。bimg用于生产环境中,每天处理数千张图像。
v1通知:bimg
引入了一些较小的重大更改v1
。如果您使用gopkg.in
,则仍然可以依赖而v0
不用担心API的重大更改。
内容
支持的图像操作
- 调整大小
- 放大
- 作物(包括智能作物支持,libvips 8.5+)
- 旋转(基于EXIF方向自动旋转)
- 翻转(具有基于EXIF元数据的自动翻转)
- 翻牌圈
- 放大
- 缩图
- 提取面积
- 水印(使用文本或图像)
- 高斯模糊效果
- 自定义输出颜色空间(RGB,灰度...)
- 格式转换(具有其他质量/压缩设置)
- EXIF元数据(大小,Alpha通道,配置文件,方向...)
- 修剪(libvips 8.6+)
先决条件
- libvips 7.42+或8+(建议8.4+)
- 与C兼容的编译器,例如gcc 4.6+或clang 3.0+
- 继续1.3+
注意:libvips
GIF,PDF和SVG支持需要v8.3 +。
下载
go get -u gopkg.in/h2non/bimg.v1\
调整大小
buffer, err := bimg.Read("image.jpg")
if err != nil {
fmt.Fprintln(os.Stderr, err)
}
newImage, err := bimg.NewImage(buffer).Resize(800, 600)
if err != nil {
fmt.Fprintln(os.Stderr, err)
}
size, err := bimg.NewImage(newImage).Size()
if size.Width == 800 && size.Height == 600 {
fmt.Println("The image size is valid")
}
bimg.Write("new.jpg", newImage)
旋转
buffer, err := bimg.Read("image.jpg")
if err != nil {
fmt.Fprintln(os.Stderr, err)
}
newImage, err := bimg.NewImage(buffer).Rotate(90)
if err != nil {
fmt.Fprintln(os.Stderr, err)
}
bimg.Write("new.jpg", newImage)
水印
buffer, err := bimg.Read("image.jpg")
if err != nil {
fmt.Fprintln(os.Stderr, err)
}
watermark := bimg.Watermark{
Text: "Chuck Norris (c) 2315",
Opacity: 0.25,
Width: 200,
DPI: 100,
Margin: 150,
Font: "sans bold 12",
Background: bimg.Color{255, 255, 255},
}
newImage, err := bimg.NewImage(buffer).Watermark(watermark)
if err != nil {
fmt.Fprintln(os.Stderr, err)
}
bimg.Write("new.jpg", newImage)
详细方法
https://www.ctolib.com/bimg.html#articleHeader10