图片处理是OSS提供的海量、安全、低成本、高可靠的图片处理服务。原始图片上传到OSS后,您可以通过简单的RESTful接口,在任何时间、任何地点、任何互联网设备上对图片进行处理。
图片处理支持的参数请参见处理参数。
图片处理的完整代码请参见:GitHub。
使用图片处理参数处理图片
- 使用单个图片处理参数处理图片并保存为本地图片123456789101112131415161718192021222324252627282930
# -*- coding: utf-
8
-*-
import
os
import
oss2
# Endpoint以杭州为例,其它Region请按实际情况填写。
endpoint =
'https://oss-cn-hangzhou.aliyuncs.com'
# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
access_key_id =
'<yourAccessKeyId>'
access_key_secret =
'<yourAccessKeySecret>'
# 目标Bucket名称。
bucket_name =
'<yourBucketName>'
# 目标图片名称。若图片不在Bucket根目录,需携带文件访问路径,例如example/example.jpg。
key =
'<yourObjectName>'
# 指定处理后的图片名称。
new_pic =
'<LocalFileName>'
# 指定Bucket实例,所有文件相关的方法都需要通过Bucket实例来调用。
bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)
# 若目标图片不在指定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)
- 使用多个图片处理参数处理图片并保存为本地图片
使用多个图片处理参数处理图片时,多个参数之间以正斜线(/)分隔。1234567891011121314151617181920212223242526272829
# -*- coding: utf-
8
-*-
import
os
import
oss2
# Endpoint以杭州为例,其它Region请按实际情况填写。
endpoint =
'https://oss-cn-hangzhou.aliyuncs.com'
# 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
access_key_id =
'<yourAccessKeyId>'
access_key_secret =
'<yourAccessKeySecret>'
# 目标Bucket名称。
bucket_name =
'<yourBucketName>'
# 目标图片名称。若图片不在Bucket根目录,需携带文件访问路径,例如example/example.jpg。
key =
'<yourObjectName>'
# 指定处理后的图片名称。
new_pic =
'<LocalFileName>'
# 指定Bucket实例,所有文件相关的方法都需要通过Bucket实例来调用。
bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)
# 若目标图片不在指定Bucket内,需上传图片到目标Bucket。
# bucket.put_object_from_file(key,
'<yourLocalFile>'
)
# 将图片缩放为固定宽高
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)
使用图片样式处理图片
您可以将多个图片处理参数封装在一个样式中,之后使用样式批量处理图片。详情请参见
图片样式。以下代码展示了使用图片样式处理图片:
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 | # -*- coding: utf- 8 -*- import os import oss2 # Endpoint以杭州为例,其它Region请按实际情况填写。 endpoint = 'https://oss-cn-hangzhou.aliyuncs.com' # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。 access_key_id = '<yourAccessKeyId>' access_key_secret = '<yourAccessKeySecret>' # 目标Bucket名称。 bucket_name = '<yourBucketName>' # 目标图片名称。若图片不在Bucket根目录,需携带文件访问路径,例如example/example.jpg。 key = '<yourObjectName>' # 指定处理后的图片名称。 new_pic = '<LocalFileName>' # 指定Bucket实例,所有文件相关的方法都需要通过Bucket实例来调用。 bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name) # 若目标图片不在指定Bucket内,需上传图片到目标Bucket。 # bucket.put_object_from_file(key, '<yourLocalFile>' ) # 指定图片样式。 style = 'style/oss-pic-style-w-100' # 将处理后的图片保存在本地。 bucket.get_object_to_file(key, new_pic, process=style) # 图片处理完成后,若Bucket内的原图不再需要,可以删除原图。 # bucket.delete_object(key) # 若处理后的图片不再需要,可以删除处理后的图片。 # os.remove(new_pic) |
图片处理持久化
您可以通过
ImgSaveAs接口将处理后的图片保存至指定Bucket。以下代码展示了图片处理持久化操作:
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 | # -*- coding: utf- 8 -*- import os import base64 import oss2 # Endpoint以杭州为例,其它Region请按实际情况填写。 endpoint = 'https://oss-cn-hangzhou.aliyuncs.com' # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。 access_key_id = '<yourAccessKeyId>' access_key_secret = '<yourAccessKeySecret>' # 原图所在Bucket名称。 source_bucket_name = '<yourBucketName>' # 指定处理后图片保存的Bucket,该Bucket需与源Bucket在同一地域。 taget_bucket_name = '<yourTargetBucketName>' # 原图名称。若图片不在Bucket根目录,需携带文件访问路径,例如example/example.jpg。 source_image_name = '<sourceObjectName>' # 指定Bucket实例,所有文件相关的方法都需要通过Bucket实例来调用。 bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, source_bucket_name) # 将图片缩放为固定宽高 100 px。 style = 'image/resize,m_fixed,w_100,h_100' # 指定处理后图片名称,若携带访问路径,会将图片存储在指定路径。例如example/example-resize.jpg。 target_image_name = '<targetObjectName>' 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(taget_bucket_name)))) result = bucket.process_object(source_image_name, process) print(result) |
生成带图片处理参数的文件签名URL
私有文件的访问URL带有签名。OSS不支持在带签名的URL后直接添加图片处理参数。如果您想要对私有文件进行图片处理,需要将图片处理参数加入到签名中,相关的代码示例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # -*- coding: utf- 8 -*- import oss2 # Endpoint以杭州为例,其它Region请按实际情况填写。 endpoint = 'https://oss-cn-hangzhou.aliyuncs.com' # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。 access_key_id = '<yourAccessKeyId>' access_key_secret = '<yourAccessKeySecret>' # 目标Bucket名称。 bucket_name = '<yourBucketName>' # 目标图片名称。若图片不在Bucket根目录,需携带文件访问路径,例如example/example.jpg。 key = '<yourObjectName>' # 指定Bucket实例,所有文件相关的方法都需要通过Bucket实例来调用。 bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name) # 若目标图片不在指定Bucket内,需上传图片到目标Bucket。 # bucket.put_object_from_file(key, '<yourLocalFile>' ) # 将图片缩放为固定宽高 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) |
图片处理工具
您可以通过可视化图片处理工具ImageStyleViewer直观地看到OSS图片处理结果。