Imaging - Go 图片处理
imaging 库提供了简单易用的图片处理功能,支持缩放、裁剪、旋转、滤镜等操作。掌握 imaging 是开发图片处理应用的基础。
基础操作
📝 加载和保存
package main
import (
"image"
"github.com/disintegration/imaging"
)
func main() {
// 加载图片
img, err := imaging.Open("input.jpg")
if err != nil {
panic(err)
}
// 保存为不同格式
imaging.Save(img, "output.png")
imaging.Save(img, "output.jpg")
// 从 reader 加载
var r io.Reader
img, _ = imaging.Decode(r)
// 保存到 writer
var w io.Writer
imaging.Encode(w, img, imaging.JPEG)
}
变换操作
📝 缩放和裁剪
package main
import "github.com/disintegration/imaging"
func main() {
img, _ := imaging.Open("input.jpg")
// 缩放到固定尺寸
resized := imaging.Resize(img, 200, 200, imaging.Lanczos)
// 缩放到高度固定
resized = imaging.Resize(img, 0, 100, imaging.Lanczos)
// 缩放到宽度固定
resized = imaging.Resize(img, 100, 0, imaging.Lanczos)
// 填充到固定尺寸 (保持比例)
thumbnail := imaging.Fill(img, 100, 100, imaging.Center, imaging.CatmullRom)
// 缩放到适应尺寸
fitted := imaging.Fit(img, 200, 200, imaging.Lanczos)
// 裁剪
cropped := imaging.Crop(img, image.Rect(0, 0, 100, 100))
cropped = imaging.CropCenter(img, 100, 100)
// 旋转
rotated := imaging.Rotate(img, 90)
// 翻转
flippedH := imaging.FlipH(img) // 水平
flippedV := imaging.FlipV(img) // 垂直
imaging.Save(thumbnail, "thumbnail.jpg")
}
效果处理
📝 滤镜和效果
package main
import "github.com/disintegration/imaging"
func main() {
img, _ := imaging.Open("input.jpg")
// 模糊
blurred := imaging.Blur(img, 5)
// 锐化
sharpened := imaging.Sharpen(img, 2)
// 灰度
grayscale := imaging.Grayscale(img)
// 调整亮度
brighter := imaging.AdjustBrightness(img, 20)
darker := imaging.AdjustBrightness(img, -20)
// 调整对比度
contrasted := imaging.AdjustContrast(img, 20)
// 调整伽马
gamma := imaging.AdjustGamma(img, 1.5)
// 调整色相
hue := imaging.AdjustHue(img, 30)
// 调整饱和度
saturated := imaging.AdjustSaturation(img, 20)
imaging.Save(grayscale, "grayscale.jpg")
}
图像合成
📝 叠加和合并
package main
import (
"image/color"
"github.com/disintegration/imaging"
)
func main() {
bg, _ := imaging.Open("background.jpg")
overlay, _ := imaging.Open("overlay.png")
// 叠加图像
result := imaging.Overlay(bg, overlay, 10, 10)
// 叠加文字
result = imaging.Overlay(
result,
imaging.NewTextImage("Hello World", 24),
10, 10,
)
// 水平拼接
img1, _ := imaging.Open("img1.jpg")
img2, _ := imaging.Open("img2.jpg")
combined := imaging.ConcatHorizontal(img1, img2)
// 垂直拼接
combined = imaging.ConcatVertical(img1, img2)
// 创建纯色图像
solid := imaging.New(200, 200, color.RGBA{255, 0, 0, 255})
imaging.Save(result, "result.jpg")
}