图片处理是OSS提供的海量、安全、低成本、高可靠的图片处理服务。原始图片上传到OSS后,您可以通过简单的RESTful接口,在任何时间、任何地点、任何互联网设备上对图片进行处理。
关于图片处理支持的参数,请参见处理参数。
注意事项
本文以华东1(杭州)外网Endpoint为例。如果您希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint。关于OSS支持的Region与Endpoint的对应关系,请参见OSS地域和访问域名。
本文以OSS域名新建OSSClient为例。如果您希望通过自定义域名、STS等方式新建OSSClient,请参见初始化。
使用图片处理参数处理图片
使用单个图片处理参数处理图片并保存为本地图片
# -*- coding: utf-8 -*- import os import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider # 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。 endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # 填写Endpoint对应的Region信息,例如cn-hangzhou。注意,v4签名下,必须填写该参数 region = "cn-hangzhou" # examplebucket填写存储空间名称。 bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region) # yourObjectName填写目标图片名称。若图片不在Bucket根目录,需携带文件访问路径,例如example/example.jpg。 key = 'yourObjectName' # LocalFileName填写处理后的图片名称。 new_pic = 'LocalFileName' # 若目标图片不在指定Bucket内,需上传图片到目标Bucket。 # bucket.put_object_from_file(key, 'yourLocalFile') # 将图片缩放为固定宽高100 px后保存到本地。 style = 'image/resize,m_fixed,w_100,h_100' bucket.get_object_to_file(key, new_pic, process=style) # 图片处理完成后,若Bucket内的原图不再需要,可以删除原图。 # bucket.delete_object(key) # 若处理后的图片不再需要,可以删除处理后的图片。 # os.remove(new_pic)
使用多个图片处理参数处理图片并保存为本地图片
使用多个图片处理参数处理图片时,多个参数之间以正斜线(/)分隔。
# -*- coding: utf-8 -*- import os import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider # 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。 endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # 填写Endpoint对应的Region信息,例如cn-hangzhou。注意,v4签名下,必须填写该参数 region = "cn-hangzhou" # examplebucket填写存储空间名称。 bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region) # 指定原图所在的Bucket名称,例如examplebucket。 bucket_name = 'examplebucket' # 指定原图名称。如果图片不在Bucket根目录,需携带图片完整路径,例如exampledir/example.jpg。 key = 'exampledir/example.jpg' # 指定处理后的图片名称。 new_pic = 'exampledir/newexample.jpg' # 如果图片不在指定Bucket内,需将本地路径下的图片上传到指定Bucket。 # bucket.put_object_from_file(key, 'D:\\localpath\\example.jpg') # 将图片缩放为固定宽高100 px后,再旋转90°,之后保存至本地。 style = 'image/resize,m_fixed,w_100,h_100/rotate,90' bucket.get_object_to_file(key, new_pic, process=style) # 图片处理完成后,若Bucket内的原图不再需要,可以删除原图。 # bucket.delete_object(key) # 如果处理后的图片不再需要,可以删除处理后的图片。 # os.remove(new_pic)
使用图片样式处理图片
您可以将多个图片处理参数封装在一个样式中,之后使用样式批量处理图片。更多信息,请参见图片样式。以下代码展示了使用图片样式处理图片:
# -*- coding: utf-8 -*-
import os
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# 填写Endpoint对应的Region信息,例如cn-hangzhou。注意,v4签名下,必须填写该参数
region = "cn-hangzhou"
# examplebucket填写存储空间名称。
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
# 指定原图所在的Bucket名称,例如examplebucket。
bucket_name = 'examplebucket'
# 指定原图名称。如果图片不在Bucket根目录,需携带图片完整路径,例如exampledir/example.jpg。
key = 'exampledir/example.jpg'
# 指定处理后的图片名称。
new_pic = 'exampledir/newexample.jpg'
# 如果图片不在指定Bucket内,需将本地路径下的图片上传到指定Bucket。
# bucket.put_object_from_file(key, 'D:\\localpath\\example.jpg')
# 使用自定义样式处理图片。其中,yourCustomStyleName填写通过OSS管理控制台创建的图片样式名称。
style = 'style/yourCustomStyleName'
# 将处理后的图片保存在本地。
bucket.get_object_to_file(key, new_pic, process=style)
# 图片处理完成后,如果Bucket内的原图不再需要,可将其删除。
# bucket.delete_object(key)
# 如果处理后的图片不再需要,可将其删除。
# os.remove(new_pic)
图片处理持久化
您可以通过ImgSaveAs接口将处理后的图片保存至指定Bucket。以下代码展示了图片处理持久化操作:
# -*- coding: utf-8 -*-
import os
import base64
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# 填写Endpoint对应的Region信息,例如cn-hangzhou。注意,v4签名下,必须填写该参数
region = "cn-hangzhou"
# examplebucket填写存储空间名称。
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
# 指定原图所在的Bucket名称。
source_bucket_name = 'srcbucket'
# 指定用于存放处理后图片的Bucket名称,该Bucket需与原图所在Bucket在同一地域。
target_bucket_name = 'destbucket'
# 指定原图名称。如果图片不在Bucket根目录,需携带文件完整访问路径,例如example/example.jpg。
source_image_name = 'example/example.jpg'
# 将图片缩放为固定宽高100 px。
style = 'image/resize,m_fixed,w_100,h_100'
# 指定处理后图片名称。如果图片不在Bucket根目录,需携带文件完整访问路径,例如exampledir/example.jpg。
target_image_name = 'exampledir/example.jpg'
process = "{0}|sys/saveas,o_{1},b_{2}".format(style,
oss2.compat.to_string(base64.urlsafe_b64encode(oss2.compat.to_bytes(target_image_name))),
oss2.compat.to_string(base64.urlsafe_b64encode(oss2.compat.to_bytes(target_bucket_name))))
result = bucket.process_object(source_image_name, process)
print(result)
生成带图片处理参数的文件签名URL
私有文件的访问URL带有签名。OSS不支持在带签名的URL后直接添加图片处理参数。如果您想要对私有文件进行图片处理,需要将图片处理参数加入到签名中,相关的代码示例如下:
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# 填写Endpoint对应的Region信息,例如cn-hangzhou。注意,v4签名下,必须填写该参数
region = "cn-hangzhou"
# examplebucket填写存储空间名称。
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
# 填写Bucket名称,例如examplebucket。
bucket_name = 'examplebucket'
# 指定图片所在Bucket的名称。如果图片不在Bucket根目录,需携带文件完整路径,例如exampledir/example.jpg。
key = 'exampledir/example.jpg'
# 如果图片不在指定Bucket内,需将该图片到目标Bucket。
# bucket.put_object_from_file(key, 'D:\\localpath\\example.jpg')
# 将图片缩放为固定宽高100 px后,再旋转90°。
style = 'image/resize,m_fixed,w_100,h_100/rotate,90'
# 生成带签名的URL,并指定过期时间为10分钟。过期时间单位为秒。
url = bucket.sign_url('GET', key, 10 * 60, params={'x-oss-process': style})
print(url)
相关文档
关于图片处理的完整代码,请参见GitHub示例。