圖片服務都是使用標準的HTTP的GET請求來訪問的,所有的處理參數也在URL的QueryString中。
通過處理參數來請求縮圖
如果用戶對原圖進行一定的處理再返回,可有兩種形式:
- 通過URL的形式
通過第三層網域名訪問: http://bucket.<endpoint>/object?x-oss-process=image/action,parame_value
- Bucket:用戶的IMG頻道。
- endpoint:用戶的Bucket所在資料中心的訪問網域名稱。
- Object:在IMG中,用戶操作圖片的基本數據單元是Object。即OSS對應的Object,單個Object(即每張圖片)允許的最大大小是20MB。
- action:用戶對圖片做的操作。
- parame:用戶對圖片做的操作所對應的參數。
- 多個action之間組合形式
多個action之間效果順序執行,例如:
image/resize,w_200/rotate,90
表示圖片先進行寬為200的縮放,再進行90度的旋轉。
假如請求Bucket是 image-demo,該Bucket區域在 華東1,對應的網域名稱是 oss-cn-hangzhou.aliyuncs.com,請求圖片是 example.jpg,對圖片進行按目標寬度200進行縮略。
http://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,w_200
如果是https方式,訪問形式如下:
https://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,w_200
通過用戶自訂網域名訪問連結如下:
http://userdomain/object?x-oss-process=image/action,parame_value
通過樣式來請求縮圖
圖片處理可將用戶的圖片處理操作和參數保存成一個別名,即樣式。利用樣式功能後,原本一系列操作,只需要用一個很短的URL就能實現相同的效果。
- 一個Channel下面有多個樣式,目前一個Channel允許最多有50個樣式。
- 樣式適應於Channel下面的Object映像變化操作。假如在A Channel下面有樣式,名稱為abc,樣式內容是100w.jpg(按寬縮略成100,保存成jpg格式)那麼A Channel下面所有的Object都能使用樣式abc,實現縮略成100w.jpg的效果。
- 樣式的作用範圍只在一個Channel下,即A Channel不能使用B Channel的樣式。
Style命名規範:
- 長度為1-63個字元。
- 只能包含數字、大小寫字母、底線(_)、短橫線(-)以及小數點(.)。
Channel是IMG上的命名空間,也是計費、許可權控制、日誌記錄等進階功能的管理實體。IMG名稱在整個圖片處理服務中具有全域唯一性,且不能修改。一個用戶最多可建立10個Channel,但每個Channel中存放的Object的數量沒有限制。
圖片服務的資料中心和OSS的資料中心相對應。用戶在OSS的某個資料中心上建立一個Bucket,再選擇開通圖片服務,對應的Channel也屬於該資料中心。目前Channel跟OSS的Bucket相對應,即用戶只能建立與自己在OSS上Bucket同名的Channel。
Channel命名規範:
- 只能包括小寫字母,數字,短橫線(-)。
- 必須以小寫字母或者數字開頭和結尾。
- 長度必須在 3-63 位元組之間。
為簡化使用,用戶可以將特定的處理方法保存為樣式,這樣以後調用同樣的處理方法只需指定某個樣式即可。使用樣式來進行圖片處理的URL形式如下:
http://userdomain/object?x-oss-process=style/name可以將上述處理參數保存成樣式 style-example。假如請求Bucket為 image-demo,該Bucket區域在 華東1,對應的網域名稱是 oss-cn-hangzhou.aliyuncs.com,請求圖片是 example.jpg,訪問圖片的樣式是 style-example,那麼訪問形式如下:
]http://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=style/style-example
如果是https方式,訪問形式如下:
https://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=style/style-example
使用SDK方式
除了public bucket可以直接通過url方式進訪問,對於private的檔案,我們一般採用SDK的方式來訪問。因為圖片處理服務都是 GET 操作,所以在Get Object基礎上面添加process參數即可。
以Python SDK為例:
bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)
key = 'example.jpg'
new_pic = 'new-example.jpg'
process = "image/resize,m_fixed,w_100,h_100" //對於圖片進行強制縮略
bucket.get_object_to_file(key, new_pic, process=process)
OSS SDK使用圖片服務,請參看SDK文檔中的圖片服務部分。部分SDK圖片處理的連結見下表:
SDK | 圖片處理文檔 | 使用樣本 |
---|---|---|
Java SDK | 圖片處理 | ImageSample.java |
Python SDK | 圖片處理 | image.py |
C# SDK | 圖片處理 | ImageProcessSample.cs |
PHP SDK | 圖片處理 | Image.php |
JS SDK | 圖片處理 | object.test.js |
C SDK | 圖片處理 | oss_image_sample.c |
圖片處理限制
- 圖片處理支援的格式有:jpg、png、bmp、gif、webp、tiff。
- 指定縮圖寬度或者高度時,在等比縮放的情況下,都會預設進行單邊的縮放。在固定寬高的模式下,會預設在寬高一樣的情況下進行縮放。
- 對縮略後的圖片大小有限制,目標縮圖的寬與高的乘積不能超過4096 x 4096, 且單邊的長度不能超過4096 x 4。
- 調用resize,預設不允許放大。如果請求圖片比原圖大,那麼返回的仍然是原圖。如果想得到放大的圖片,需要增加參數調用
limit,0
。 - gif,webp動圖由於資源消耗原因目前只支援一級處理。如不能在縮略操作後直接進行圖片裁剪。