Golang修改图片JPEGjpg的大小和质量
package fyimage
import (
"bytes"
"/gogf/gf/os/glog"
"/nfnt/resize"
"image"
"image/jpeg"
)
// 默认最大高度
const MaxHeight uint = 1080
// 当文件是JPEG格式时,对文件进行压缩。
// 压缩的方式主要是借助原生的image/jpeg 修改图片的质量和像素的大小。
// 该方案并不是最优的方案,通过客户端首次进行压缩会大大减少服务端的压力
// 文件小于 1MB 或者不是jpeg格式,不再压缩
func CompressImageResource(data []byte) []byte {
if len(data) < 1024*1024 {
return data
}
img, _, err := image.Decode(bytes.NewReader(data))
if err != nil {
glog.Warningf("jpeg compress failed,err:%v",err)
return data
}
// 修改图片的大小
m := resize.Resize(0, MaxHeight, img, resize.Lanczos3)
buf := bytes.Buffer{}
// 修改图片的质量
err = jpeg.Encode(&buf, m, &jpeg.Options{Quality: 60})
if err != nil {
glog.Warningf("jpeg compress failed,err:%v",err)
return data
}
if buf.Len() > len(data) {
return data
}
return buf.Bytes()
}