zl程序教程

您现在的位置是:首页 >  后端

当前栏目

「Go工具箱」推荐一个简单、实用的图像处理工具:imaging

Go工具图像处理 简单 一个 推荐 实用 工具箱
2023-06-13 09:16:47 时间

大家好,我是渔夫子。本号新推出「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文档。