「Go工具箱」推荐一个简单、实用的图像处理工具:imaging
大家好,我是渔夫子。本号新推出「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文档。
相关文章
- 24.Go语言-Gin参数获取总结
- 【Go】sync.atomic
- Go 面向对象编程篇(四):类属性和成员方法的可见性
- 第34篇:go语言编写"中转注入"让古老的注入工具复活
- 一个Go语言实现的流量回放工具
- golang go-sql-driver gorm 数据库报错 bad connection
- 国产ETL etl-engine 可视化 轻量级 跨平台 支持动态解析GO语言脚本
- 「Go工具箱」推荐一个Google开发的将结构体快速拼接成url查询参数的工具
- 「Go工具箱」一个基于双向链表实现的LRU缓存工具
- Go-并发编程-goroutine 和 channel(一)
- Go-包管理-go mod(一)
- 安装和配置Go-RESTful框架
- Go语言类型分支(switch判断空接口中变量的类型)
- 使用Go语言来操作Oracle数据库(go语言oracle)
- Go工具链之GoTEST的用法详解编程语言
- Go语言分布式id生成器
- 精通Go语言开发Redis应用(go语言redis开发)
- 轻松搞定Go语言连接MySQL(go连接mysql)
- 简易教程:如何在 Linux 上安装 GO 语言(go语言安装linux)
- 部署Linux下快速部署Go环境(go环境linux)
- 前行不止Go语言监听Oracle日志(go监听oracle日志)
- 快跟上趋势,GO DB ORACLE(go db oracle)
- 语句使用Oracle中的Go语句来简化编程(oracle中go)