大家好,我是渔夫子。本号新推出「Go工具箱」系列,意在给大家分享使用go语言编写的、实用的、好玩的工具。
今天给大家推荐的是一个强大、实用、简单的图像处理工具:imaging。
以下是该工具的基本档案:
imaging小档案 | |||
---|---|---|---|
star | 4.4k | used by | 3.1k |
contributors | 18 | 工具分类 | 图像处理 |
功能简介 | 该包提供了一组基本的图像处理功能。包括调整图像大小、裁剪、旋转、缩略图、图像合成、调整亮度/对比度等 |
安装
go get -u github.com/disintegration/imaging
基本使用
调整图像大小
如下是对图像大小进行调整的示例代码:
// Resize srcImage to size = 128x128px using the Lanczos filter.
dstImage128 := imaging.Resize(srcImage, 128, 128, imaging.Lanczos)
// Resize srcImage to width = 800px preserving the aspect ratio.
dstImage800 := imaging.Resize(srcImage, 800, 0, imaging.Lanczos)
// Scale down srcImage to fit the 800x600px bounding box.
dstImageFit := imaging.Fit(srcImage, 800, 600, imaging.Lanczos)
// Resize and crop the srcImage to fill the 100x100px area.
dstImageFill := imaging.Fill(srcImage, 100, 100, imaging.Center,
imaging.Lanczos)
调整图像大小实际上是通过对原图像素进行采样实现的。imaging工具的调整图像大小的功能目前支持15种采样算法,但常用的只有以下6种:imaging.NearestNeighbor、imaging.Box、imaging.Linear、imaging.CatmullRom、imaging.Lanczos。这6种算法的速度也是依次从快到慢,但生成图像的质量则是从低到高。
生成缩略图
thumbnail := imaging.Thumbnail(srcImage, 100, 100, imaging.Lanczos
对图像进行裁剪
imaging工具对于图像裁剪也提供了很多函数。如下:
// 按指定的边界进行裁剪
dstImageCorp := imaging.Corp(srcImage, image.Rect(0, 0, 100, 20))
// 指定定位点和要裁剪的宽高进行裁剪
dstImageCorp := imaging.CropAnchor(srcImage, 100, 200, imaging.Center)
图像合成
imaging工具还提供了图像合成的能力,通过Overlay函数以及设置透明度就可以将多个图像合成一个。如下:
// 将srcImage图像合成到背景图的指定位置上,并设置透明度
overlap := imaging.Overlay(backgroundImage, srcImage, image.Point{10, 10}, 0.5)
对图像进行转换
图像转换包括对图像按角度旋转(旋转90度、旋转180度、旋转270度、旋转自定义角度)、水平翻转、垂直翻转等。如下:
//水平翻转图像
dstImageFlipH := imaging.FlipH(srcImage)
//垂直翻转图像
dstImageFlipV := imaging.FlipV(srcImage)
//水平翻转图像并逆时针旋转90度
dstImageTranspose := imaging.Transpose(srcImage)
// 垂直翻转图像并逆时针旋转90度
dstImageTransverse := imaging.Transverse(srcImage)
// 旋转90度
dstImageRotate90 := imaging.Rotate90(srcImage)
高斯模糊处理
dstImage := imaging.Blur(srcImage, 0.5)
Blur中的第二个参数控制图片模糊的程度,值越大,模糊程度越高。如下是当第二个参数为0.5和1.5时的模糊效果图:
原图
锐化处理
dstImage := imaging.Sharpen(srcImage, 0.5)
同样,Sharpen的第二个参数用来控制锐化的程度。参数值越大,锐化程度越高,也就是越清晰。如下是锐化值分别为0.5和1.5时的效果对比图:
原图
另外,还有对图片的色度、亮度、对比度的调整。这里就不一一介绍了。该作者还提供了一个更高级的图像处理工具gift,地址是https://github.com/disintegration/gift,有兴趣的可以深入研究一下。
更多项目详情请查看如下链接。
开源项目地址:https://github.com/disintegration/imaging
开源项目作者:Grigory Dryapak
---特别推荐---
特别推荐:一个专注go项目实战、项目中踩坑经验及避坑指南、各种好玩的go工具的公众号,「Go学堂」,专注实用性,非常值得大家关注。点击下方公众号卡片,直接关注。关注送《100个go常见的错误》pdf文档。