标签:int 公司 相关 https golang source amp 替换 图片
func compressImageResource(data []byte) []byte {
img, _, err := image.Decode(bytes.NewReader(data))
if err != nil {
return data
}
buf := bytes.Buffer{}
err = jpeg.Encode(&buf, img, &jpeg.Options{Quality: 40})
if err != nil {
return data
}
if buf.Len() > len(data) {
return data
}
return buf.Bytes()
}
//下面这两个库都比较偏重于转换图片大小,在保持宽高不变的情况下,压缩比例很一般
https://github.com/discord/lilliput //这个库是一家海外公司基于C语言的一个开源图片处理库,但是封装的很好,不需要安装额外依赖
https://github.com/disintegration/imaging
//下面这个库可以对PNG图片进行较大的压缩,可惜压缩比例过大时会严重失真
https://github.com/foobaz/lossypng/
func compressImageResource(data []byte) []byte {
imgSrc, _, err := image.Decode(bytes.NewReader(data))
if err != nil {
return data
}
newImg := image.NewRGBA(imgSrc.Bounds())
draw.Draw(newImg, newImg.Bounds(), &image.Uniform{C: color.White}, image.Point{}, draw.Src)
draw.Draw(newImg, newImg.Bounds(), imgSrc, imgSrc.Bounds().Min, draw.Over)
buf := bytes.Buffer{}
err = jpeg.Encode(&buf, newImg, &jpeg.Options{Quality: 40})
if err != nil {
return data
}
if buf.Len() > len(data) {
return data
}
return buf.Bytes()
}
https://github.com/unidoc/unipdf
。一开始使用这个库将生成后的PDF压缩的,可以将一个200M的PDF(里面都是图片)直接压缩到7M左右。可惜的是这个库商用需要购买商业版权,所以最后只能采取了导出前压缩图片的做法。https://github.com/lianggx6/unipdf
。然后再在go.mod文件中将依赖替换即可。大家如果有个人开发实践需要的可以直接这样拿来用,商用务必购买版权。replace (
github.com/unidoc/unipdf/v3 => github.com/lianggx6/unipdf v0.0.0-20200409043947-1c871b2c4951
)
标签:int 公司 相关 https golang source amp 替换 图片
原文地址:https://www.cnblogs.com/lianggx6/p/12684885.html