图片处理是OSS提供的海量、安全、低成本、高可靠的图片处理服务。原始图片上传到OSS后,您可以通过简单的RESTful接口,在任何时间、任何地点、任何互联网设备上对图片进行处理。

图片处理的详细信息请参见OSS图片处理指南

图片处理的完整代码请参见:GitHub

图片处理功能

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:

    # -*- coding: utf-8 -*-
    import oss2
    
    # Endpoint以杭州为例,其它Region请按实际情况填写。
    endpoint = 'http://oss-cn-hangzhou.aliyuncs.com'
    # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
    access_key_id = '<yourAccessKeyId>'
    access_key_secret = '<yourAccessKeySecret>'
    bucket_name = '<yourBucketName>'
    key = 'example.jpg'
    
    # 创建存储空间实例,所有文件相关的方法都需要通过存储空间实例来调用。
    bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)
    
    # 上传示例图片。
    bucket.put_object_from_file(key, 'example.jpg')
    
    # 生成带签名的URL,并指定过期时间为10分钟。过期时间单位是秒。
    style = 'image/resize,m_fixed,w_100,h_100/rotate,90'
    url = bucket.sign_url('GET', key, 10 * 60, params={'x-oss-process': style})
    print(url)
    
  • SDK访问

    对于任意权限的图片文件,都可以直接使用SDK访问和处理。

    SDK处理图片文件支持自定义样式、HTTPS和级联处理。

    • 基础操作

      get_object和get_object_to_file支持图片处理。

      以下代码展示了图片处理的基础操作:

      # -*- coding: utf-8 -*-
      import os
      import oss2
      
      # Endpoint以杭州为例,其它Region请按实际情况填写。
      endpoint = 'http://oss-cn-hangzhou.aliyuncs.com'
      # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
      access_key_id = '<yourAccessKeyId>'
      access_key_secret = '<yourAccessKeySecret>'
      bucket_name = '<yourBucketName>'
      key = 'example.jpg'
      new_pic = 'example-new.jpg'
      
      # 创建存储空间实例,所有文件相关的方法都需要通过存储空间实例来调用。
      bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)
      
      # 上传示例图片。
      bucket.put_object_from_file(key, 'example.jpg')
      
      # 缩放
      style = 'image/resize,m_fixed,w_100,h_100'
      bucket.get_object_to_file(key, new_pic, process=style)
      
      # 裁剪
      style = 'image/crop,w_100,h_100,x_100,y_100,r_1'
      bucket.get_object_to_file(key, new_pic, process=style)
      
      # 旋转
      style = 'image/rotate,90'
      bucket.get_object_to_file(key, new_pic, process=style)
      
      # 锐化
      style = 'image/sharpen,100'
      bucket.get_object_to_file(key, new_pic, process=style)
      
      # 水印
      style = 'image/watermark,text_SGVsbG8g5Zu-54mH5pyN5YqhIQ'
      bucket.get_object_to_file(key, new_pic, process=style)
      
      # 格式转换
      style = 'image/format,png'
      bucket.get_object_to_file(key, new_pic, process=style)
      
      # 删除示例图片。
      bucket.delete_object(key)
      # 清除本地文件。
      os.remove(new_pic)
      
    • 自定义样式

      以下代码用于自定义图片样式:

      # -*- coding: utf-8 -*-
      import os
      import oss2
      
      # Endpoint以杭州为例,其它Region请按实际情况填写。
      endpoint = 'http://oss-cn-hangzhou.aliyuncs.com'
      # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
      access_key_id = '<yourAccessKeyId>'
      access_key_secret = '<yourAccessKeySecret>'
      bucket_name = '<yourBucketName>'
      key = 'example.jpg'
      new_pic = 'example-new.jpg'
      
      # 创建存储空间实例,所有文件相关的方法都需要通过存储空间实例来调用。
      bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)
      
      # 上传示例图片。
      bucket.put_object_from_file(key, 'example.jpg')
      
      # 自定义样式。
      style = 'style/oss-pic-style-w-100'
      
      # 图片处理。
      bucket.get_object_to_file(key, new_pic, process=style)
      
      # 删除示例图片。
      bucket.delete_object(key)
      # 清除本地文件。
      os.remove(new_pic)
      
    • 级联处理

      以下代码用于级联处理图片:

      # -*- coding: utf-8 -*-
      import os
      import oss2
      
      # Endpoint以杭州为例,其它Region请按实际情况填写。
      endpoint = 'http://oss-cn-hangzhou.aliyuncs.com'
      # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
      access_key_id = '<yourAccessKeyId>'
      access_key_secret = '<yourAccessKeySecret>'
      bucket_name = '<yourBucketName>'
      key = 'example.jpg'
      new_pic = 'example-new.jpg'
      
      # 创建存储空间实例,所有文件相关的方法都需要通过存储空间实例来调用。
      bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)
      
      # 上传示例图片。
      bucket.put_object_from_file(key, 'example.jpg')
      
      # 级联处理。
      style = 'image/resize,m_fixed,w_100,h_100/rotate,90'
      
      # 图片处理。
      bucket.get_object_to_file(key, new_pic, process=style)
      
      # 删除示例图片。
      bucket.delete_object(key)
      # 清除本地文件。
      os.remove(new_pic)
      

图片处理工具

您可以通过可视化图片处理工具ImageStyleViever直观地看到OSS图片处理结果。