阿里云oss图片压缩
# 阿里云oss图片压缩
本文讲述阿里云oss上存储的文件如何在URL上添加特定的处理参数实现图片的压缩,以减少带宽,从而减少成本支出。除了压缩,还支持其他的图片处理操作,详见官网。
# 一. 阿里云的oss图片的几种压缩模式
官网:https://help.aliyun.com/document_detail/44688.html
压缩参数中的w和h限定了一个矩形区域。
提供了如下几种压缩模式:
- lfit
在矩形区域内的最大图片(区域内会有局部地方没被填充),且等比缩放。 可得出:因为是等比缩放,所以最终生成的图片的分辨率和压缩参数的w、h并不完全相等。 - mfit
在矩形区域外的最小图片(图片会伸到矩形区域外),且等比缩放。 可得出:因为是等比缩放,所以最终生成的图片的分辨率和压缩参数的w、h并不完全相等。 - fill
在mfit模式的基础上,将伸出的图片内容以对称的方式砍掉。 可得出:图片的内容为等比缩放。但是最终生成的图片的分辨率和原图的分辨率并非等比例。 - pad
在lfit模式的基础上,移动图片到对称位置,然后多余部分用白色填充,使得最终的图片充满整个矩形区域。 可得出:图片的内容为等比缩放。但是最终生成的图片的分辨率和原图的分辨率并非等比例。 - fixed
通过缩放,让图片大小与矩形区域完全吻合。 可得出:该模式下,生成的图片会变形。
阿里云提供了
样式
的概念,相当于给一组压缩参数定义一个别名,方便记忆。具体详见官网 (opens new window)。
# 二. 总结
图片变形 lfit、mfit、fill、pad都不会发生变形。 fixed会发生变形。
图片完整性 lfit、mfit、pad、fixed:图片是完整的 fill: 图片会被裁剪
推荐的模式 因为fixed会引起变形、fill会使得图片不完整。所以推荐如下模式:lfit、mfit、pad
通过压缩参数处理后,分辨率只会变小而不会变大 通过实际测试得出的结论,官网并没有提及。 比如源图片为100100,压缩参数为w_200、h_200,生成的图片仍旧是100100。
# 腾讯云的图片压缩
腾讯云也提供了类似的图片压缩,功能p类似,只是参数规则的命名不同而已。
# 公有桶
阿里云和腾讯云定义规则的对比如下(以公有桶为例):
阿里云 | 腾讯云 |
---|---|
?x-oss-process=image/resize,m_lfit,h_132,w_132 | ?imageMogr2/thumbnail/132x132 |
?x-oss-process=image/interlace,1/resize,m_lfit,w_1920,h_1920/format,webp | ?imageMogr2/thumbnail/1920x1920/format/webp |
?x-oss-process=image/interlace,1/resize,m_lfit,w_320,h_180/quality,q_90 | ?imageMogr2/interlace/1/thumbnail/320x180/quality/90 |
# 私有桶
公有桶下的图片压缩参数直接拼接到现有的图片url后面,作为参数即可。但是对于私有桶,需要将图片压缩参数作为签名的一部分,具体详见官网。
示例代码如下:
opt := &cos.PresignedURLOptions{
Query: &url.Values{},
Header: &http.Header{},
}
opt.Query.Add("imageMogr2/thumbnail/132x132", "")
presignedURL, err := client.Object.GetPresignedURL(context.TODO(), http.MethodGet, filePath, secretId, secretKey, time.Hour*6, opt)
# 样式
腾讯云也提供了阿里云样式的功能,详见官网 (opens new window)
上次更新: 2022-01-11 10:48:39