go图片压缩

依赖第三方库 https://github.com/nfnt/resize
依赖go语言的图片处理库image https://golang.org/pkg/image/#Alpha.SubImage
https://wizardforcel.gitbooks.io/golang-stdlib-ref/content/68.html#Image

安装

$ go get github.com/nfnt/resize

导入

import "github.com/nfnt/resize"

使用

例子

package main

import (
	"github.com/nfnt/resize"
	"image/jpeg"
	"log"
	"os"
)

func main() {
	// open "test.jpg"
	file, err := os.Open("test.jpg")
	if err != nil {
		log.Fatal(err)
	}

	// decode jpeg into image.Image
	img, err := jpeg.Decode(file)
	if err != nil {
		log.Fatal(err)
	}
	file.Close()

	// resize to width 1000 using Lanczos resampling
	// and preserve aspect ratio
	m := resize.Resize(1000, 0, img, resize.Lanczos3)

	out, err := os.Create("test_resized.jpg")
	if err != nil {
		log.Fatal(err)
	}
	defer out.Close()

	// write new image to file
	jpeg.Encode(out, m, nil)
}

使用记录

1. 需要image库支持图片的解码和编码

2. jpeg、jpg、png格式是支持的,其他图片格式没用过

3. 压缩后的图片会被写入一个io.writer,有两种方法:

1)在本地create一个图片文件,将压缩后的图片写入(示例中的方法)
2)声明一个io.writer的实例来承接压缩后的图片数据

var shrinkImage &bytes.Buffer{}
shrinkImage.Reset()

4. 当时应用的时候需要将io.writer中的压缩图片数据作为io.reader上传,bytes.Buffer也是io.reader的实现,直接传入

shrinkUrl, err := util.UploadInner(domain, true, shrinkRealFileName, int64(shrinkFileSize), shrinkFileWriter)
原文地址:https://www.cnblogs.com/huhu555/p/14453383.html