图片处理
图片处理是OSS提供的海量、安全、低成本、高可靠的图片处理服务。原始图片上传到OSS后,您可以通过简单的RESTful接口,在任何时间、任何地点、任何互联网设备上对图片进行处理。
图片处理的详细信息请参见OSS图片处理指南。
图片处理的完整代码请参见:GitHub。
图片处理功能
OSS图片处理提供以下功能:
图片处理使用
图片处理使用标准的HTTP GET请求。您可以在URL的QueryString中设置处理参数。
如果图片文件的访问权限为私有读写,必须通过授权才能进行访问。
- 匿名访问
您可以通过如下格式的三级域名匿名访问处理后的图片:
http://<yourBucketName>.<yourEndpoint>/<yourObjectName>?x-oss-process=image/<yourAction>,<yourParamValue>
参数 描述 bucket 存储空间名称 endpoint 存储空间所在地域的访问域名 object 图片文件名称 image 图片处理的保留标志符 action 对图片做的操作,如缩放、裁剪、旋转等 param 对图片做的操作所对应的参数 - 基础操作
例如,将图缩略成宽度为100,高度按比例处理:
http://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,w_100
- 自定义样式
使用如下格式的三级域名匿名访问图片处理:
http://<yourBucketName>.<yourEndpoint>/<yourObjectName>?x-oss-process=style/<yourStyleName>
- style:自定义样式的保留标志符。
- yourStyleName:自定义样式名称,即通过控制台自定义样式的规则名称。
例如:
http://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=style/oss-pic-style-w-100
- 级联处理
通过级联处理,可以对一张图片顺序进行多个操作,格式如下:
http://<yourBucketName>.<yourEndpoint>/<yourObjectName>?x-oss-process=image/<yourAction1>,<yourParamValue1>/<yourAction2>,<yourParamValue2>/...
例如:
http://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,w_100/rotate,90
- 支持HTTPS访问
图片服务支持HTTPS访问,例如:
https://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,w_100
- 基础操作
- 授权访问
授权访问支持自定义样式、HTTPS和级联处理。
以下代码用于生成带签名的图片处理URL:
#include "oss_api.h" #include "aos_http_io.h" const char *endpoint = "<yourEndpoint>"; const char *access_key_id = "<yourAccessKeyId>"; const char *access_key_secret = "<yourAccessKeySecret>"; const char *bucket_name = "<yourBucketName>"; const char *object_name = "<yourObjectName>"; void init_options(oss_request_options_t *options) { options->config = oss_config_create(options->pool); /* 用char*类型的字符串初始化aos_string_t类型。*/ aos_str_set(&options->config->endpoint, endpoint); aos_str_set(&options->config->access_key_id, access_key_id); aos_str_set(&options->config->access_key_secret, access_key_secret); /* 是否使用了CNAME。0表示不使用。*/ options->config->is_cname = 0; /* 设置网络相关参数,比如超时时间等。*/ options->ctl = aos_http_controller_create(options->pool, 0); } int main(int argc, char *argv[]) { /* 在程序入口调用aos_http_io_initialize方法来初始化网络、内存等全局资源。*/ if (aos_http_io_initialize(NULL, 0) != AOSE_OK) { exit(1); } /* 用于内存管理的内存池(pool),等价于apr_pool_t。其实现代码在apr库中。*/ aos_pool_t *pool; /* 重新创建一个内存池,第二个参数是NULL,表示没有继承其它内存池。*/ aos_pool_create(&pool, NULL); /* 创建并初始化options,该参数包括endpoint、access_key_id、acces_key_secret、is_cname、 curl等全局配置信息。*/ oss_request_options_t *oss_client_options; /* 在内存池中分配内存给options。*/ oss_client_options = oss_request_options_create(pool); /* 初始化Client的选项oss_client_options。*/ init_options(oss_client_options); /* 初始化参数。*/ aos_string_t bucket; aos_string_t object; aos_table_t *params = NULL; aos_http_request_t *req; char *url_str; apr_time_t now; int64_t expire_time; aos_str_set(&bucket, bucket_name); aos_str_set(&object, object_name); /* 图片处理。*/ params = aos_table_make(pool, 1); apr_table_set(params, OSS_PROCESS, "image/resize,m_fixed,w_100,h_100"); req = aos_http_request_create(pool); req->method = HTTP_GET; req->query_params = params; /* 过期时间(expire_time),单位为秒。*/ now = apr_time_now(); expire_time = now / 1000000 + 10 * 60; /* 生成签名url。*/ url_str = oss_gen_signed_url(oss_client_options, &bucket, &object, expire_time, req); printf("url: %s\n", url_str); /* 释放该内存池,相当于释放了请求过程中各资源分配的内存。*/ aos_pool_destroy(pool); /* 释放之前分配的全局资源。 */ aos_http_io_deinitialize(); return 0; }
- SDK访问
对于任意权限的图片文件,都可以直接使用SDK访问和处理。
SDK处理图片文件支持自定义样式、HTTPS和级联处理。
- 基础操作
以下代码展示了图片处理的基础操作:
#include "oss_api.h" #include "aos_http_io.h" const char *endpoint = "<yourEndpoint>"; const char *access_key_id = "<yourAccessKeyId>"; const char *access_key_secret = "<yourAccessKeySecret>"; const char *bucket_name = "<yourBucketName>"; const char *object_name = "<yourObjectName>"; void init_options(oss_request_options_t *options) { options->config = oss_config_create(options->pool); /* 用char*类型的字符串初始化aos_string_t类型。*/ aos_str_set(&options->config->endpoint, endpoint); aos_str_set(&options->config->access_key_id, access_key_id); aos_str_set(&options->config->access_key_secret, access_key_secret); /* 是否使用了CNAME。0表示不使用。*/ options->config->is_cname = 0; /* 用于设置网络相关参数,比如超时时间等。*/ options->ctl = aos_http_controller_create(options->pool, 0); } int main(int argc, char *argv[]) { /* 在程序入口调用aos_http_io_initialize方法来初始化网络、内存等全局资源。*/ if (aos_http_io_initialize(NULL, 0) != AOSE_OK) { exit(1); } /* 用于内存管理的内存池(pool),等价于apr_pool_t。其实现代码在apr库中。*/ aos_pool_t *pool; /* 重新创建一个内存池,第二个参数是NULL,表示没有继承其它内存池。*/ aos_pool_create(&pool, NULL); /* 创建并初始化options,该参数包括endpoint、access_key_id、acces_key_secret、is_cname、 curl等全局配置信息。*/ oss_request_options_t *oss_client_options; /* 在内存池中分配内存给options。*/ oss_client_options = oss_request_options_create(pool); /* 初始化Client的选项oss_client_options。*/ init_options(oss_client_options); /* 初始化参数。*/ aos_string_t bucket; aos_string_t object; aos_string_t file; aos_table_t *headers = NULL; aos_table_t *params = NULL; aos_table_t *resp_headers = NULL; aos_status_t *resp_status = NULL; aos_str_set(&bucket, bucket_name); aos_str_set(&object, object_name); /* 缩放 */ params = aos_table_make(pool, 1); apr_table_set(params, OSS_PROCESS, "image/resize,m_fixed,w_100,h_100"); /* 下载处理后的图片到本地文件。*/ aos_str_set(&file, "example-resize.jpg"); resp_status = oss_get_object_to_file(oss_client_options, &bucket, &object, headers, params, &file, &resp_headers); if (aos_status_is_ok(resp_status)) { printf("get object to file succeeded\n"); } else { printf("get object to file failed\n"); } /* 裁剪 */ params = aos_table_make(pool, 1); apr_table_set(params, OSS_PROCESS, "image/crop,w_100,h_100,x_100,y_100,r_1"); /* 下载处理后的图片到本地文件。*/ aos_str_set(&file, "example-crop.jpg"); resp_status = oss_get_object_to_file(oss_client_options, &bucket, &object, headers, params, &file, &resp_headers); if (aos_status_is_ok(resp_status)) { printf("get object to file succeeded\n"); } else { printf("get object to file failed\n"); } /* 旋转 */ params = aos_table_make(pool, 1); apr_table_set(params, OSS_PROCESS, "image/rotate,90"); /* 下载处理后的图片到本地文件。*/ aos_str_set(&file, "example-rotate.jpg"); resp_status = oss_get_object_to_file(oss_client_options, &bucket, &object, headers, params, &file, &resp_headers); if (aos_status_is_ok(resp_status)) { printf("get object to file succeeded\n"); } else { printf("get object to file failed\n"); } /* 锐化 */ params = aos_table_make(pool, 1); apr_table_set(params, OSS_PROCESS, "image/sharpen,100"); /* 下载处理后的图片到本地文件。*/ aos_str_set(&file, "example-sharpen.jpg"); resp_status = oss_get_object_to_file(oss_client_options, &bucket, &object, headers, params, &file, &resp_headers); if (aos_status_is_ok(resp_status)) { printf("get object to file succeeded\n"); } else { printf("get object to file failed\n"); } /* 水印 */ params = aos_table_make(pool, 1); apr_table_set(params, OSS_PROCESS, "image/watermark,text_SGVsbG8g5Zu-54mH5pyN5YqhIQ"); /* 下载处理后的图片到本地文件。*/ aos_str_set(&file, "example-watermark.jpg"); resp_status = oss_get_object_to_file(oss_client_options, &bucket, &object, headers, params, &file, &resp_headers); if (aos_status_is_ok(resp_status)) { printf("get object to file succeeded\n"); } else { printf("get object to file failed\n"); } /* 格式转换 */ params = aos_table_make(pool, 1); apr_table_set(params, OSS_PROCESS, "image/format,png"); /* 下载处理后的图片到本地文件。*/ aos_str_set(&file, "example-format.png"); resp_status = oss_get_object_to_file(oss_client_options, &bucket, &object, headers, params, &file, &resp_headers); if (aos_status_is_ok(resp_status)) { printf("get object to file succeeded\n"); } else { printf("get object to file failed\n"); } /* 获取图片信息 */ params = aos_table_make(pool, 1); apr_table_set(params, OSS_PROCESS, "image/info"); /* 下载处理后的图片到本地文件。*/ aos_str_set(&file, "example-info.txt"); resp_status = oss_get_object_to_file(oss_client_options, &bucket, &object, headers, params, &file, &resp_headers); if (aos_status_is_ok(resp_status)) { printf("get object to file succeeded\n"); } else { printf("get object to file failed\n"); } /* 释放内存池,相当于释放了请求过程中各资源分配的内存。*/ aos_pool_destroy(pool); /* 释放之前分配的全局资源。*/ aos_http_io_deinitialize(); return 0; }
- 自定义样式
以下代码用于自定义图片样式:
#include "oss_api.h" #include "aos_http_io.h" const char *endpoint = "<yourEndpoint>"; const char *access_key_id = "<yourAccessKeyId>"; const char *access_key_secret = "<yourAccessKeySecret>"; const char *bucket_name = "<yourBucketName>"; const char *object_name = "<yourObjectName>"; void init_options(oss_request_options_t *options) { options->config = oss_config_create(options->pool); /* 用char*类型的字符串初始化aos_string_t类型。*/ aos_str_set(&options->config->endpoint, endpoint); aos_str_set(&options->config->access_key_id, access_key_id); aos_str_set(&options->config->access_key_secret, access_key_secret); /* 是否使用了CNAME。0表示不使用。*/ options->config->is_cname = 0; /* 用于设置网络相关参数,比如超时时间等。*/ options->ctl = aos_http_controller_create(options->pool, 0); } int main(int argc, char *argv[]) { /* 在程序入口调用aos_http_io_initialize方法来初始化网络、内存等全局资源。*/ if (aos_http_io_initialize(NULL, 0) != AOSE_OK) { exit(1); } /* 用于内存管理的内存池(pool),等价于apr_pool_t。其实现代码在apr库中。*/ aos_pool_t *pool; /* 重新创建一个内存池,第二个参数是NULL,表示没有继承其它内存池。*/ aos_pool_create(&pool, NULL); /* 创建并初始化options,该参数包括endpoint、access_key_id、acces_key_secret、is_cname、 curl等全局配置信息。*/ oss_request_options_t *oss_client_options; /* 在内存池中分配内存给options。*/ oss_client_options = oss_request_options_create(pool); /* 初始化Client的选项oss_client_options。*/ init_options(oss_client_options); /* 初始化参数。*/ aos_string_t bucket; aos_string_t object; aos_string_t file; aos_table_t *headers = NULL; aos_table_t *params = NULL; aos_table_t *resp_headers = NULL; aos_status_t *resp_status = NULL; aos_str_set(&bucket, bucket_name); aos_str_set(&object, object_name); /* 自定义样式 */ params = aos_table_make(pool, 1); apr_table_set(params, OSS_PROCESS, "style/<yourCustomStyleName>"); /* 下载处理后的图片到本地文件。*/ aos_str_set(&file, "example-custom-style.jpg"); resp_status = oss_get_object_to_file(oss_client_options, &bucket, &object, headers, params, &file, &resp_headers); if (aos_status_is_ok(resp_status)) { printf("get object to file succeeded\n"); } else { printf("get object to file failed\n"); } /* 释放内存池,相当于释放了请求过程中各资源分配的内存。*/ aos_pool_destroy(pool); /* 释放之前分配的全局资源。*/ aos_http_io_deinitialize(); return 0; }
- 级联处理
以下代码用于级联处理图片:
#include "oss_api.h" #include "aos_http_io.h" const char *endpoint = "<yourEndpoint>"; const char *access_key_id = "<yourAccessKeyId>"; const char *access_key_secret = "<yourAccessKeySecret>"; const char *bucket_name = "<yourBucketName>"; const char *object_name = "<yourObjectName>"; void init_options(oss_request_options_t *options) { options->config = oss_config_create(options->pool); /* 用char*类型的字符串初始化aos_string_t类型。*/ aos_str_set(&options->config->endpoint, endpoint); aos_str_set(&options->config->access_key_id, access_key_id); aos_str_set(&options->config->access_key_secret, access_key_secret); /* 是否使用了CNAME。0表示不使用。 */ options->config->is_cname = 0; /* 用于设置网络相关参数,比如超时时间等。*/ options->ctl = aos_http_controller_create(options->pool, 0); } int main(int argc, char *argv[]) { /* 在程序入口调用aos_http_io_initialize方法来初始化网络、内存等全局资源。*/ if (aos_http_io_initialize(NULL, 0) != AOSE_OK) { exit(1); } /* 用于内存管理的内存池(pool),等价于apr_pool_t。其实现代码在apr库中。*/ aos_pool_t *pool; /* 重新创建一个内存池,第二个参数是NULL,表示没有继承其它内存池。*/ aos_pool_create(&pool, NULL); /* 创建并初始化options,该参数包括endpoint、access_key_id、acces_key_secret、is_cname、 curl等全局配置信息。*/ oss_request_options_t *oss_client_options; /* 在内存池中分配内存给options。*/ oss_client_options = oss_request_options_create(pool); /* 初始化Client的选项oss_client_options。*/ init_options(oss_client_options); /* 初始化参数。*/ aos_string_t bucket; aos_string_t object; aos_string_t file; aos_table_t *headers = NULL; aos_table_t *params = NULL; aos_table_t *resp_headers = NULL; aos_status_t *resp_status = NULL; aos_str_set(&bucket, bucket_name); aos_str_set(&object, object_name); /* 级联处理 */ params = aos_table_make(pool, 1); apr_table_set(params, OSS_PROCESS, "image/resize,m_fixed,w_100,h_100/rotate,90"); /* 下载处理后的图片到本地文件。*/ aos_str_set(&file, "example-cascade.jpg"); resp_status = oss_get_object_to_file(oss_client_options, &bucket, &object, headers, params, &file, &resp_headers); if (aos_status_is_ok(resp_status)) { printf("get object to file succeeded\n"); } else { printf("get object to file failed\n"); } /* 释放内存池,相当于释放了请求过程中各资源分配的内存。*/ aos_pool_destroy(pool); /* 释放之前分配的全局资源。*/ aos_http_io_deinitialize(); return 0; }
- 基础操作
图片处理工具
您可以通过可视化图片处理工具ImageStyleViever直观地看到OSS图片处理结果。
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论