您可以通过文件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为例,代码如下:
  • 添加图片处理参数

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

    // 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内。详情请参见图片处理持久化