golang 图片旋转

发布时间:2024-07-04 23:49:49

图片旋转是一个常见的图像处理任务,对于一些需要改变方向或者调整角度的图像来说非常有用。而在 Golang 中,我们可以使用 image 包中提供的功能来实现图片的旋转。本文将介绍如何使用 Golang 来实现图片旋转。

准备工作

在开始之前,我们首先需要安装 Golang 环境。你可以去官网下载最新版本的 Golang 并按照提示进行安装。安装完成后,你可以通过输入 go version 命令来验证是否安装成功。

加载图片

在 Golang 中,我们可以使用 image 包中的 Decode 函数来加载图片。这个函数可以接受一个 io.Reader 接口类型的参数,我们可以使用 os.Open 函数返回的文件来创建一个 io.Reader。具体代码如下:

package main import ( "fmt" "image" "io/ioutil" "os" ) func main() { file, err := os.Open("input.jpg") if err != nil { panic(err) } defer file.Close() img, _, err := image.Decode(file) if err != nil { panic(err) } // ... }

旋转图片

我们可以使用 Rotate 函数来对图片进行旋转操作。这个函数接受一个图片对象和一个旋转角度作为参数,并返回一个新的旋转后的图片对象。具体代码如下:

func rotateImage(img image.Image, angle float64) image.Image { // 计算旋转后的图片大小 bounds := img.Bounds() width, height := bounds.Max.X, bounds.Max.Y destImg := image.NewRGBA(image.Rect(0, 0, width, height)) // 遍历每个像素点,将旋转前的像素点映射到旋转后的像素坐标上 for x := 0; x < width; x++ { for y := 0; y < height; y++ { srcPixel := img.At(x, y) // 根据旋转公式计算旋转后的坐标 newX := int(float64(x)*math.Cos(angle) - float64(y)*math.Sin(angle)) newY := int(float64(x)*math.Sin(angle) + float64(y)*math.Cos(angle)) destImg.Set(newX, newY, srcPixel) } } return destImg }

保存旋转后的图片

在完成图片旋转之后,我们还需要将旋转后的图片保存到硬盘上。可以使用 png.Encode 函数将图片保存为 PNG 格式。具体代码如下:

func saveImage(img image.Image, filename string) error { file, err := os.Create(filename) if err != nil { return err } defer file.Close() err = png.Encode(file, img) if err != nil { return err } return nil }

至此,我们已经完成了图片旋转的实现。你可以通过调用上面的函数来实现你自己的图片旋转功能。希望本文对你有所帮助!

相关推荐