圖片處理是OSS提供的海量、安全、低成本、高可靠的圖片處理服務。原始圖片上傳到OSS后,您可以通過簡單的RESTful接口,在任何時間、任何地點、任何互聯網設備上對圖片進行處理。
圖片處理使用
圖片處理使用標準的HTTP GET請求。您可以在URL的QueryString中設置處理參數。
如果圖片文件的訪問權限為私有,必須通過授權才能進行訪問。
匿名訪問
如果圖片文件(Object)的訪問權限是
公共讀
,如下表所示的權限,則可以匿名訪問圖片服務。Bucket權限
Object權限
公共讀私有寫(public-read)或公共讀寫(public-read-write)
默認(default)
任意權限
公共讀私有寫(public-read)或公共讀寫(public-read-write)
您可以通過如下格式的三級域名匿名訪問處理后的圖片:
http://<yourBucketName>.<yourEndpoint>/<yourObjectName>?x-oss-process=image/<yourAction>,<yourParamValue>
參數
描述
yourBucketName
存儲空間名稱
yourEndpoint
存儲空間所在地域的訪問域名
yourObjectName
圖片文件名稱
image
圖片處理的保留標志符
yourAction
對圖片做的操作,如縮放、裁剪、旋轉等
yourParamValue
對圖片做的操作所對應的參數
基礎操作
例如,將圖縮略成寬度為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
授權訪問
對私有權限的文件(Object),如下表所示的權限,必須通過授權才能訪問圖片服務。
Bucket權限
Object權限
私有(private)
默認權限(default)
任意權限
私有(private)
以下代碼用于生成帶簽名的圖片處理URL:
const OSS = require("ali-oss"); const client = new OSS({ // yourregion填寫Bucket所在地域。以華東1(杭州)為例,Region填寫為oss-cn-hangzhou。 region: "oss-cn-hangzhou", // 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 accessKeyId: process.env.OSS_ACCESS_KEY_ID, accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET, authorizationV4: true, // yourbucketname填寫存儲空間名稱。 bucket: "examplebucket", }); // 過期時間10分鐘,圖片處理式樣"image/resize,w_300"。 const signUrl = client.signatureUrl("example.png", { expires: 600, process: "image/resize,w_300", }); console.log("signUrl=" + signUrl);
說明授權訪問支持自定義樣式、HTTPS、以及級聯處理。
指定過期時間expires的單位是秒。
SDK訪問
對于任意權限的圖片文件,都可以直接使用SDK訪問和處理。
SDK處理圖片文件支持自定義樣式、HTTPS和級聯處理。
基礎操作
以下代碼展示了圖片處理的基礎操作:
const OSS = require('ali-oss'); const client = new OSS({ // yourregion填寫Bucket所在地域。以華東1(杭州)為例,Region填寫為oss-cn-hangzhou。 region: 'yourregion', // 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 accessKeyId: process.env.OSS_ACCESS_KEY_ID, accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET, authorizationV4: true, // yourbucketname填寫存儲空間名稱。 bucket: 'yourbucketname' }); // 將圖片縮放為固定寬高100 px。 async function scale() { try { const result = await client.get('example.jpg', './example-resize.jpg', { process: 'image/resize,m_fixed,w_100,h_100'}); } catch (e) { console.log(e); } } scale() // 從坐標(100,100)開始,將圖片裁剪為寬高100 px。 async function cut() { try { const result = await client.get('example.jpg', './example-crop.jpg', { process: 'image/crop,w_100,h_100,x_100,y_100,r_1'}); } catch (e) { console.log(e) } } cut() // 將圖片旋轉90°。 async function rotate() { try { const result = await client.get('example.jpg', './example-rotate.jpg', { process: 'image/rotate,90'}); } catch (e) { console.log(e); } } rotate() // 將圖片進行銳化,銳化參數為100。 async function sharpen() { try { const result = await client.get('example.jpg', './example-sharpen.jpg', { process: 'image/sharpen,100'}); } catch (e) { console.log(e); } } sharpen() // 在圖片中添加水印。 async function watermark() { try { const result = await client.get('example.jpg', './example-watermark.jpg', { process: 'image/watermark,text_SGVsbG8g5Zu-54mH5pyN5YqhIQ'}); } catch (e) { console.log(e); } } watermark() // 將圖片進行格式轉換。 async function format() { try { const result = await client.get('example.jpg', './example-format.jpg', { process: 'image/format,png'}); } catch (e) { console.log(e); } } format() // 獲取圖片信息。 async function info() { try { const result = await client.get('example.jpg', './example-info.txt', {process: 'image/info'}); } catch (e) { console.log(e); } } info()
自定義樣式
說明需要事先到OSS控制臺添加自定義式樣example-style。
以下代碼用于自定義圖片樣式:
const OSS = require('ali-oss'); const client = new OSS({ // yourregion填寫Bucket所在地域。以華東1(杭州)為例,Region填寫為oss-cn-hangzhou。 region: 'yourregion', // 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 accessKeyId: process.env.OSS_ACCESS_KEY_ID, accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET, authorizationV4: true, // yourbucketname填寫存儲空間名稱。 bucket: 'yourbucketname' }); // 將圖片縮放為固定寬高100 px。 async function scale() { try { const result = await client.get('example.jpg', './example-resize.jpg', { process: 'image/resize,m_fixed,w_100,h_100'}); } catch (e) { console.log(e); } } scale() // 從坐標(100,100)開始,將圖片裁剪為寬高100 px。 async function cut() { try { const result = await client.get('example.jpg', './example-crop.jpg', { process: 'image/crop,w_100,h_100,x_100,y_100,r_1'}); } catch (e) { console.log(e) } } cut() // 將圖片旋轉90°。 async function rotate() { try { const result = await client.get('example.jpg', './example-rotate.jpg', { process: 'image/rotate,90'}); } catch (e) { console.log(e); } } rotate() // 將圖片進行銳化,銳化參數為100。 async function sharpen() { try { const result = await client.get('example.jpg', './example-sharpen.jpg', { process: 'image/sharpen,100'}); } catch (e) { console.log(e); } } sharpen() // 在圖片中添加水印。 async function watermark() { try { const result = await client.get('example.jpg', './example-watermark.jpg', { process: 'image/watermark,text_SGVsbG8g5Zu-54mH5pyN5YqhIQ'}); } catch (e) { console.log(e); } } watermark() // 將圖片進行格式轉換。 async function format() { try { const result = await client.get('example.jpg', './example-format.jpg', { process: 'image/format,png'}); } catch (e) { console.log(e); } } format() // 獲取圖片信息。 async function info() { try { const result = await client.get('example.jpg', './example-info.txt', {process: 'image/info'}); } catch (e) { console.log(e); } } info()
級聯處理
以下代碼用于級聯處理圖片:
const OSS = require('ali-oss'); const client = new OSS({ // yourregion填寫Bucket所在地域。以華東1(杭州)為例,Region填寫為oss-cn-hangzhou。 region: 'yourregion', // 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 accessKeyId: process.env.OSS_ACCESS_KEY_ID, accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET, authorizationV4: true, // yourbucketname填寫存儲空間名稱。 bucket: 'yourbucketname' }); // 級聯處理 async function cascade () { try { const result = await client.get('example.jpg', './example-cascade.jpg', {process: 'image/resize,m_fixed,w_100,h_100/rotate,90'}); } catch (e) { console.log(e); } } cascade();
圖片處理持久化
以下代碼用于圖片處理持久化:
const OSS = require('ali-oss');
const client = new OSS({
// yourregion填寫Bucket所在地域。以華東1(杭州)為例,Region填寫為oss-cn-hangzhou。
region: 'yourregion',
// 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// yourbucketname填寫存儲空間名稱。
bucket: 'yourbucketname'
});
const sourceImage = 'sourceObject.png';
const targetImage = 'targetObject.jpg';
async function processImage(processStr, targetBucket) {
const result = await client.processObjectSave(
sourceImage,
targetImage,
processStr,
targetBucket
);
console.log(result.res.status);
}
// 圖片處理持久化:縮放,并設置保存圖片處理持久化結果的目標bucket。
processImage("image/resize,m_fixed,w_100,h_100", "target bucket")
// 圖片處理持久化:裁剪,并設置保存圖片處理持久化結果的目標bucket。
processImage("image/crop,w_100,h_100,x_100,y_100,r_1", "target bucket")
// 圖片處理持久化:旋轉,并設置保存圖片處理持久化結果的目標bucket。
processImage("image/rotate,90", "target bucket")
// 圖片處理持久化:銳化,并設置保存圖片處理持久化結果的目標bucket。
processImage("image/sharpen,100", "target bucket")
// 圖片處理持久化:水印,并設置保存圖片處理持久化結果的目標bucket。
processImage("image/watermark,text_SGVsbG8g5Zu-54mH5pyN5YqhIQ", "target bucket")
// 圖片處理持久化:格式轉換,并設置保存圖片處理持久化結果的目標bucket。
processImage("image/format,jpg", "target bucket")
// 圖片處理持久化:格式轉換,并設置保存圖片處理持久化結果的目標bucket。
processImage("image/format,jpg", "target bucket")
圖片處理工具
可視化圖片處理工具ImageStyleViewer,可以直觀的看到OSS圖片處理的結果。