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

图片处理支持的参数请参见处理参数

使用图片处理参数处理图片

  • 使用单个图片处理参数处理图片并保存为本地图片
    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
    #include <alibabacloud/oss/OssClient.h>
    using namespace AlibabaCloud::OSS;
     
    int main(void)
    {
         /* 初始化OSS账号信息。 */
        std::string AccessKeyId = "<yourAccessKeyId>";
        std::string AccessKeySecret = "<yourAccessKeySecret>";
        std::string Endpoint = "<yourEndpoint>";
        std::string BucketName = "<yourBucketName>";
        std::string ObjectName = "<yourObjectName>";
     
         /* 初始化网络等资源。 */
        InitializeSdk();
     
        ClientConfiguration conf;
        OssClient client(Endpoint, AccessKeyId, AccessKeySecret, conf);
     
        /* 将图片缩放为固定宽高100 px后保存在本地。 */
        std::string Process = "image/resize,m_fixed,w_100,h_100";
        GetObjectRequest request(BucketName, ObjectName);
        request.setProcess(Process);
        auto outcome = client.GetObject(request);
     
        /* 释放网络等资源。 */
        ShutdownSdk();
        return 0;
    }
  • 使用多个图片处理参数处理图片并保存为本地图片
    使用多个图片处理参数处理图片时,多个参数之间以正斜线(/)分隔。
    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
    #include <alibabacloud/oss/OssClient.h>
    using namespace AlibabaCloud::OSS;
     
    int main(void)
    {
         /* 初始化OSS账号信息。 */
        std::string AccessKeyId = "<yourAccessKeyId>";
        std::string AccessKeySecret = "<yourAccessKeySecret>";
        std::string Endpoint = "<yourEndpoint>";
        std::string BucketName = "<yourBucketName>";
        std::string ObjectName = "<yourObjectName>";
     
         /* 初始化网络等资源。 */
        InitializeSdk();
     
        ClientConfiguration conf;
        OssClient client(Endpoint, AccessKeyId, AccessKeySecret, conf);
     
        /* 将图片缩放为固定宽高100 px后,再旋转90°,之后保存在本地。 */
        std::string Process = "image/resize,m_fixed,w_100,h_100/rotate,90";
        GetObjectRequest request(BucketName, ObjectName);
        request.setProcess(Process);
        auto outcome = client.GetObject(request);
     
        /* 释放网络等资源。 */
        ShutdownSdk();
        return 0;
    }

使用图片样式处理图片

您可以将多个图片处理参数封装在一个样式中,之后使用样式批量处理图片。详情请参见 图片样式。以下代码展示了使用图片样式处理图片:
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
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
 
int main(void)
{
     /* 初始化OSS账号信息。 */
    std::string AccessKeyId = "<yourAccessKeyId>";
    std::string AccessKeySecret = "<yourAccessKeySecret>";
    std::string Endpoint = "<yourEndpoint>";
    std::string BucketName = "<yourBucketName>";
    std::string ObjectName = "<yourObjectName>";
 
     /* 初始化网络等资源。 */
    InitializeSdk();
 
    ClientConfiguration conf;
    OssClient client(Endpoint, AccessKeyId, AccessKeySecret, conf) ;
 
    /* 使用指定图片样式处理图片后保存在本地。 */
    std::string Process = "style/<yourCustomStyleName>";
    GetObjectRequest request(BucketName, ObjectName);
    request.setProcess(Process);
    auto outcome = client.GetObject(request);
 
    /* 释放网络等资源。 */
    ShutdownSdk();
    return 0;
}

图片处理持久化

您可以通过 ImgSaveAs接口将图片保存至当前存储空间。以下代码展示了图片处理持久化操作:
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
30
31
32
33
34
35
36
#include <alibabacloud/oss/OssClient.h>
#include <sstream>
using namespace AlibabaCloud::OSS;
 
int main(void)
{
     /* 初始化OSS账号信息。 */
    std::string AccessKeyId = "<yourAccessKeyId>";
    std::string AccessKeySecret = "<yourAccessKeySecret>";
    std::string Endpoint = "<yourEndpoint>";
    std::string BucketName = "<yourBucketName>";
     /* 原图名称。若图片不在Bucket根目录,需携带文件访问路径,例如example/example.jpg。 */
    std::string SourceObjectName = "<yourSourceObjectName>";
     /* 指定处理后的图片名称。 */
    std::string TargetObjectName = "<yourTargetObjectName>";
 
     /* 初始化网络等资源。 */
    InitializeSdk();
 
    ClientConfiguration conf;
    OssClient client(Endpoint, AccessKeyId, AccessKeySecret, conf);
 
    /* 将图片缩放为固定宽高100 px后转存到当前存储空间。 */
    std::string Process = "image/resize,m_fixed,w_100,h_100";
    std::stringstream ss;
    ss  << Process
    <<"|sys/saveas"
    << ",o_" << Base64EncodeUrlSafe(TargetObjectName)
    << ",b_" << Base64EncodeUrlSafe(BucketName);
    ProcessObjectRequest request(BucketName, SourceObjectName, ss.str());
    auto outcome = client.ProcessObject(request);
 
    /* 释放网络等资源。 */
    ShutdownSdk();
    return 0;
}

生成带图片处理参数的文件签名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
23
24
25
26
27
28
29
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
 
int main(void)
{
      /* 初始化OSS账号信息。 */
    std::string AccessKeyId = "<yourAccessKeyId>";
    std::string AccessKeySecret = "<yourAccessKeySecret>";
    std::string Endpoint = "<yourEndpoint>";
    std::string BucketName = "<yourBucketName>";
    std::string ObjectName = "<yourObjectName>";
 
      /* 初始化网络等资源。 */
    InitializeSdk();
 
    ClientConfiguration conf;
    OssClient client(Endpoint, AccessKeyId, AccessKeySecret, conf);
 
 
    /* 生成带图片处理参数的文件签名URL。 */
    std::string Process = "image/resize,m_fixed,w_100,h_100";
    GeneratePresignedUrlRequest request(BucketName, ObjectName, Http::Get);
    request.setProcess(Process);
    auto outcome = client.GeneratePresignedUrl(request);
 
    /* 释放网络等资源。 */
    ShutdownSdk();
    return 0;
}

图片处理工具

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