您可以通过文件URL、API、SDK对OSS内图片进行处理,本文介绍如何使用这三种方式进行图片处理。

通过文件URL处理图片

通过文件URL处理图片有两种方式,一种是添加图片处理参数,另一种是添加图片样式参数。
注意 通过文件URL访问图片时,默认是下载行为。如需确保通过文件URL访问图片时是预览行为,您需要绑定自定义域名并添加CNAME记录。具体操作,请参见绑定自定义域名
图片处理方式 添加图片处理参数 添加图片样式参数
图片处理URL https://bucketname.endpoint/objectname?x-oss-process=image/action,parame_value https://bucketname.endpoint/objectname?x-oss-process=style/stylename
参数说明
  • https://bucketname.endpoint/objectname:Object的访问地址。获取方式,请参见上传Object后如何获取访问URL?
  • x-oss-process=image/:固定参数,表明使用图片处理参数对图片文件进行处理。
  • action,parame_value:图片处理的操作(action)、参数(parame)和值(value),用于定义图片处理的方式。多个操作以正斜线(/)隔开,OSS将按图片处理参数的顺序处理图片。例如image/resize,w_200/rotate,90表示将图片先按比例缩放至宽200 px,再将图片旋转90°。图片处理支持的参数,请参见处理参数
  • https://bucketname.endpoint/objectname:Object的访问地址。获取方式,请参见上传Object后如何获取访问URL?
  • x-oss-process=style/:固定参数,表明使用图片样式参数对图片文件进行处理。
  • stylename:您提前在OSS控制台设置的样式名称。配置方法,请参见创建样式

如果您设置了自定义分隔符,可使用分隔符代替?x-oss-process=style/内容,进一步简化图片处理URL。例如分隔符设置为感叹号(!),则图片处理URL为:<https://bucketname.endpoint/objectname!stylename。自定义分隔符的配置方式请参见设置自定义分隔符

示例 https://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,w_300/quality,q_90 https://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=style/panda_style

以上说明仅针对允许匿名访问的Object,若您的Object不允许匿名访问,需通过SDK的方式将图片处理操作加入签名中。详情请参见:

使用SDK处理图片

您可以通过在SDK中添加图片处理参数或图片样式参数的方式来处理图片。以Java SDK为例,代码如下:
  • 添加图片处理参数

    通过添加图片处理参数的方式处理图片时,多个图片操作之间须以正斜线(/)隔开。

    // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
    String endpoint = "yourEndpoint";
    // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
    String accessKeyId = "yourAccessKeyId";
    String accessKeySecret = "yourAccessKeySecret";
    // 填写Bucket名称。
    String bucketName = "examplebucket";
    // 填写Object完整路径。Object完整路径中不能包含Bucket名称。
    String objectName = "exampleobject.jpg";
    
    // 创建OSSClient实例。
    OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
    // 将图片缩放为固定宽高100 px。
    String style = "image/resize,m_fixed,w_100,h_100";
    GetObjectRequest request = new GetObjectRequest(bucketName, objectName);
    request.setProcess(style);
    // 将处理后的图片命名为example-resize.jpg并保存到本地。
    // 填写本地文件的完整路径,例如D:\\localpath\\example-resize.jpg。如果指定的本地文件存在会覆盖,不存在则新建。
    // 如果未指定本地路径只填写了本地文件名称(例如example-resize.jpg),则文件默认保存到示例程序所属项目对应本地路径中。
    ossClient.getObject(request, new File("D:\\localpath\\example-resize.jpg"));
    
    // 关闭OSSClient。
    ossClient.shutdown();

    有关存储空间(Bucket)和文件(Object)命名规范的更多信息,请参见存储空间命名以及对象命名

  • 添加图片样式参数
    // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
    String endpoint = "yourEndpoint";
    // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
    String accessKeyId = "yourAccessKeyId";
    String accessKeySecret = "yourAccessKeySecret";
    // 填写Bucket名称。
    String bucketName = "examplebucket";
    // 填写Object完整路径。Object完整路径中不能包含Bucket名称。
    String objectName = "exampleobject.jpg";
    
    // 创建OSSClient实例。
    OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
    // 使用自定义样式处理图片。
    // yourCustomStyleName填写通过OSS管理控制台创建的图片样式名称。
    String style = "style/yourCustomStyleName";
    GetObjectRequest request = new GetObjectRequest(bucketName, objectName);
    request.setProcess(style);
    // 将处理后的图片命名为example-new.jpg并保存到本地。
    // 填写本地文件的完整路径,例如D:\\localpath\\example-new.jpg。如果指定的本地文件存在会覆盖,不存在则新建。
    // 如果未指定本地路径只填写了文件名称(例如example-new.jpg),则文件默认保存到示例程序所属项目对应本地路径中。
    ossClient.getObject(request, new File("D:\\localpath\\example-new.jpg"));
    
    // 关闭OSSClient。
    ossClient.shutdown();

使用API接口处理图片

您可以通过在GetObject中添加图片处理参数或图片样式参数的方式来处理图片。
  • 添加图片处理参数

    请求示例如下:

    GET /oss.jpg?x-oss-process=image/resize,w_100 HTTP/1.1
    Host: oss-example.oss-cn-hangzhou.aliyuncs.com
    Date: Fri, 24 Feb 2012 06:38:30 GMT
    Authorization: OSS qn6qrrqxo2oawuk53otfjbyc:UNQDb7GapEgJkcde6OhZ9J*****
  • 添加图片样式参数

    请求示例如下:

    GET /oss.jpg?x-oss-process=style/styleexample HTTP/1.1
    Host: oss-example.oss-cn-hangzhou.aliyuncs.com
    Date: Fri, 24 Feb 2012 06:40:10 GMT
    Authorization: OSS qn6qrrawuk53oqxo2otfjbyc:UNapEgQDb7GJkcde6OhZ9J*****

保存处理后的图片

图片处理服务默认不保存处理后的图片。您可以在图片处理的请求内添加转存参数,将处理后的图片作为Object保存至指定的Bucket内。详情请参见图片处理持久化