圖片服務都是使用標準的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

通過樣式來請求縮圖

Style(樣式)

圖片處理可將用戶的圖片處理操作和參數保存成一個別名,即樣式。利用樣式功能後,原本一系列操作,只需要用一個很短的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 (頻道)

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動圖由於資源消耗原因目前只支援一級處理。如不能在縮略操作後直接進行圖片裁剪。