1 借助 nfnt/resize 修改图片的尺寸
2 借助 原生的 image/jpeg 修改质量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | package fyimage import ( "bytes" "github.com/gogf/gf/os/glog" "github.com/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() } |