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中图片的基本操作,包括图片的加载、保存,以及如何对图片进行镜像、旋转等操作。这些操作可以让我们更好地处理图片,适配不同的应用场景。