Image Processing (IMG) provided by Object Storage Service (OSS) is a secure, cost-effective, and highly reliable image processing service that can process large amounts of data. After you upload source images to OSS, you can call RESTful APIs to process the images anytime, anywhere, and on all Internet devices.

For more information about IMG parameters, see Parameters.

Use a single IMG parameter to process images

  • The following code provides an example on how to use a single IMG parameter to process an image and save the image to your computer:
    using System;
    using System.IO;
    using Aliyun.OSS;
    using Aliyun.OSS.Common;
    using Aliyun.OSS.Util;
    namespace ImageProcess
    {
        class Program
        {
            static void Main(string[] args)
            {
                Program.ImageProcess();
                Console.ReadKey();
            }
            public static void ImageProcess()
            {
                var endpoint = "<yourEndpoint>";
                var accessKeyId = "<yourAccessKeyId>";
                var accessKeySecret = "<yourAccessKeySecret>";
                var bucketName = "<yourBucketName>";
                var objectName = "<yourObjectName>";
                // Specify the name of the local image to upload the image. 
                // var localImageFilename = "<yourLocalImageFilename>";
                // Specify the local directory to which the processed image is saved. 
                var downloadDir = "<yourDownloadDir>";
                // Create an OSSClient instance. 
                var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
                try
                {
                    // If the image does not exist in the required bucket, you must upload the image to the bucket.    
                    // client.PutObject(bucketName, objectName, localImageFilename);
                    // Resize the image to the height and width of 100 pixels. 
                    var process = "image/resize,m_fixed,w_100,h_100";
                    var ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process));
                    // Specify the name of the processed image. 
                    WriteToFile(downloadDir + "/<LocalFilename>", ossObject.Content);
                }
                catch (OssException ex)
                {
                    Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
                        ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Failed with error info: {0}", ex.Message);
                }
            }
            private static void WriteToFile(string filePath, Stream stream)
            {
                using (var requestStream = stream)
                {
                    using (var fs = File.Open(filePath, FileMode.OpenOrCreate))
                    {
                        IoUtils.WriteTo(stream, fs);
                    }
                }
            }
        }
    }
  • Use different IMG parameters to process an image and separately save the image as a local image
    using System;
    using System.IO;
    using Aliyun.OSS;
    using Aliyun.OSS.Common;
    using Aliyun.OSS.Util;
    namespace ImageProcess
    {
        class Program
        {
            static void Main(string[] args)
            {
                Program.ImageProcess();
                Console.ReadKey();
            }
            public static void ImageProcess()
            {
                var endpoint = "<yourEndpoint>";
                var accessKeyId = "<yourAccessKeyId>";
                var accessKeySecret = "<yourAccessKeySecret>";
                var bucketName = "<yourBucketName>";
                var objectName = "<yourObjectName>";
                // Specify the name of the local image to upload the image. 
                // var localImageFilename = "<yourLocalImageFilename>";
                // Specify the local directory to which the processed image is saved. 
                var downloadDir = "<yourDownloadDir>";
                // Create an OSSClient instance. 
                var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
                try
                {
                    // If the image does not exist in the required bucket, you must upload the image to the bucket.    
                    // client.PutObject(bucketName, objectName, localImageFilename);
                    // Resize the image to the height and width of 100 pixels. 
                    var process = "image/resize,m_fixed,w_100,h_100";
                    var ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process));
                    // Specify the name of the processed image. 
                    WriteToFile(downloadDir + "/<LocalFilename>", ossObject.Content);
                    // Crop the image to the height and width of 100 pixels by setting the coordinate pair to (100, 100). 
                    process = "image/crop,w_100,h_100,x_100,y_100";
                    ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process));
                    WriteToFile(downloadDir + "/<LocalFilename>", ossObject.Content);
                    // Rotate the image 90 degrees. 
                    process = "image/rotate,90";
                    ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process));
                    WriteToFile(downloadDir + "/<LocalFilename>", ossObject.Content);
                }
                catch (OssException ex)
                {
                    Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
                        ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Failed with error info: {0}", ex.Message);
                }
            }
            private static void WriteToFile(string filePath, Stream stream)
            {
                using (var requestStream = stream)
                {
                    using (var fs = File.Open(filePath, FileMode.OpenOrCreate))
                    {
                        IoUtils.WriteTo(stream, fs);
                    }
                }
            }
        }
    }
  • Use multiple IMG parameters to process an image and save the image to your computer
    The following code provides an example on how to use multiple IMG parameters to process an image. Separate these parameters with forward slashes (/).
    using System;
    using System.IO;
    using Aliyun.OSS;
    using Aliyun.OSS.Common;
    using Aliyun.OSS.Util;
    namespace ImageProcessCascade
    {
        class Program
        {
            static void Main(string[] args)
            {
                Program.ImageProcessCascade();
                Console.ReadKey();
            }
            public static void ImageProcessCascade()
            {
                // Set yourEndpoint to the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. 
                var endpoint = "yourEndpoint";
                // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations in OSS is a high-risk operation. We recommend that you use a Resource Access Management (RAM) user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. 
                var accessKeyId = "yourAccessKeyId";
                var accessKeySecret = "yourAccessKeySecret";
                // Specify the name of the bucket in which the source image is stored. Example: examplebucket. 
                var bucketName = "examplebucket";
                // Specify the name of the source image. If the image is not stored in the root directory of the bucket, you must add the full path of the image. Example: exampledir/example.jpg. 
                var objectName = "exampledir/example.jpg";
                // Specify the local full path of the source image. 
                // var localImageFilename = "D:\\localpath\\example.jpg";
                // Specify the local directory to which the processed image is saved. 
                var downloadDir = "yourDownloadDir";
                // Create an OSSClient instance. 
                var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
                try
                {
                    // If the image does not exist in the required bucket, you must upload the image to the bucket.    
                    // client.PutObject(bucketName, objectName, localImageFilename);
                    // After you resize the image to the height and width of 100 pixels, rotate the image 90 degrees. 
                    var process = "image/resize,m_fixed,w_100,h_100/rotate,90";
                    var ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process));
                    // Specify the name of the processed image. 
                    WriteToFile(downloadDir + "/yourLocalFilename", ossObject.Content);
                    Console.WriteLine("Get Object:{0} with process:{1} succeeded ", objectName, process);
                }
                catch (OssException ex)
                {
                    Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
                        ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Failed with error info: {0}", ex.Message);
                }
            }
            private static void WriteToFile(string filePath, Stream stream)
            {
                using (var requestStream = stream)
                {
                    using (var fs = File.Open(filePath, FileMode.OpenOrCreate))
                    {
                        IoUtils.WriteTo(stream, fs);
                    }
                }
            }
        }
    }

Use an image style to process images

You can encapsulate multiple IMG parameters in a style, and then use the style to concurrently process multiple images. For more information, see Image styles. The following code provides an example on how to use an image style to process an image:
using System;
using System.IO;
using Aliyun.OSS;
using Aliyun.OSS.Common;
using Aliyun.OSS.Util;
namespace ImageProcessCustom
{
    class Program
    {
        static void Main(string[] args)
        {
            Program.ImageProcessCustomStyle();
            Console.ReadKey();
        }
        public static void ImageProcessCustomStyle()
        {
            // Set yourEndpoint to the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. 
            var endpoint = "yourEndpoint";
            // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations in OSS is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. 
            var accessKeyId = "yourAccessKeyId";
            var accessKeySecret = "yourAccessKeySecret";
            // Specify the name of the bucket in which the source image is stored. Example: examplebucket. 
            var bucketName = "examplebucket";
            // Specify the name of the source image. If the image is not stored in the root directory of the bucket, you must add the full path of the image. Example: exampledir/example.jpg. 
            var objectName = "exampledir/example.jpg";
            // Specify the local full path of the source image. 
            // var localImageFilename = "D:\\localpath\\example.jpg";
            // Specify the local directory to which the processed image is saved. 
            var downloadDir = "yourDownloadDir";
            // Create an OSSClient instance. 
            var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
            try
            {
                // If the image does not exist in the required bucket, you must upload the image to the bucket.    
                // client.PutObject(bucketName, objectName, localImageFilename);
                // Use the image style to process the image. Set yourCustomStyleName to the name of the image style you create in the OSS console. 
                var process = "style/yourCustomStyleName";
                var ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process));
                // Specify the name of the processed image.             
                WriteToFile(downloadDir + "/yourLocalFilename", ossObject.Content);
                Console.WriteLine("Get Object:{0} with process:{1} succeeded ", objectName, process);
            }
            catch (OssException ex)
            {
                Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
                    ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Failed with error info: {0}", ex.Message);
            }
        }
        private static void WriteToFile(string filePath, Stream stream)
        {
            using (var requestStream = stream)
            {
                using (var fs = File.Open(filePath, FileMode.OpenOrCreate))
                {
                    IoUtils.WriteTo(stream, fs);
                }
            }
        }
    }
}

Generate a signed object URL that includes IMG parameters

URLs of private objects must be signed. IMG parameters cannot be added to the end of a signed URL. If you want to process a private object, add IMG parameters to the signature. The following code provides an example on how to add IMG parameters to the signature:
using Aliyun.OSS;
using Aliyun.OSS.Common;

// Set yourEndpoint to the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. 
var endpoint = "yourEndpoint";
// The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. Using these credentials to perform operations in OSS is a high-risk operation. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. 
var accessKeyId = "yourAccessKeyId";
var accessKeySecret = "yourAccessKeySecret";
// Specify the name of the bucket in which the source image is stored. Example: examplebucket. 
var bucketName = "examplebucket";
// Specify the name of the source image. If the image is not stored in the root directory of the bucket, you must add the full path of the image. Example: exampledir/example.jpg. 
var objectName = "exampledir/exampledir.jpg";
// Create an OSSClient instance. 
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
try
{
    // Resize the image to the height and width of 100 pixels. 
    var process = "image/resize,m_fixed,w_100,h_100";
    var req = new GeneratePresignedUriRequest(bucketName, objectName, SignHttpMethod.Get)
    {
        Expiration = DateTime.Now.AddHours(1),
        Process = process
    };
    // Generate a signed object URL that includes IMG parameters. 
    var uri = client.GeneratePresignedUri(req);
    Console.WriteLine("Generate Presigned Uri:{0} with process:{1} succeeded ", uri, process);
}
catch (OssException ex)
{
    Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
        ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
    Console.WriteLine("Failed with error info: {0}", ex.Message);
}