圖片處理是OSS提供的海量、安全、低成本、高可靠的圖片處理服務。原始圖片上傳到OSS后,您可以通過簡單的RESTful接口,在任何時間、任何地點、任何互聯網設備上對圖片進行處理。
注意事項
本文以華東1(杭州)外網Endpoint為例。如果您希望通過與OSS同地域的其他阿里云產品訪問OSS,請使用內網Endpoint。關于OSS支持的Region與Endpoint的對應關系,請參見OSS地域和訪問域名。
本文以OSS域名新建OSSClient為例。如果您希望通過自定義域名、STS等方式新建OSSClient,請參見初始化。
使用圖片處理參數處理圖片
使用單個圖片處理參數處理圖片并保存為本地圖片
using System; using System.IO; using Aliyun.OSS; using Aliyun.OSS.Common; using Aliyun.OSS.Util; namespace Samples { public class Program { public static void Main(string[] args) { // yourEndpoint填寫Bucket所在地域對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。 var endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID"); var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET"); // 指定原圖所在的Bucket名稱,例如examplebucket。 var bucketName = "examplebucket"; // 指定原圖名稱。如果圖片不在Bucket根目錄,需攜帶圖片完整路徑,例如exampledir/example.jpg。 var objectName = "exampledir/example.jpg"; // 指定原圖所在的本地完整路徑。 var localImageFilename = "D:\\localpath\\example.jpg"; // 填寫Bucket所在地域對應的Region。以華東1(杭州)為例,Region填寫為cn-hangzhou。 const string region = "cn-hangzhou"; // 創建ClientConfiguration實例,按照您的需要修改默認參數。 var conf = new ClientConfiguration(); // 設置v4簽名。 conf.SignatureVersion = SignatureVersion.V4; // 創建OssClient實例。 var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf); c.SetRegion(region); try { // 將圖片縮放為固定寬高100 px。 var process = "image/resize,m_fixed,w_100,h_100"; var ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process)); // 指定處理后的圖片名稱。 WriteToFile(localImageFilename, 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); } } } } }
使用不同的圖片處理參數處理圖片并分別保存為本地圖片
using System; using System.IO; using Aliyun.OSS; using Aliyun.OSS.Common; using Aliyun.OSS.Util; namespace Samples { public class Program { public static void Main(string[] args) { // yourEndpoint填寫Bucket所在地域對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。 var endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID"); var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET"); // 指定原圖所在的Bucket名稱,例如examplebucket。 var bucketName = "examplebucket"; // 指定原圖名稱。如果圖片不在Bucket根目錄,需攜帶圖片完整路徑,例如exampledir/example.jpg。 var objectName = "exampledir/example.jpg"; // 指定原圖所在的本地完整路徑。 var localImageFilename = "D:\\localpath\\example.jpg"; // 填寫Bucket所在地域對應的Region。以華東1(杭州)為例,Region填寫為cn-hangzhou。 const string region = "cn-hangzhou"; // 創建ClientConfiguration實例,按照您的需要修改默認參數。 var conf = new ClientConfiguration(); // 設置v4簽名。 conf.SignatureVersion = SignatureVersion.V4; // 創建OssClient實例。 var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf); c.SetRegion(region); try { // 若目標圖片不在目標Bucket內,需上傳圖片到目標Bucket。 // client.PutObject(bucketName, objectName, localImageFilename); // 將圖片縮放為固定寬高100 px。 var process = "image/resize,m_fixed,w_100,h_100"; var ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process)); // 指定處理后的圖片名稱。 WriteToFile(localImageFilename, ossObject.Content); // 從坐標(100,100)開始,將圖片裁剪為寬高100 px。 process = "image/crop,w_100,h_100,x_100,y_100"; ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process)); WriteToFile(localImageFilename , ossObject.Content); // 將圖片旋轉90°。 process = "image/rotate,90"; ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process)); WriteToFile(localImageFilename , 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); } } } } }
使用多個圖片處理參數處理圖片并保存為本地圖片
使用多個圖片處理參數處理圖片時,多個參數之間以正斜線(/)分隔。
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() { // yourEndpoint填寫Bucket所在地域對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。 var endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID"); var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET"); // 指定原圖所在的Bucket名稱,例如examplebucket。 var bucketName = "examplebucket"; // 指定原圖名稱。如果圖片不在Bucket根目錄,需攜帶圖片完整路徑,例如exampledir/example.jpg。 var objectName = "exampledir/example.jpg"; // 指定原圖所在的本地完整路徑。 var localImageFilename = "D:\\localpath\\example.jpg"; // 填寫Bucket所在地域對應的Region。以華東1(杭州)為例,Region填寫為cn-hangzhou。 const string region = "cn-hangzhou"; // 創建ClientConfiguration實例,按照您的需要修改默認參數。 var conf = new ClientConfiguration(); // 設置v4簽名。 conf.SignatureVersion = SignatureVersion.V4; // 創建OssClient實例。 var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf); c.SetRegion(region); try { // 如果原圖不在目標Bucket內,需上傳該圖片到目標Bucket。 // client.PutObject(bucketName, objectName, localImageFilename); // 將圖片縮放為固定寬高100 px后,再旋轉90°。 var process = "image/resize,m_fixed,w_100,h_100/rotate,90"; var ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process)); // 指定處理后的圖片名稱。 WriteToFile(localImageFilename, 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()
{
// yourEndpoint填寫Bucket所在地域對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
var endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// 指定原圖所在的Bucket名稱,例如examplebucket。
var bucketName = "examplebucket";
// 指定原圖名稱。如果圖片不在Bucket根目錄,需攜帶圖片完整路徑,例如exampledir/example.jpg。
var objectName = "exampledir/example.jpg";
// 指定原圖所在的本地完整路徑。
var localImageFilename = "D:\\localpath\\example.jpg";
// 填寫Bucket所在地域對應的Region。以華東1(杭州)為例,Region填寫為cn-hangzhou。
const string region = "cn-hangzhou";
// 創建ClientConfiguration實例,按照您的需要修改默認參數。
var conf = new ClientConfiguration();
// 設置v4簽名。
conf.SignatureVersion = SignatureVersion.V4;
// 創建OssClient實例。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
c.SetRegion(region);
try
{
// 如果原圖不在目標Bucket內,需上傳該圖片到目標Bucket。
// client.PutObject(bucketName, objectName, localImageFilename);
// 使用圖片樣式處理圖片。其中,yourCustomStyleName填寫通過OSS管理控制臺創建的圖片樣式名稱。
var process = "style/yourCustomStyleName";
var ossObject = client.GetObject(new GetObjectRequest(bucketName, objectName, process));
// 指定處理后的圖片名稱。
WriteToFile(localImageFilename, 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);
}
}
}
}
}
生成帶圖片處理參數的文件簽名URL
私有文件的訪問URL帶有簽名。OSS不支持在帶簽名的URL后直接添加圖片處理參數。如果您想要對私有文件進行圖片處理,需要將圖片處理參數加入到簽名中,相關的代碼示例如下:
using Aliyun.OSS;
using Aliyun.OSS.Common;
// yourEndpoint填寫Bucket所在地域對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
var endpoint = "yourEndpoint";
// 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// 指定圖片所在Bucket的名稱,例如examplebucket。
var bucketName = "examplebucket";
// 指定圖片名稱。如果圖片不在Bucket根目錄,需攜帶文件完整路徑,例如exampledir/example.jpg。
var objectName = "exampledir/exampledir.jpg";
// 填寫Bucket所在地域對應的Region。以華東1(杭州)為例,Region填寫為cn-hangzhou。
const string region = "cn-hangzhou";
// 創建ClientConfiguration實例,按照您的需要修改默認參數。
var conf = new ClientConfiguration();
// 設置v4簽名。
conf.SignatureVersion = SignatureVersion.V4;
// 創建OssClient實例。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
c.SetRegion(region);
try
{
// 將圖片縮放為固定寬高100 px。
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);
}
圖片處理工具
您可以通過可視化圖片處理工具ImageStyleViewer直觀地看到OSS圖片處理結果。
相關文檔
文檔內容是否對您有幫助?