← Gateway | gg 图形库 →

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")
}

📖 延伸阅读