Golang图像转换示例与实践
Golang图像转换示例与实践 Golang:您能提供一些图像变换的示例吗
3 回复
尝试使用 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则提供了更底层的控制。根据具体需求选择合适的工具。

