图片处理是OSS提供的海量、安全、低成本、高可靠的图片处理服务。原始图片上传到OSS后,您可以通过简单的RESTful接口,在任何时间、任何地点、任何互联网设备上对图片进行处理。
图片处理的详细信息请参见OSS图片处理指南。
图片处理功能
OSS图片处理提供以下功能:
图片处理使用
图片处理使用标准的HTTP GET请求。您可以在URL的QueryString中设置处理参数。
如果图片文件的访问权限为私有读写,必须通过授权才能进行访问。
- 匿名访问
您可以通过如下格式的三级域名匿名访问处理后的图片:
http://<yourBucketName>.<yourEndpoint>/<yourObjectName>?x-oss-process=image/<yourAction>,<yourParamValue>
参数描述bucket存储空间名称endpoint存储空间所在地域的访问域名object图片文件名称image图片处理的保留标志符action对图片做的操作,如缩放、裁剪、旋转等param对图片做的操作所对应的参数
- 基础操作
例如,将图缩略成宽度为100,高度按比例处理:
http://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,w_100
- 自定义样式
使用如下格式的三级域名匿名访问图片处理:
http://<yourBucketName>.<yourEndpoint>/<yourObjectName>?x-oss-process=style/<yourStyleName>
- style:自定义样式的保留标志符。
- yourStyleName:自定义样式名称,即通过控制台自定义样式的规则名称。
例如:
http://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=style/oss-pic-style-w-100
- 级联处理
通过级联处理,可以对一张图片顺序进行多个操作,格式如下:
http://<yourBucketName>.<yourEndpoint>/<yourObjectName>?x-oss-process=image/<yourAction1>,<yourParamValue1>/<yourAction2>,<yourParamValue2>/...
例如:
http://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,w_100/rotate,90
- 支持HTTPS访问
图片服务支持HTTPS访问,例如:
https://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,w_100
- 授权访问
授权访问支持自定义样式、HTTPS和级联处理。
以下代码用于生成带签名的图片处理URL:
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func HandleError(err error) {
fmt.Println("Error:", err)
os.Exit(-1)
}
func main() {
// 创建OSSClient实例。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
HandleError(err)
}
// 获取存储空间。
bucketName := "<yourBucketName>"
bucket, err := client.Bucket(bucketName)
if err != nil {
HandleError(err)
}
ossImageName := "<yourImageName>"
signedURL, err := bucket.SignURL(ossImageName, oss.HTTPGet, 600, oss.Process("image/format,png"))
if err != nil {
HandleError(err)
} else {
fmt.Println(signedURL)
}
}
- SDK访问
对于任意权限的图片文件,都可以直接使用SDK访问和处理。
SDK处理图片文件支持自定义样式、HTTPS和级联处理。
- 基础操作
以下代码展示了图片处理的基础操作:
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func HandleError(err error) {
fmt.Println("Error:", err)
os.Exit(-1)
}
func main() {
// 创建OSSClient实例。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
HandleError(err)
}
// 获取存储空间。
bucketName := "<yourBucketName>"
bucket, err := client.Bucket(bucketName)
if err != nil {
HandleError(err)
}
// 图片处理:缩放。
sourceImageName := "example.png"
targetImageName := "example-resize.png"
style := "image/resize,m_fixed,w_100,h_100"
err = bucket.GetObjectToFile(sourceImageName, targetImageName, oss.Process(style))
if err != nil {
HandleError(err)
}
// 图片处理:裁剪。
targetImageName = "example-crop.png"
style = "image/crop,w_100,h_100,x_100,y_100,r_1"
err = bucket.GetObjectToFile(sourceImageName, targetImageName, oss.Process(style))
if err != nil {
HandleError(err)
}
// 图片处理:旋转。
targetImageName = "example-rotate.png"
style = "image/rotate,90"
err = bucket.GetObjectToFile(sourceImageName, targetImageName, oss.Process(style))
if err != nil {
HandleError(err)
}
// 图片处理:锐化。
targetImageName = "example-sharpen.png"
style = "image/sharpen,100"
err = bucket.GetObjectToFile(sourceImageName, targetImageName, oss.Process(style))
if err != nil {
HandleError(err)
}
// 图片处理:水印。
targetImageName = "example-watermark.png"
style = "image/watermark,text_SGVsbG8g5Zu-54mH5pyN5YqhIQ"
err = bucket.GetObjectToFile(sourceImageName, targetImageName, oss.Process(style))
if err != nil {
HandleError(err)
}
// 图片处理:格式转换。
targetImageName = "example-formatconvert.jpg"
style = "image/format,jpg"
err = bucket.GetObjectToFile(sourceImageName, targetImageName, oss.Process(style))
if err != nil {
HandleError(err)
}
}
- 自定义样式
以下代码用于自定义图片样式:
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func HandleError(err error) {
fmt.Println("Error:", err)
os.Exit(-1)
}
func main() {
// 创建OSSClient实例。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
HandleError(err)
}
// 获取存储空间。
bucketName := "<yourBucketName>"
bucket, err := client.Bucket(bucketName)
if err != nil {
HandleError(err)
}
// 图片处理:自定义样式。
sourceImageName := "example.png"
targetImageName := "example-custom.png"
style := "style/<yourCustomStyleName>"
err = bucket.GetObjectToFile(sourceImageName, targetImageName, oss.Process(style))
if err != nil {
HandleError(err)
}
}
- 级联处理
以下代码用于级联处理图片:
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func HandleError(err error) {
fmt.Println("Error:", err)
os.Exit(-1)
}
func main() {
// 创建OSSClient实例。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
HandleError(err)
}
// 获取存储空间。
bucketName := "<yourBucketName>"
bucket, err := client.Bucket(bucketName)
if err != nil {
HandleError(err)
}
// 图片处理:自定义样式。
sourceImageName := "example.png"
targetImageName := "example-cascade.png"
style := "image/resize,m_fixed,w_100,h_100/rotate,90"
err = bucket.GetObjectToFile(sourceImageName, targetImageName, oss.Process(style))
if err != nil {
HandleError(err)
}
}
图片处理持久化
以下代码用于图片处理持久化:
package main
import (
"fmt"
"os"
"encoding/base64"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func HandleError(err error) {
fmt.Println("Error:", err)
os.Exit(-1)
}
func main() {
// 创建OSSClient实例。
client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
if err != nil {
HandleError(err)
}
// 获取存储空间。
bucketName := "<yourBucketName>"
bucket, err := client.Bucket(bucketName)
if err != nil {
HandleError(err)
}
// 图片处理持久化:缩放。目标图片默认会存放到相同的bucket中。
sourceImageName := "example.png"
targetImageName := "example-resize.png"
style := "image/resize,m_fixed,w_100,h_100"
process := fmt.Sprintf("%s|sys/saveas,o_%v", style, base64.URLEncoding.EncodeToString([]byte(targetImageName)))
result, err := bucket.ProcessObject(sourceImageName, process)
if err != nil {
HandleError(err)
} else {
fmt.Println(result)
}
// 图片处理持久化:缩放。将目标图片存放到不同的bucket中。
targetBucketName := "<yourTargetBucketName>"
targetImageName = "example-crop-different-bucket.png"
style = "image/resize,m_fixed,w_100,h_100"
process = fmt.Sprintf("%s|sys/saveas,o_%v,b_%v", style, base64.URLEncoding.EncodeToString([]byte(targetImageName)), base64.URLEncoding.EncodeToString([]byte(targetBucketName)))
result, err = bucket.ProcessObject(sourceImageName, process)
if err != nil {
HandleError(err)
} else {
fmt.Println(result)
}
// 图片处理持久化:裁剪。
targetImageName = "example-crop.png"
style = "image/crop,w_100,h_100,x_100,y_100,r_1"
process = fmt.Sprintf("%s|sys/saveas,o_%v", style, base64.URLEncoding.EncodeToString([]byte(targetImageName)))
result, err = bucket.ProcessObject(sourceImageName, process)
if err != nil {
HandleError(err)
} else {
fmt.Println(result)
}
// 图片处理持久化:旋转。
targetImageName = "example-rotate.png"
style = "image/rotate,90"
process = fmt.Sprintf("%s|sys/saveas,o_%v", style, base64.URLEncoding.EncodeToString([]byte(targetImageName)))
result, err = bucket.ProcessObject(sourceImageName, process)
if err != nil {
HandleError(err)
} else {
fmt.Println(result)
}
// 图片处理持久化:锐化。
targetImageName = "example-sharpen.png"
style = "image/sharpen,100"
process = fmt.Sprintf("%s|sys/saveas,o_%v", style, base64.URLEncoding.EncodeToString([]byte(targetImageName)))
result, err = bucket.ProcessObject(sourceImageName, process)
if err != nil {
HandleError(err)
} else {
fmt.Println(result)
}
// 图片处理持久化:水印。
targetImageName = "example-watermark.png"
style = "image/watermark,text_SGVsbG8g5Zu-54mH5pyN5YqhIQ"
process = fmt.Sprintf("%s|sys/saveas,o_%v", style, base64.URLEncoding.EncodeToString([]byte(targetImageName)))
result, err = bucket.ProcessObject(sourceImageName, process)
if err != nil {
HandleError(err)
} else {
fmt.Println(result)
}
// 图片处理持久化:格式转换。
targetImageName = "example-formatconvert.jpg"
style = "image/format,jpg"
process = fmt.Sprintf("%s|sys/saveas,o_%v", style, base64.URLEncoding.EncodeToString([]byte(targetImageName)))
result, err = bucket.ProcessObject(sourceImageName, process)
if err != nil {
HandleError(err)
} else {
fmt.Println(result)
}
}
图片处理工具
您可以通过可视化图片处理工具ImageStyleViewer直观地看到OSS图片处理结果。