Golang图像转换示例与实践

Golang图像转换示例与实践 Golang:您能提供一些图像变换的示例吗

3 回复

什么样的转换?针对哪些类型的图像?

更多关于Golang图像转换示例与实践的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


尝试使用 libvips

Code Review 我正在使用 libvips 处理图像。试试 https://github.com/davidbyttow/govips

在Go语言中,可以使用标准库image和第三方库如github.com/disintegration/imaging进行图像变换。以下是一些常见图像变换的示例:

1. 调整图像尺寸

package main

import (
    "github.com/disintegration/imaging"
    "image"
    "log"
)

func main() {
    src, err := imaging.Open("input.jpg")
    if err != nil {
        log.Fatal(err)
    }

    // 调整到指定尺寸
    dst := imaging.Resize(src, 800, 600, imaging.Lanczos)
    
    err = imaging.Save(dst, "output_resized.jpg")
    if err != nil {
        log.Fatal(err)
    }
}

2. 图像裁剪

func cropImage() {
    src, _ := imaging.Open("input.jpg")
    
    // 从(100,100)位置裁剪300x200的区域
    dst := imaging.Crop(src, image.Rect(100, 100, 400, 300))
    
    imaging.Save(dst, "output_cropped.jpg")
}

3. 图像旋转

func rotateImage() {
    src, _ := imaging.Open("input.jpg")
    
    // 顺时针旋转90度
    dst := imaging.Rotate90(src)
    
    imaging.Save(dst, "output_rotated.jpg")
}

4. 图像翻转

func flipImage() {
    src, _ := imaging.Open("input.jpg")
    
    // 水平翻转
    dst := imaging.FlipH(src)
    
    imaging.Save(dst, "output_flipped.jpg")
}

5. 调整亮度和对比度

func adjustImage() {
    src, _ := imaging.Open("input.jpg")
    
    // 亮度增加20%,对比度增加30%
    dst := imaging.AdjustBrightness(src, 20)
    dst = imaging.AdjustContrast(dst, 30)
    
    imaging.Save(dst, "output_adjusted.jpg")
}

6. 图像模糊

func blurImage() {
    src, _ := imaging.Open("input.jpg")
    
    // 高斯模糊,半径2.0
    dst := imaging.Blur(src, 2.0)
    
    imaging.Save(dst, "output_blurred.jpg")
}

7. 格式转换

func convertFormat() {
    src, _ := imaging.Open("input.jpg")
    
    // 转换为PNG格式
    err := imaging.Save(src, "output.png")
    if err != nil {
        log.Fatal(err)
    }
}

8. 使用标准库进行基本变换

package main

import (
    "image"
    "image/jpeg"
    "os"
)

func basicTransform() {
    file, _ := os.Open("input.jpg")
    defer file.Close()
    
    img, _ := jpeg.Decode(file)
    
    // 创建新图像
    bounds := img.Bounds()
    newImg := image.NewRGBA(image.Rect(0, 0, bounds.Dx()/2, bounds.Dy()/2))
    
    // 简单的像素操作示例
    for y := 0; y < newImg.Bounds().Dy(); y++ {
        for x := 0; x < newImg.Bounds().Dx(); x++ {
            newImg.Set(x, y, img.At(x*2, y*2))
        }
    }
    
    out, _ := os.Create("output_basic.jpg")
    defer out.Close()
    
    jpeg.Encode(out, newImg, nil)
}

安装依赖:

go get -u github.com/disintegration/imaging

这些示例涵盖了常见的图像变换操作。imaging库提供了更简洁的API,而标准库image则提供了更底层的控制。根据具体需求选择合适的工具。

回到顶部