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

通过文件访问URL处理图片

您可以在图片的访问URL后添加相应的图片处理参数或图片样式处理图片,格式如下:
  • 使用图片处理参数
    格式为:https://bucketname.endpoint/objectname?x-oss-process=image/action,parame_value
    • 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°。图片处理支持的参数请参见处理参数

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

  • 使用样式参数
    格式为:https://bucketname.endpoint/objectname?x-oss-process=style/stylename
    • https://bucketname.endpoint/objectname:Object的访问地址。
    • x-oss-process=style/:固定参数,标明使用图片样式参数对图片文件进行处理。
    • stylename:您提前在OSS控制台设置的样式名称,配置方法请参见创建样式

    示例:http://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=style/panda_style

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

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

使用SDK处理图片

您可以在SDK中添加不同的图片处理参数或样式参数处理图片。以Java SDK为例,代码如下:
  • 使用图片处理参数

    使用图片处理参数处理图片时,多个操作以正斜线(/)隔开。

    // Endpoint以杭州为例,其它Region请按实际情况填写。
    String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
    String accessKeyId = "<yourAccessKeyId>";
    String accessKeySecret = "<yourAccessKeySecret>";
    String bucketName = "<yourBucketName>";
    String objectName = "<yourObjectName>";
    // 创建OSSClient实例。
    OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    // 先将图片强制缩放为宽高100 px,之后添加文字水印,水印内容为:Hello 图片服务。
    String style = "image/resize,m_fixed,w_100,h_100/watermark,text_SGVsbG8g5Zu-54mH5pyN5YqhIQ";
    GetObjectRequest request = new GetObjectRequest(bucketName, objectName);
    request.setProcess(style);
    ossClient.getObject(request, new File("<example.jpg>"));
    // 关闭OSSClient。
    ossClient.shutdown();
                            
  • 使用样式参数
    // Endpoint以杭州为例,其它Region请按实际情况填写。
    String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
    String accessKeyId = "<yourAccessKeyId>";
    String accessKeySecret = "<yourAccessKeySecret>";
    String bucketName = "<yourBucketName>";
    String objectName = "<yourObjectName>";
    
    // 创建OSSClient实例。
    OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
    // 添加自定义样式。
    String style = "style/<yourCustomStyleName>";
    GetObjectRequest request = new GetObjectRequest(bucketName, objectName);
    request.setProcess(style);
    
    ossClient.getObject(request, new File("<example.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内。详情请参见图片处理持久化