Golang对图片的大小及质量压缩(PNG及JPEGD等)
package main
import (
"bytes"
"errors"
"github.com/nfnt/resize"
"image"
"image/jpeg"
"image/png"
)
func Compress(buf []byte) ([]byte, error) {
var width uint = 200
var height uint = 200
//文件压缩
decodeBuf, layout, err := image.Decode(bytes.NewReader(buf))
if err != nil {
return nil, err
}
// 修改图片的大小
set := resize.Resize(width, height, decodeBuf, resize.Lanczos3)
NewBuf := bytes.Buffer{}
switch layout {
case "png":
err = png.Encode(&NewBuf, set)
case "jpeg", "jpg":
err = jpeg.Encode(&NewBuf, set, &jpeg.Options{Quality: 80})
default:
return nil, errors.New("该图片格式不支持压缩")
}
if err != nil {
return nil, err
}
if NewBuf.Len() < len(buf) {
buf = NewBuf.Bytes()
}
return buf, nil
}