Go语言中实现图片缩放需导入image、jpeg、png及第三方库github.com/nfnt/resize,先读取图片文件并根据扩展名解码为image.Image对象,再使用resize.Resize()函数按指定尺寸或比例缩放,支持Lanczos3等插值算法,最后根据输出格式选择jpeg.Encode或png.Encode将结果写入文件,适用于Web服务中的头像生成与批量处理场景。
在Go语言中实现图片缩放功能,主要依赖于标准库和第三方图像处理库。通过 image、image/jpeg、image/png 等标准包读取和编码图片,再结合如 github.com/nfnt/resize 这样的流行库进行高质量缩放处理。整个过程简洁高效,适合Web服务中的图片上传处理场景。
导入必要的包
要实现图片缩放,需引入Go的标准图像包以及第三方缩放库。使用 go get 安装 resize 库:
go get github.com/nfnt/resize然后在代码中导入以下包:
import ("image"
"image/jpeg"
"image/png"
"os"
"path/filepath"
"github.com/nfnt/resize"
)
读取原始图片文件
根据文件扩展名判断图片类型,并使用对应解码器加载图像。支持常见格式如 JPEG 和 PNG:
file, err := os.Open("input.jpg")if err != nil {
log.Fatal(err)
}
defer file.Close()
var img image.Image
ext := filepath.Ext("input.jpg")
switch ext {
case ".jpg", ".jpeg":
img, err = jpeg.Decode(file)
case ".png":
img, err = png.Decode(file)
default:
log.Fatal("不支持的图片格式")
}
if err != nil {
log.Fatal(err)
}
使用 resize 库进行缩放
nfnt/resize 提供了简单的函数来调整图像尺寸。你可以指定目标宽度和高度,或保持比例缩放。常用方法如下:
// 按指定宽高缩放(强制)resized := resize.Resize(800, 600, img, resize.Lanczos3)
// 按比例缩放:例如缩小为原图50%
width := uint(img.Bounds().Dx() * 5 / 10)
height := uint(img.Bounds().Dy() * 5 / 10)
resized = resize.Resize(width, height, img, resize.Bilinear)
其中插值算法可选:NearestNeighbor(最快但质量低)、Bilinear、Bicubic、Lanczos
3(质量最高)。
保存缩放后的图片
将处理后的图像写入新文件,注意根据目标格式选择编码方式:
outFile, err := os.Create("output.jpg")if err != nil {
log.Fatal(err)
}
defer outFile.Close()
// 使用 JPEG 编码,质量设为90
jpeg.Encode(outFile, resized, &jpeg.Options{Quality: 90})
若输出为PNG,则使用 png.Encode(outFile, resized) 即可。
基本上就这些。整个流程清晰:打开文件 → 解码图像 → 缩放处理 → 编码保存。适用于批量处理、用户头像生成等场景。不复杂但容易忽略格式判断和资源释放。








![Go 中切片操作 s[i:j] 的边界理](http://public-space.oss-cn-hongkong.aliyucs.com/gz/047.jpg)