图片处理
图片处理是OSS提供的海量、安全、低成本、高可靠的图片处理服务。原始图片上传到OSS后,您可以通过简单的RESTful接口,在任何时间、任何地点、任何互联网设备上对图片进行处理。
图片处理的详细信息请参见OSS图片处理指南。
图片处理功能
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:
using Aliyun.OSS; using Aliyun.OSS.Common; var endpoint = "<yourEndpoint>"; var accessKeyId = "<yourAccessKeyId>"; var accessKeySecret = "<yourAccessKeySecret>"; var bucketName = "<yourBucketName>"; var objectName = "<yourObjectName>"; // 创建OssClient实例。 var client = new OssClient(endpoint, accessKeyId, accessKeySecret); try { 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 }; // 生成带有签名的URI。 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); }
- SDK访问
对于任意权限的图片文件,都可以直接使用SDK访问和处理。
SDK处理图片文件支持自定义样式、HTTPS和级联处理。
- 基础操作
以下代码展示了图片处理的基础操作:
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>"; var localImageFilename = "<yourLocalImageFilename>"; var downloadDir = "<yourDownloadDir>"; // 创建OssClient实例。 var client = new OssClient(endpoint, accessKeyId, accessKeySecret); try { client.PutObject(bucketName, objectName, localImageFilename); // 图片缩放 var process = "image/resize,m_fixed,w_100,h_100"; var ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process)); WriteToFile(downloadDir + "/sample-resize.jpg", ossObject.Content); // 图片裁剪 process = "image/crop,w_100,h_100,x_100,y_100,r_1"; ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process)); WriteToFile(downloadDir + "/sample-crop.jpg", ossObject.Content); // 图片旋转 process = "image/rotate,90"; ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process)); WriteToFile(downloadDir + "/sample-rotate.jpg", ossObject.Content); // 图片锐化 process = "image/sharpen,100"; ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process)); WriteToFile(downloadDir + "/sample-sharpen.jpg", ossObject.Content); // 图片加水印 process = "image/watermark,text_SGVsbG8g5Zu-54mH5pyN5YqhIQ"; ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process)); WriteToFile(downloadDir + "/sample-watermark.jpg", ossObject.Content); // 图片格式转换 process = "image/format,png"; ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process)); WriteToFile(downloadDir + "/sample-format.png", ossObject.Content); // 图片信息 process = "image/info"; ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process)); WriteToFile(downloadDir + "/sample-info.txt", 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); } } } } }
- 自定义样式
以下代码用于自定义图片样式:
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() { var endpoint = "<yourEndpoint>"; var accessKeyId = "<yourAccessKeyId>"; var accessKeySecret = "<yourAccessKeySecret>"; var bucketName = "<yourBucketName>"; var objectName = "<yourObjectName>"; var localImageFilename = "<yourLocalImageFilename>"; var downloadDir = "<yourDownloadDir>"; // 创建OssClient实例。 var client = new OssClient(endpoint, accessKeyId, accessKeySecret); try { client.PutObject(bucketName, objectName, localImageFilename); // 自定义样式:"style/<yourCustomStyleName>"。 var process = "style/oss-pic-style-w-100"; var ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process)); WriteToFile(downloadDir + "/sample-style.jpg", 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); } } } } }
- 级联处理
以下代码用于级联处理图片:
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() { var endpoint = "<yourEndpoint>"; var accessKeyId = "<yourAccessKeyId>"; var accessKeySecret = "<yourAccessKeySecret>"; var bucketName = "<yourBucketName>"; var objectName = "<yourObjectName>"; var localImageFilename = "<yourLocalImageFilename>"; var downloadDir = "<yourDownloadDir>"; // 创建OssClient实例。 var client = new OssClient(endpoint, accessKeyId, accessKeySecret); try { client.PutObject(bucketName, objectName, localImageFilename); // 级联处理。 var process = "image/resize,m_fixed,w_100,h_100/rotate,90"; var ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process)); WriteToFile(downloadDir + "/sample-style.jpg", 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); } } } } }
- 基础操作
图片处理工具
您可以通过可视化图片处理工具ImageStyleViewer直观地看到OSS图片处理结果。
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论