依赖第三方库 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)