图片处理是OSS提供的海量、安全、低成本、高可靠的图片处理服务。原始图片上传到OSS后,您可以通过简单的RESTful接口,在任何时间、任何地点、任何互联网设备上对图片进行处理。
图片处理支持的参数请参见处理参数。
使用图片处理参数处理图片
- 使用单个图片处理参数处理图片并保存为本地图片
#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; }
- 使用多个图片处理参数处理图片并保存为本地图片
使用多个图片处理参数处理图片时,多个参数之间以正斜线(/)分隔。
#include <alibabacloud/oss/OssClient.h> using namespace AlibabaCloud::OSS; int main(void) { /* 初始化OSS账号信息。*/ /* 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。*/ std::string AccessKeyId = "yourAccessKeyId"; std::string AccessKeySecret = "yourAccessKeySecret"; /* yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。*/ std::string Endpoint = "yourEndpoint"; /* 指定原图所在的Bucket名称,例如examplebucket。*/ std::string BucketName = "examplebucket"; /* 指定原图名称。如果图片不在Bucket根目录,需携带图片完整路径,例如exampledir/example.jpg。*/ std::string ObjectName = "exampledir/example.jpg"; /* 初始化网络等资源。*/ 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; }
使用图片样式处理图片
您可以将多个图片处理参数封装在一个样式中,之后使用样式批量处理图片。详情请参见图片样式。以下代码展示了使用图片样式处理图片:
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* 初始化OSS账号信息。*/
/* 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。*/
std::string AccessKeyId = "yourAccessKeyId";
std::string AccessKeySecret = "yourAccessKeySecret";
/* yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。*/
std::string Endpoint = "yourEndpoint";
/* 指定原图所在的Bucket名称,例如examplebucket。*/
std::string BucketName = "examplebucket";
/* 指定原图名称。如果图片不在Bucket根目录,需携带图片完整路径,例如exampledir/example.jpg。*/
std::string ObjectName = "exampledir/example.jpg";
/* 初始化网络等资源。*/
InitializeSdk();
ClientConfiguration conf;
OssClient client(Endpoint, AccessKeyId, AccessKeySecret, conf) ;
/* 使用图片样式处理图片。其中,yourCustomStyleName填写通过OSS管理控制台创建的图片样式名称。*/
std::string Process = "style/yourCustomStyleName";
GetObjectRequest request(BucketName, ObjectName);
request.setProcess(Process);
auto outcome = client.GetObject(request);
/* 释放网络等资源。*/
ShutdownSdk();
return 0;
}
图片处理持久化
您可以通过ImgSaveAs接口将图片保存至当前存储空间。以下代码展示了图片处理持久化操作:
#include <alibabacloud/oss/OssClient.h>
#include <sstream>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* 初始化OSS账号信息。*/
/* 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。*/
std::string AccessKeyId = "yourAccessKeyId";
std::string AccessKeySecret = "yourAccessKeySecret";
/* 指定Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。*/
std::string Endpoint = "yourEndpoint";
/* 指定Bucket名称,例如examplebucket。*/
std::string BucketName = "examplebucket";
/* 指定原图名称。如果图片不在Bucket根目录,需携带文件完整路径,例如example/example.jpg。*/
std::string SourceObjectName = "example/example.jpg";
/* 指定处理后图片名称。如果图片不在Bucket根目录,需携带文件完整访问路径,例如exampledir/example.jpg。*/
std::string TargetObjectName = "exampledir/example.jpg";
/* 初始化网络等资源。*/
InitializeSdk();
ClientConfiguration conf;
OssClient client(Endpoint, AccessKeyId, AccessKeySecret, conf);
/* 将图片缩放为固定宽高100 px后转存到当前Bucket。*/
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后直接添加图片处理参数。如果您想要对私有文件进行图片处理,需要将图片处理参数加入到签名中,相关的代码示例如下:
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* 初始化OSS账号信息。*/
/* 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。*/
std::string AccessKeyId = "yourAccessKeyId";
std::string AccessKeySecret = "yourAccessKeySecret";
/* 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。*/
std::string Endpoint = "yourEndpoint";
/* 填写图片所在的Bucket名称,例如examplebucket。*/
std::string BucketName = "examplebucket";
/* 指定图片名称。如果图片不在Bucket根目录,需携带文件完整路径,例如exampledir/example.jpg。
std::string ObjectName = "exampledir/example.jpg";
/* 初始化网络等资源。*/
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;
}