tencent cloud

Feedback

Basic Image Processing

Last updated: 2022-07-25 16:00:16

    Overview

    This document provides an overview of APIs and SDK code samples for basic image processing.

    API Description
    Scaling Scales up/down an image.
    Cropping Crops an image, including regular cropping, scaling and cropping, cropping to circle, rounded corner cropping, and smart face cropping.
    Rotation Rotates an image, including regular rotation and adaptive rotation.
    Format conversion Converts the format of an image, optimizes the GIF format, and performs progressive display.
    Quality change Adjusts the quality of an image.
    Gaussian blurring Blurs an image by a Gaussian function.
    Sharpening Sharpens an image.
    Image watermark Adds a watermark to an image.
    Text watermark Adds a real-time text watermark to an image.
    Basic image information acquisition Queries the basic information of an image, such as format, width, and height.
    Image EXIF data acquisition Queries the EXIF data of an image.
    Image average hue acquisition Queries the average hue of an image.
    Metadata removal Removes the image metadata, including the EXIF data.
    Quick thumbnail template Generates a thumbnail through an image processing template.
    Pipeline operator Performs multiple operations on an image in sequence.

    Scaling

    Feature description

    CI uses the imageMogr2 API to scale images.

    Sample request

    #include "cos_http_io.h"
    #include "cos_api.h"
    #include "cos_log.h"
    #include <unistd.h>
    // `endpoint` is the COS access domain name. For more information, visit https://www.tencentcloud.com/document/product/436/6224?from_cn_redirect=1.
    static char TEST_COS_ENDPOINT[] = "cos.ap-guangzhou.myqcloud.com";
    // A developer-owned secret ID/key used for the project. It can be obtained at https://console.tencentcloud.com/cam/capi.
    static char *TEST_ACCESS_KEY_ID;                //your secret_id
    static char *TEST_ACCESS_KEY_SECRET;            //your secret_key
    // A unique user-level resource identifier for COS access. It can be obtained at https://console.tencentcloud.com/cam/capi.
    static char TEST_APPID[] = "<APPID>";    //your appid
    // COS bucket name in the format of [bucket]-[appid], for example, `mybucket-1253666666`. It can be obtained at https://console.tencentcloud.com/cos5/bucket.
    static char TEST_BUCKET_NAME[] = "<bucketname-appid>"; 
    void log_status(cos_status_t *s)
    {
      cos_warn_log("status->code: %d", s->code);
      if (s->error_code) cos_warn_log("status->error_code: %s", s->error_code);
      if (s->error_msg) cos_warn_log("status->error_msg: %s", s->error_msg);
      if (s->req_id) cos_warn_log("status->req_id: %s", s->req_id);
    }
    void init_test_config(cos_config_t *config, int is_cname)
    {
      cos_str_set(&config->endpoint, TEST_COS_ENDPOINT);
      cos_str_set(&config->access_key_id, TEST_ACCESS_KEY_ID);
      cos_str_set(&config->access_key_secret, TEST_ACCESS_KEY_SECRET);
      cos_str_set(&config->appid, TEST_APPID);
      config->is_cname = is_cname;
    }
    void init_test_request_options(cos_request_options_t *options, int is_cname)
    {
      options->config = cos_config_create(options->pool);
      init_test_config(options->config, is_cname);
      options->ctl = cos_http_controller_create(options->pool, 0);
    }
    void test_image_scale()
    {
      cos_pool_t *p = NULL;
      int is_cname = 0; 
      cos_status_t *s = NULL;
      cos_request_options_t *options = NULL;
      cos_string_t bucket;
      cos_string_t object;
      cos_string_t file;
      cos_table_t *resp_headers;
      cos_table_t *params = NULL;
      
      cos_pool_create(&p, NULL);
      options = cos_request_options_create(p);
      init_test_request_options(options, is_cname);
      cos_str_set(&bucket, TEST_BUCKET_NAME);
       params = cos_table_make(p, 1);
      apr_table_addn(params, "imageMogr2/thumbnail/!50p", "");
      cos_str_set(&file, "test.jpg");
      cos_str_set(&object, "test.jpg");
      s = cos_get_object_to_file(options, &bucket, &object, NULL, params, &file, &resp_headers);
      log_status(s);
      if (!cos_status_is_ok(s)) {
          printf("cos_get_object_to_file fail, req_id:%s\n", s->req_id);
      }
      cos_pool_destroy(p);
    }
    int main(int argc, char *argv[])
    {
      // Get `SECRETID` and `SECRETKEY` from environment variables
      TEST_ACCESS_KEY_ID     = getenv("COS_SECRETID");
      TEST_ACCESS_KEY_SECRET = getenv("COS_SECRETKEY");
        if (cos_http_io_initialize(NULL, 0) != COSE_OK) {
         exit(1);
      }
       //set log level, default COS_LOG_WARN
      cos_log_set_level(COS_LOG_WARN);
       //set log output, default stderr
      cos_log_set_output(NULL);
       test_image_scale();
       cos_http_io_deinitialize();
       return 0;
    }
    

    Cropping

    Feature description

    CI uses the imageMogr2 API to crop images, including regular cropping, scaling and cropping, cropping to circle, rounded corner cropping, and smart face cropping.

    Sample request

    #include "cos_http_io.h"
    #include "cos_api.h"
    #include "cos_log.h"
    #include <unistd.h>
    // `endpoint` is the COS access domain name. For more information, visit https://www.tencentcloud.com/document/product/436/6224?from_cn_redirect=1.
    static char TEST_COS_ENDPOINT[] = "cos.ap-guangzhou.myqcloud.com";
    // A developer-owned secret ID/key used for the project. It can be obtained at https://console.tencentcloud.com/cam/capi.
    static char *TEST_ACCESS_KEY_ID;                //your secret_id
    static char *TEST_ACCESS_KEY_SECRET;            //your secret_key
    // A unique user-level resource identifier for COS access. It can be obtained at https://console.tencentcloud.com/cam/capi.
    static char TEST_APPID[] = "<APPID>";    //your appid
    // COS bucket name in the format of [bucket]-[appid], for example, `mybucket-1253666666`. It can be obtained at https://console.tencentcloud.com/cos5/bucket.
    static char TEST_BUCKET_NAME[] = "<bucketname-appid>"; 
    void log_status(cos_status_t *s)
    {
      cos_warn_log("status->code: %d", s->code);
      if (s->error_code) cos_warn_log("status->error_code: %s", s->error_code);
      if (s->error_msg) cos_warn_log("status->error_msg: %s", s->error_msg);
      if (s->req_id) cos_warn_log("status->req_id: %s", s->req_id);
    }
    void init_test_config(cos_config_t *config, int is_cname)
    {
      cos_str_set(&config->endpoint, TEST_COS_ENDPOINT);
      cos_str_set(&config->access_key_id, TEST_ACCESS_KEY_ID);
      cos_str_set(&config->access_key_secret, TEST_ACCESS_KEY_SECRET);
      cos_str_set(&config->appid, TEST_APPID);
      config->is_cname = is_cname;
    }
    void init_test_request_options(cos_request_options_t *options, int is_cname)
    {
      options->config = cos_config_create(options->pool);
      init_test_config(options->config, is_cname);
      options->ctl = cos_http_controller_create(options->pool, 0);
    }
    void test_image_cut()
    {
      cos_pool_t *p = NULL;
      int is_cname = 0; 
      cos_status_t *s = NULL;
      cos_request_options_t *options = NULL;
      cos_string_t bucket;
      cos_string_t object;
      cos_string_t file;
      cos_table_t *resp_headers;
      cos_table_t *params = NULL;
      
      cos_pool_create(&p, NULL);
      options = cos_request_options_create(p);
      init_test_request_options(options, is_cname);
      cos_str_set(&bucket, TEST_BUCKET_NAME);
       params = cos_table_make(p, 1);
      apr_table_addn(params, "imageMogr2/cut/600x600x100x10", "");
      cos_str_set(&file, "test.jpg");
      cos_str_set(&object, "test.jpg");
      s = cos_get_object_to_file(options, &bucket, &object, NULL, params, &file, &resp_headers);
      log_status(s);
      if (!cos_status_is_ok(s)) {
          printf("cos_get_object_to_file fail, req_id:%s\n", s->req_id);
      }
      cos_pool_destroy(p);
    }
    int main(int argc, char *argv[])
    {
      // Get `SECRETID` and `SECRETKEY` from environment variables
      TEST_ACCESS_KEY_ID     = getenv("COS_SECRETID");
      TEST_ACCESS_KEY_SECRET = getenv("COS_SECRETKEY");
        if (cos_http_io_initialize(NULL, 0) != COSE_OK) {
         exit(1);
      }
       //set log level, default COS_LOG_WARN
      cos_log_set_level(COS_LOG_WARN);
       //set log output, default stderr
      cos_log_set_output(NULL);
       test_image_cut();
       cos_http_io_deinitialize();
       return 0;
    }
    

    Other basic image processing operations

    Feature description

    You can perform other basic processing operations on images by changing the value of the operation parameter. For example, you can rotate the image clockwise by 90 degrees as follows:

    #include "cos_http_io.h"
    #include "cos_api.h"
    #include "cos_log.h"
    #include <unistd.h>
    // `endpoint` is the COS access domain name. For more information, visit https://www.tencentcloud.com/document/product/436/6224?from_cn_redirect=1.
    static char TEST_COS_ENDPOINT[] = "cos.ap-guangzhou.myqcloud.com";
    // A developer-owned secret ID/key used for the project. It can be obtained at https://console.tencentcloud.com/cam/capi.
    static char *TEST_ACCESS_KEY_ID;                //your secret_id
    static char *TEST_ACCESS_KEY_SECRET;            //your secret_key
    // A unique user-level resource identifier for COS access. It can be obtained at https://console.tencentcloud.com/cam/capi.
    static char TEST_APPID[] = "<APPID>";    //your appid
    // COS bucket name in the format of [bucket]-[appid], for example, `mybucket-1253666666`. It can be obtained at https://console.tencentcloud.com/cos5/bucket.
    static char TEST_BUCKET_NAME[] = "<bucketname-appid>"; 
    void log_status(cos_status_t *s)
    {
      cos_warn_log("status->code: %d", s->code);
      if (s->error_code) cos_warn_log("status->error_code: %s", s->error_code);
      if (s->error_msg) cos_warn_log("status->error_msg: %s", s->error_msg);
      if (s->req_id) cos_warn_log("status->req_id: %s", s->req_id);
    }
    void init_test_config(cos_config_t *config, int is_cname)
    {
      cos_str_set(&config->endpoint, TEST_COS_ENDPOINT);
      cos_str_set(&config->access_key_id, TEST_ACCESS_KEY_ID);
      cos_str_set(&config->access_key_secret, TEST_ACCESS_KEY_SECRET);
      cos_str_set(&config->appid, TEST_APPID);
      config->is_cname = is_cname;
    }
    void init_test_request_options(cos_request_options_t *options, int is_cname)
    {
      options->config = cos_config_create(options->pool);
      init_test_config(options->config, is_cname);
      options->ctl = cos_http_controller_create(options->pool, 0);
    }
    void test_image_rotate()
    {
      cos_pool_t *p = NULL;
      int is_cname = 0; 
      cos_status_t *s = NULL;
      cos_request_options_t *options = NULL;
      cos_string_t bucket;
      cos_string_t object;
      cos_string_t file;
      cos_table_t *resp_headers;
      cos_table_t *params = NULL;
      
      cos_pool_create(&p, NULL);
      options = cos_request_options_create(p);
      init_test_request_options(options, is_cname);
      cos_str_set(&bucket, TEST_BUCKET_NAME);
       params = cos_table_make(p, 1);
      apr_table_addn(params, "imageMogr2/rotate/90", "");
      cos_str_set(&file, "test.jpg");
      cos_str_set(&object, "test.jpg");
      s = cos_get_object_to_file(options, &bucket, &object, NULL, params, &file, &resp_headers);
      log_status(s);
      if (!cos_status_is_ok(s)) {
          printf("cos_get_object_to_file fail, req_id:%s\n", s->req_id);
      }
      cos_pool_destroy(p);
    }
    int main(int argc, char *argv[])
    {
      // Get `SECRETID` and `SECRETKEY` from environment variables
      TEST_ACCESS_KEY_ID     = getenv("COS_SECRETID");
      TEST_ACCESS_KEY_SECRET = getenv("COS_SECRETKEY");
        if (cos_http_io_initialize(NULL, 0) != COSE_OK) {
         exit(1);
      }
       //set log level, default COS_LOG_WARN
      cos_log_set_level(COS_LOG_WARN);
       //set log output, default stderr
      cos_log_set_output(NULL);
       test_image_rotate();
       cos_http_io_deinitialize();
       return 0;
    }
    
    Contact Us

    Contact our sales team or business advisors to help your business.

    Technical Support

    Open a ticket if you're looking for further assistance. Our Ticket is 7x24 avaliable.

    7x24 Phone Support