OSS の画像処理 (IMG) を使用すると、ソースオブジェクトを変更することなく、OSS に保存されている画像のサイズ変更、クロップ、回転、変換ができます。処理はダウンロード時に実行されます。リクエストに x-oss-process パラメーターをアタッチすると、OSS は変換された画像を返します。
前提条件
開始する前に、以下を確認してください:
初期化済みの
OSSClientインスタンス。カスタムドメイン名や Security Token Service (STS) などの設定オプションについては、「初期化」をご参照ください。OSS バケットにアップロードされた画像オブジェクト
仕組み
3つのアクセス方法はすべて同じパターンに従います。ダウンロードリクエストに x-oss-process:<operation> をアタッチします。操作文字列は、適用する変換を指定します。
たとえば、image/resize,m_fixed,w_100,h_100 は、画像を 100×100 ピクセルに正確にサイズ変更します。別の変換を適用するには、この文字列を対応する IMG パラメーターに置き換えます。完全なリストについては、「IMG パラメーター」をご参照ください。
IMG パラメーターは、ダウンロードされた画像データにのみ適用されます。OSS のソースオブジェクトは変更されません。処理済みの画像を新しいオブジェクトとして保存する方法については、「処理済み画像の保存」をご参照ください。
画像処理の適用
ユースケースに合ったアクセス方法を選択してください:
| メソッド | 使用シーン |
|---|---|
| 権限付きアクセス | Android SDK を使用した署名付きダウンロードリクエスト — 最も一般的なアプローチ |
| OSS SDK を使用したアクセス | 最小限の設定で SDK をシンプルに使用 |
| 匿名アクセス | 署名を必要としないパブリック読み取り可能なオブジェクト |
権限付きアクセス
request.setxOssProcess() を呼び出して、署名付きダウンロードリクエストに処理パラメーターをアタッチします。
// ダウンロードリクエストを作成します。
// "examplebucket" をご使用のバケット名に置き換えます。
// "exampledir/exampleobject.jpg" を完全なオブジェクトパス (バケット名を除く) に置き換えます。
GetObjectRequest request = new GetObjectRequest("examplebucket", "exampledir/exampleobject.jpg");
// 画像処理パラメーターをアタッチします。
// 値を適用したい IMG 操作に置き換えます。
request.setxOssProcess("image/resize,m_fixed,w_100,h_100");
OSSAsyncTask task = oss.asyncGetObject(request, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>() {
@Override
public void onSuccess(GetObjectRequest request, GetObjectResult result) {
InputStream inputStream = result.getObjectContent();
byte[] buffer = new byte[2048];
int len;
try {
while ((len = inputStream.read(buffer)) != -1) {
// ダウンロードした画像データを処理します。
}
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(GetObjectRequest request, ClientException clientException, ServiceException serviceException) {
// 必要に応じて例外を処理します。
}
});別の変換を適用するには、setxOssProcess() に渡す値を置き換えます。たとえば、画像を 90 度回転させるには、"image/rotate,90" を使用します。
OSS SDK を使用したアクセス
GetObjectRequest request = new GetObjectRequest("bucket-name", "image-name");
request.setxOssProcess("image/resize,m_lfit,w_100,h_100");
OSSAsyncTask task = ossClient.asyncGetObject(request, getCallback);匿名アクセス
パブリック読み取り可能なオブジェクトの場合、presignPublicObjectURL() で URL を生成し、クエリパラメーターとして x-oss-process:<operation> を追加します。
String url = oss.presignPublicObjectURL(testBucket, testObject);
OSSLog.logDebug("signPublicURL", "get url: " + url);
// URL に x-oss-process を追加します。
// 例: url + "?x-oss-process=image/resize,m_fixed,w_100,h_100"処理済み画像の保存
処理済みの画像を OSS の新しいオブジェクトとして永続化するには、ImagePersistRequest と asyncImagePersist() を使用します。
以下のパラメーターが必要です:
| パラメーター | 説明 | 例 |
|---|---|---|
fromBucket | ソースバケット名 | my-source-bucket |
fromObjectKey | ソースオブジェクトの完全なパス (ファイル拡張子を含む) | photos/sample.jpg |
toBucket | 宛先バケット名 | my-output-bucket |
toObjectKey | 宛先オブジェクトの完全なパス (ファイル拡張子を含む) | processed/sample-resized.jpg |
action | 適用する IMG 操作文字列 | image/resize,m_lfit,w_100,h_100 |
ImagePersistRequest request = new ImagePersistRequest(
fromBucket,
fromObjectKey,
toBucket,
toObjectKey,
action
);
OSSAsyncTask task = oss.asyncImagePersist(request, new OSSCompletedCallback<ImagePersistRequest, ImagePersistResult>() {
@Override
public void onSuccess(ImagePersistRequest request, ImagePersistResult result) {
Log.i("info", "Success");
}
@Override
public void onFailure(ImagePersistRequest request, ClientException clientException, ServiceException serviceException) {
if (clientException != null) {
// ネットワークの問題など、クライアント側でエラーが発生しました。
clientException.printStackTrace();
}
if (serviceException != null) {
// サーバー側でエラーが発生しました。
Log.e("ErrorCode", serviceException.getErrorCode());
Log.e("RequestId", serviceException.getRequestId());
Log.e("HostId", serviceException.getHostId());
Log.e("RawMessage", serviceException.getRawMessage());
}
}
});次のステップ
IMG パラメーター — サポートされているすべての画像変換の完全なリファレンス
初期化 —
OSSClientインスタンスの設定