使用方式
更新時間 2024-12-13 09:39:12
最近更新時間: 2024-12-13 09:39:12
分享文章
本文幫助您了解如何通過URL和SDK處理圖片。
您可以通過URL和SDK兩種方式對圖片進行處理。
通過URL處理圖片
操作場景
開通對象存儲ZOS并上傳圖片后,您可在瀏覽器地址輸入URL處理圖片。
通過URL處理圖片有兩種方式:針對公共讀對象,可直接在URL中添加參數處理圖片;針對私有對象,通過SDK預簽名接口生成URL后拼接圖片處理請求。
注意通過URL訪問圖片時,瀏覽器會默認下載圖片。
公共讀對象
URL格式
//bucket-name.endpoint/object-name?x-zos-process=image/action,param_value
//bucket-name.endpoint:Bucket外網訪問地址。其中,bucket-name為桶名,endpoint為桶對應的地域域名。object-name:想要訪問的圖片名稱。x-zos-process=image/:固定參數,表示該請求是圖片處理相關請求。action,param_value:圖片處理的操作(action)、參數(param)和值(value),用于定義圖片處理的方式。多個操作以正斜線(/)隔開,操作后的不同參數通過逗號(,)隔開,參數后接下劃線(_)并拼接參數具體的值。ZOS按圖片處理參數的順序處理圖片。例如,“image/resize,p_30/rotate,90”表示將圖片先按比例縮放至原圖的30%,再將圖片旋轉90°。支持的參數,請參見圖片處理參數。
示例
//bucket-test.changsha42.zos.daliqc.cn/test.jpg?x-zos-process=image/resize,w_500,h_500/rotate,180
上述請求會對長沙42資源池的bucket-test桶中的test.jpg圖片對象,進行圖片處理操作,并將處理后的圖片下載到本地。圖片處理的具體操作為:首先將圖片縮放為500 px*500 px,然后再將其旋轉180°。
私有對象
URL格式
通過SDK的generate_presigned_url預簽名接口,生成指定對象的get_object訪問權限,然后在其生成的URL后面拼接圖片處理請求。URL格式為:
//endpoint/bucketname/objectname?AWSAccessKeyId=xxx&Expires=xxx&Signature=xxx&x-zos-process=image/action,param_value
//endpoint/bucketname/objectname?AWSAccessKeyId=xxx&Expires=xxx&Signature=xxx:使用SDK預簽名生成的URL。x-zos-process=image/:固定參數,表示該請求是圖片處理相關請求。action,param_value:圖片處理的操作(action)、參數(param)和值(value),用于定義圖片處理的方式。多個操作以正斜線(/)隔開,操作后的不同參數通過逗號(,)隔開,參數后接下劃線(_)并拼接參數具體的值。ZOS按圖片處理參數的順序處理圖片。例如,“image/resize,p_30/rotate,90”表示將圖片先按比例縮放至原圖的30%,再將圖片旋轉90°。支持的參數,請參見圖片處理參數。
示例
//ip:port/bucket/mypic.jpg?AWSAccessKeyId=xxx&Expires=xxx&Signature=xxx&x-zos-process=image/resize,w_500,h_500/rotate,180
上述請求為對bucket桶中的mypic.jpg圖片對象進行縮放和旋轉操作:首先將圖片縮放為500 px*500 px,然后再將其旋轉180°。
注意當前拼接請求操作僅支持v2認證方式,v4認證方式拼接URL后會導致請求失敗。具體SDK預簽名方式參考對應的SDK開發者文檔。
通過SDK處理圖片
操作場景
您可以通過在SDK中添加參數的方式來處理圖片。
示例
以java為例,介紹了圖片處理的簡單使用方式,更多語言的圖片處理SDK請參考開發者文檔。
import?com.amazonaws.ClientConfiguration;??
import?com.amazonaws.auth.AWSCredentials;??
import?com.amazonaws.auth.AWSStaticCredentialsProvider;??
import?com.amazonaws.auth.BasicAWSCredentials;??
import?com.amazonaws.client.builder.AwsClientBuilder;??
import?com.amazonaws.services.s3.AmazonS3;??
import?com.amazonaws.services.s3.AmazonS3ClientBuilder;??
import?com.amazonaws.Protocol;??
import?com.amazonaws.services.s3.model.GetObjectRequest;??
import?com.amazonaws.services.s3.model.S3Object;??
import?java.io.*;??
import?java.util.Base64;??
??
public?class?picturedemo?{??
????//?訪問憑證,填寫用戶的AK與SK??
????public?static?String?ACCESS_KEY?=?"ACCESS_KEY";??
????public?static?String?SECRET_KEY?=?"SECRET_KEY";??
????//?endpoint為控制臺域名信息中的終端節點
????public?static?String?END_POINT?=?"END_POINT";??
????//?填寫桶名??
????public?static?String?BUCKET_NAME?=?"BUCKET_NAME";??
????//?填寫待操作圖片對象完整路徑??
????public?static?String?OBJ_KEY?=?"OBJ_KEY";??
????//?填寫處理后圖片對象待保存至本地的路徑??
????public?static?String?SAVE_PATH?=?"./test.png";??
??
????public?static?void?main(String[]?args)?{??
????????AmazonS3?s3Client;??
????????//?當使用HTTPS協議且采用自簽名認證時,需關閉證書檢查??
????????//?System.setProperty("com.amazonaws.sdk.disableCertChecking",?"true");??
????????//?使用憑據和配置建立連接??
????????AWSCredentials?credentials?=?new?BasicAWSCredentials(ACCESS_KEY,?SECRET_KEY);??
????????ClientConfiguration?awsClientConfig?=?new?ClientConfiguration();??
??
????????//?使用V2簽名時,采用"S3SignerType"??
????????awsClientConfig.setSignerOverride("S3SignerType");??
????????//?使用V4簽名時,采用"AWSS3V4SignerType"??
????????//?awsClientConfig.setSignerOverride("AWSS3V4SignerType");??
??
????????//?連接默認使用HTTPS協議,使用HTTP協議連接時需要顯式指定??
????????awsClientConfig.setProtocol(Protocol.HTTP);??
????????s3Client?=?AmazonS3ClientBuilder.standard()??
????????????????.withCredentials(new?AWSStaticCredentialsProvider(credentials))??
????????????????.withClientConfiguration(awsClientConfig)??
????????????????.withEndpointConfiguration(new?AwsClientBuilder.EndpointConfiguration(END_POINT,?""))??
????????????????.disableChunkedEncoding()??
????????????????.build();??
??
????????GetObjectRequest?request?=?new?GetObjectRequest(BUCKET_NAME,?OBJ_KEY);??
????????//?圖片處理具體操作,將圖片在(10,10)處裁剪300*200大小的矩形,再旋轉90°??
????????String?imageop?=?"image/crop,w_300,h_200,x_10,y_10/rotate,90";??
????????request.setZosProcess(imageop);??
????????S3Object?result?=?s3Client.getObject(request);??
????????System.out.print("=====request?success=====\n");??
??
????????//?將下載的圖片保存到本地??
????????try?{??
????????????InputStream?in?=?result.getObjectContent();??
????????????File?outputFile?=?new?File(SAVE_PATH);??
????????????FileOutputStream?outputStream?=?new??
????????????????????FileOutputStream(outputFile);??
????????????byte[]?read_buf?=?new?byte[1024?*?1024];??
????????????int?read_len?=?0;??
????????????while?((read_len?=?in.read(read_buf))?>?0)?{??
????????????????outputStream.write(read_buf,?0,?read_len);??
????????????}??
????????????in.close();??
????????????outputStream.close();??
????????}?catch?(IOException?e){??
????????????e.printStackTrace();??
????????}??
????}??
}??