引言

基础知识

图片转码是什么?

Golang中处理图片的常用库

  • image/png:处理PNG图片
  • image/jpeg:处理JPEG图片
  • github.com/nfnt/resize:图片缩放和裁剪

基本操作

读取PNG文件

package main

import (
	"image"
	"image/color"
	"image/png"
	"os"
)

func main() {
	file, err := os.Open("input.png")
	if err != nil {
		panic(err)
	}
	defer file.Close()

	img, _, err := image.Decode(file)
	if err != nil {
		panic(err)
	}

	// 处理图片
	// ...

	// 保存图片
	err = png.Encode(os.Stdout, img)
	if err != nil {
		panic(err)
	}
}

保存PNG文件

图片裁剪和缩放

package main

import (
	"image"
	"image/color"
	"image/png"
	"os"

	"github.com/nfnt/resize"
)

func main() {
	file, err := os.Open("input.png")
	if err != nil {
		panic(err)
	}
	defer file.Close()

	img, _, err := image.Decode(file)
	if err != nil {
		panic(err)
	}

	// 裁剪图片
	// 裁剪区域为(x, y, width, height)
	cropRect := image.Rect(100, 100, 400, 400)
	cropped := img.Crop(cropRect)

	// 缩放图片
	newSize := image.Rect(100, 100, 200, 200)
	resized := resize.Resize(newSize, cropped)

	// 保存裁剪和缩放后的图片
	err = png.Encode(os.Stdout, resized)
	if err != nil {
		panic(err)
	}
}

高级功能

使用 image/color 处理颜色

package main

import (
	"image"
	"image/color"
	"image/png"
	"os"
)

func main() {
	file, err := os.Open("input.png")
	if err != nil {
		panic(err)
	}
	defer file.Close()

	img, _, err := image.Decode(file)
	if err != nil {
		panic(err)
	}

	// 获取图片的像素
	for y := 0; y < img.Bounds().Dy(); y++ {
		for x := 0; x < img.Bounds().Dx(); x++ {
			r, g, b, a := img.At(x, y).RGBA()
			newR, newG, newB := r+50, g+50, b+50 // 增加亮度
			img.Set(x, y, color.RGBA{R: uint8(newR), G: uint8(newG), B: uint8(newB), A: uint8(a)})
		}
	}

	// 保存处理后的图片
	err = png.Encode(os.Stdout, img)
	if err != nil {
		panic(err)
	}
}

优化PNG性能

”`go package main

import (

"image"
"image/png"
"os"

)

func main() {

file, err := os.Open("input.png")
if err != nil {
	panic(err)
}
defer file.Close()

img, _, err := image.Decode(file)
if err != nil {
	panic(err)
}

// 保存