Golang图片操作:如何进行图片的镜像,旋转和翻转

1. 概述

Golang作为一门强类型的语言,对于图片的处理提供了非常方便的方法和库。本文介绍在Golang中,如何进行图片的镜像,旋转和翻转。

2. 图片基本操作

2.1 图片加载

在Golang中,可以使用image库来加载各种格式的图片,常用的函数有:png.Decode, jpeg.Decode, gif.Decode等函数。

import "image/png"

import "os"

func loadImage() {

file, err := os.Open("example.png")

if err != nil {

panic(err)

}

defer file.Close()

img, err := png.Decode(file)

if err != nil {

panic(err)

}

}

2.2 图片保存

保存图片可以使用image库中的png.Encode, jpeg.Encode, gif.Encode等函数。

import "image/png"

import "os"

func saveImage(img image.Image) {

file, err := os.Create("result.png")

if err != nil {

panic(err)

}

defer file.Close()

err = png.Encode(file, img)

if err != nil {

panic(err)

}

}

3. 图片镜像

3.1 镜像横向翻转

要将图片横向翻转,可以遍历图片的每个像素点,并将其镜像对称,可以使用以下代码:

import (

"image"

"image/color"

)

func mirrorX(img image.Image) image.Image {

bounds := img.Bounds()

width, height := bounds.Max.X, bounds.Max.Y

newImg := image.NewRGBA(image.Rect(0, 0, width, height))

// 遍历像素点并镜像横向翻转

for y := 0; y < height; y++ {

for x := 0; x < width; x++ {

newX := width - x - 1

c := img.At(x, y)

newImg.Set(newX, y, c)

}

}

return newImg

}

3.2 镜像纵向翻转

要将图片纵向翻转,可以遍历图片的每个像素点,并将其镜像对称,可以使用以下代码:

import (

"image"

"image/color"

)

func mirrorY(img image.Image) image.Image {

bounds := img.Bounds()

width, height := bounds.Max.X, bounds.Max.Y

newImg := image.NewRGBA(image.Rect(0, 0, width, height))

// 遍历像素点并镜像纵向翻转

for y := 0; y < height; y++ {

newY := height - y - 1

for x := 0; x < width; x++ {

c := img.At(x, y)

newImg.Set(x, newY, c)

}

}

return newImg

}

4. 图片旋转

4.1 旋转90度

要将图片旋转90度,可以使用以下代码:

import (

"image"

"image/color"

)

func rotate90(img image.Image) image.Image {

bounds := img.Bounds()

width, height := bounds.Max.X, bounds.Max.Y

newImg := image.NewRGBA(image.Rect(0, 0, height, width))

// 遍历像素点并旋转90度

for y := 0; y < height; y++ {

for x := 0; x < width; x++ {

newY := x

newX := height - y - 1

c := img.At(x, y)

newImg.Set(newX, newY, c)

}

}

return newImg

}

4.2 旋转180度

要将图片旋转180度,可以使用以下代码:

import (

"image"

"image/color"

)

func rotate180(img image.Image) image.Image {

bounds := img.Bounds()

width, height := bounds.Max.X, bounds.Max.Y

newImg := image.NewRGBA(image.Rect(0, 0, width, height))

// 遍历像素点并旋转180度

for y := 0; y < height; y++ {

for x := 0; x < width; x++ {

newX := width - x - 1

newY := height - y - 1

c := img.At(x, y)

newImg.Set(newX, newY, c)

}

}

return newImg

}

4.3 旋转270度

要将图片旋转270度,可以使用以下代码:

import (

"image"

"image/color"

)

func rotate270(img image.Image) image.Image {

bounds := img.Bounds()

width, height := bounds.Max.X, bounds.Max.Y

newImg := image.NewRGBA(image.Rect(0, 0, height, width))

// 遍历像素点并旋转90度

for y := 0; y < height; y++ {

for x := 0; x < width; x++ {

newY := width - x - 1

newX := y

c := img.At(x, y)

newImg.Set(newX, newY, c)

}

}

return newImg

}

5. 总结

本文介绍了Golang中图片的基本操作,包括图片的加载、保存,以及如何对图片进行镜像、旋转等操作。这些操作可以让我们更好地处理图片,适配不同的应用场景。

后端开发标签