GetObject リクエストに画像サイズ変更パラメーターを追加することで、画像のサイズを変更できます。
利用シーン
-
Web デザイン: Web デザインおよびモバイルアプリケーション開発では、レスポンシブ表示を実現するために、さまざまな画面サイズや解像度に対応した画像が使用されます。
-
ソーシャルメディア: プラットフォームはユーザーがアップロードした画像を処理し、プレビュー用に標準的なディメンションに変換します。
-
画像認識と分析: コンピュータビジョンおよび機械学習において、画像のスケーリングにより処理効率が向上します。
制限事項
|
制限 |
項目 |
説明 |
|
ソース画像の制限 |
画像フォーマット |
ソース画像は、JPG、PNG、BMP、GIF、WebP、TIFF、または HEIC 形式である必要があります。 |
|
ファイルサイズ |
ソース画像のサイズは 20 MB を超えることはできません。この制限を引き上げるには、クォータセンターでリクエストを送信してください。 |
|
|
幅と高さ |
ソース画像の幅または高さは 30,000 px を超えることができず、総ピクセル数は 2 億 5 千万 px を超えることはできません。 説明
アニメーション画像 (例: GIF) の場合、総ピクセル数は |
|
|
スケーリング後の画像の制限 |
画像のスケーリング |
スケーリング後の画像の幅または高さは 16,384 px を超えることができず、総ピクセル数は 16,777,216 px を超えることはできません。 |
操作手順
OSS では、画像 URL に ?x-oss-process=image/resize,parameter_value パラメーターを追加すると、OSS がリアルタイムで画像を処理し、結果を返します。image/resize はサイズ変更操作を指定し、parameter はサポートされているサイズ変更パラメーター、value はその対応する値です。すべてのパラメーターの詳細については、「パラメーター」をご参照ください。複数のパラメーターを組み合わせることもできます。
公開読み取りの画像の場合、処理パラメーターを画像 URL に追加することで、処理済み画像を永続的に匿名でアクセス可能にできます。画像が非公開の場合は、SDK を使用して署名付き URL を生成するか、API オペレーションを呼び出して画像を処理する必要があります。
公開読み取りの画像
公開読み取りの画像を処理するには、その URL に ?x-oss-process=image/resize,parameter_value パラメーターを追加します。parameter_value は、必要なパラメーターと値に置き換えてください。
|
元の画像 URL |
サイズ変更パラメーター付きの画像 URL |
|
https://oss-console-img-demo-cn-hangzhou-3az.oss-cn-hangzhou.aliyuncs.com/example1.jpg |
非公開の画像
OSS SDK を使用して、画像サイズ変更パラメーターを含む署名付き URL を生成できます。これにより、URL 所有者は処理済み画像に一時的にアクセスできます。以下の例は、非公開画像に対して ?x-oss-process=image/resize,parameter_value パラメーターを含む署名付き URL を生成する方法を示しています。
Java
package com.aliyun.oss.demo;
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.GeneratePresignedUrlRequest;
import java.net.URL;
import java.util.Date;
public class Demo {
public static void main(String[] args) throws Throwable {
// この例では中国 (杭州) リージョンのエンドポイントを使用しています。実際のエンドポイントに置き換えてください。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 認証情報を環境変数から取得します。コードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// バケット名を指定します。例: examplebucket。
String bucketName = "examplebucket";
// オブジェクトの完全なパスを指定します。オブジェクトがバケットのルートディレクトリにない場合は、完全なパス (例: exampledir/exampleobject.png) を含める必要があります。
String objectName = "exampledir/exampleobject.png";
// バケットが配置されているリージョン ID を指定します。例: 中国 (杭州) のリージョン ID は cn-hangzhou です。
String region = "cn-hangzhou";
// OSSClient インスタンスを作成します。
// OSSClient インスタンスが不要になったら、shutdown メソッドを呼び出してリソースを解放します。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// 画像をサイズ変更します。parameter_value を特定のパラメーターと値に置き換えてください。たとえば、p_50 は画像を元のサイズの 50 % に比例的にスケーリングします。
String style = "image/resize,parameter_value";
// 署名付き URL の有効期限を指定します。この例では、署名付き URL の有効期限は 3,600 秒です。
Date expiration = new Date(new Date().getTime() + 3600 );
GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.GET);
req.setExpiration(expiration);
req.setProcess(style);
URL signedUrl = ossClient.generatePresignedUrl(req);
System.out.println(signedUrl);
} catch (OSSException oe) {
System.out.println("OSSException が発生しました。これは、リクエストが OSS に到達したものの、何らかの理由でエラー応答により拒否されたことを意味します。");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("ClientException が発生しました。これは、クライアントが OSS との通信中に深刻な内部問題 (ネットワークにアクセスできないなど) に遭遇したことを意味します。");
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
Python
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 認証情報を環境変数から取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケット名を指定します。
bucket = 'examplebucket'
# バケットが配置されているリージョンのエンドポイントを指定します。この例では中国 (杭州) リージョンを使用しています。
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# リージョン ID を指定します。
region = 'cn-hangzhou'
bucket = oss2.Bucket(auth, endpoint, bucket, region=region)
# ソース画像の名前を指定します。画像がバケットのルートディレクトリにない場合は、完全なパス (例: exampledir/exampleobject.jpg) を含めてください。
key = 'exampledir/exampleobject.png'
# 有効期限を秒単位で指定します。
expire_time = 3600
# 画像をサイズ変更します。parameter_value を特定のパラメーターと値に置き換えてください。たとえば、p_50 は画像を元のサイズの 50 % に比例的にスケーリングします。
image_process = 'image/resize,parameter_value'
# 画像処理パラメーターを含む署名付き URL を生成します。
url = bucket.sign_url('GET', key, expire_time, params={'x-oss-process': image_process}, slash_safe=True)
# 署名付き URL を出力します。
print(url)
PHP
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
// 認証情報を環境変数から取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
$provider = new EnvironmentVariableCredentialsProvider();
// $endpoint をバケットのリージョンエンドポイントに設定します。たとえば、中国 (杭州) リージョンのバケットの場合は https://oss-cn-hangzhou.aliyuncs.com を使用します。
$endpoint = "yourEndpoint";
// バケット名を指定します。例: examplebucket。
$bucket= "examplebucket";
// オブジェクトの完全なパスを指定します (例: exampledir/exampleobject.jpg)。完全なパスにはバケット名を含めないでください。
$object = "exampledir/exampleobject.jpg";
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region"=> "cn-hangzhou"
);
$ossClient = new OssClient($config);
// 画像処理パラメーターを含む署名付き URL を生成します。URL の有効期間は 3,600 秒で、ブラウザで直接アクセスできます。
$timeout = 3600;
$options = array(
// 画像をサイズ変更します。parameter_value を特定のパラメーターと値に置き換えてください。たとえば、p_50 は画像を元のサイズの 50 % に比例的にスケーリングします。
OssClient::OSS_PROCESS => "image/resize,parameter_value");
$signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "GET", $options);
print("signed url: \n" . $signedUrl);
Go
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func HandleError(err error) {
fmt.Println("Error:", err)
os.Exit(-1)
}
func main() {
// 認証情報を環境変数から取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// OSSClient インスタンスを作成します。
// yourEndpoint をバケットのリージョンエンドポイントに設定します。この例では中国 (杭州) リージョンの https://oss-cn-hangzhou.aliyuncs.com を使用しています。実際のエンドポイントに置き換えてください。
// yourRegion をバケットが配置されているリージョンに設定します。この例では中国 (杭州) リージョンの cn-hangzhou を使用しています。実際のリージョンに置き換えてください。
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// 署名バージョンを設定します。
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
HandleError(err)
}
// バケット名を指定します。
bucketName := "examplebucket"
bucket, err := client.Bucket(bucketName)
if err != nil {
HandleError(err)
}
// 画像の完全なパスを指定します。画像がバケットのルートディレクトリにない場合は、完全なパス (例: exampledir/exampleobject.png) を含めてください。
ossImageName := "exampledir/exampleobject.png"
// 有効期間が 3,600 秒の署名付き URL を生成します。最大有効期間は 32,400 秒です。
// 画像をサイズ変更します。parameter_value を特定のパラメーターと値に置き換えてください。たとえば、p_50 は画像を元のサイズの 50 % に比例的にスケーリングします。
signedURL, err := bucket.SignURL(ossImageName, oss.HTTPGet, 3600, oss.Process("image/resize,parameter_value"))
if err != nil {
HandleError(err)
} else {
fmt.Println(signedURL)
}
}
生成された署名付き URL の例を以下に示します。
https://examplebucket.oss-cn-hangzhou.aliyuncs.com/exampledir/exampleobject.png?x-oss-process=image%2Fresize%2Cp_50&x-oss-date=20241111T113707Z&x-oss-expires=3600&x-oss-signature-version=OSS4-HMAC-SHA256&x-oss-credential=LTAI********************%2F20241111%2Fcn-hangzhou%2Foss%2Faliyun_v4_request&x-oss-signature=6fd07a2ba50bf6891474dc56aed976b556b6fbcd901cfd01bcde5399bf4802cb
他の SDK を使用したサイズ変更の例については、「SDK リファレンス」をご参照ください。
パラメーター
操作:resize
比例スケーリング
p パラメーターは、元のサイズに対するパーセンテージで画像をスケーリングします。
|
パラメーター |
説明 |
値 |
|
p |
パーセンテージでのスケーリング係数。 |
[1, 1000] の範囲の整数。 100 未満の値は画像を縮小し、100 を超える値は画像を拡大します。 |
アニメーション画像は、この比例スケーリングをサポートしていません。
幅と高さによるスケーリング
w パラメーターおよび h パラメーターを使用して幅と高さを指定し、m パラメーターを使用してスケーリングモードを制御します。最長辺または最短辺を制御するには、l パラメーターまたは s パラメーターを使用します。拡大を許可するには、limit パラメーターを 0 に設定します。
|
パラメーター |
説明 |
値 |
|
w |
出力画像の幅をピクセル単位で指定します。 |
[1,16384] |
|
h |
出力画像の高さをピクセル単位で指定します。 |
[1,16384] |
|
m |
スケーリングモードを指定します。 |
さまざまなスケーリングモードの動作の詳細については、「スケーリングの計算方法」をご参照ください。 説明
|
|
l |
出力画像の最長辺をピクセル単位で指定します。 説明
最長辺とは、幅と高さのうち大きい方を指します。たとえば、100 px × 200 px の画像の場合、最長辺は 200 px、最短辺は 100 px です。 |
[1,16384] |
|
s |
出力画像の最短辺をピクセル単位で指定します。 |
[1,16384] |
|
limit |
ターゲットディメンションが元の画像ディメンションより大きい場合に、拡大を許可するかどうかを指定します。 重要
デフォルトでは、ターゲットディメンションが元の画像より大きい場合、元の画像が返されます。拡大を許可するには、 |
説明
アニメーション画像の場合、幅と高さを指定して縮小することのみが可能です。比例スケーリングおよび拡大はサポートされていません。 |
|
color |
スケーリングモードが pad (パディング付きスケーリング) に設定されている場合、パディング色を設定できます。 |
RGB カラー値。たとえば、000000 は黒、FFFFFF は白を表します。 デフォルト値: FFFFFF (白) |
-
幅または高さのいずれか一方のみを指定した場合:
-
スケーリングモードが lfit、mfit、または fixed の場合、画像は比例的にスケーリングされます。たとえば、ソース画像が 256 px × 144 px で、高さを 100 px にスケーリングすると、幅は 178 px にスケーリングされます。
-
スケーリングモードが pad または fill の場合、ソース画像の幅と高さは指定された値にスケーリングされます。たとえば、ソース画像が 256 px × 144 px で、高さを 100 px にスケーリングすると、幅も 100 px にスケーリングされます。
-
-
lパラメーターまたはsパラメーターのいずれか一方のみを指定した場合、画像は指定された辺の長さに比例的にスケーリングされます。mパラメーターは無視されます。 -
lパラメーターおよびsパラメーターの両方を指定した場合、mパラメーターがスケーリング動作を決定します。縦横比は常に保持されます。mパラメーターが指定されていない場合、デフォルトのlfitモードが使用されます。
スケーリング方法
|
元の画像サイズ |
ターゲットサイズ |
スケーリングモード |
スケーリング後のサイズ |
|
200 px × 100 px |
150 px × 80 px |
lfit (デフォルト) ターゲットディメンション内に収まる最大のサムネイルを生成するように、画像を比例的にスケーリングします。 |
150 px × 75 px
|
|
mfit ターゲットディメンションを完全にカバーする最小のサムネイルを生成するように、画像を比例的にスケーリングします。 |
160 px × 80 px
|
||
|
fill ターゲットの幅と高さを完全にカバーするように画像を比例的にスケーリングし、余分な部分をトリミングしてターゲットディメンションに合わせます。 |
150 px × 80 px
|
||
|
pad ターゲットの幅と高さ内に収まるように画像を比例的にスケーリングし、残りの領域を単色でパディングしてターゲットディメンションに合わせます。 |
150 px × 80 px
|
||
|
fixed 縦横比を無視して、画像を正確な幅と高さにスケーリングします。これにより、画像が歪む可能性があります。 |
150 px × 80 px
|
lfit モードおよび mfit モードでは、スケーリング計算の結果が小数値になる場合、ディメンションは最も近い整数に四捨五入されます。
例
課金
画像のスケーリングには、以下の料金が発生します。料金の詳細については、「OSS 料金」をご参照ください。
-
API
課金項目
説明
GetObject
GET リクエスト
成功したリクエストの数に基づいて、リクエスト料金が発生します。
インターネット経由のアウトバウンドトラフィック
パブリックエンドポイント (例: oss-cn-hangzhou.aliyuncs.com) またはアクセラレーションエンドポイント (例: oss-accelerate.aliyuncs.com) を使用して GetObject オペレーションを呼び出す場合、データサイズに基づいてインターネット経由のアウトバウンドトラフィック料金が発生します。
IA オブジェクトの取得
IA オブジェクトを取得する場合、取得された IA データのサイズに基づいて IA データ取得料金が発生します。
リアルタイムアクセスが有効化されたバケット内のアーカイブオブジェクトの取得
リアルタイムアクセスが有効化されたバケット内のアーカイブオブジェクトを取得する場合、取得されたアーカイブオブジェクトのサイズに基づいてアーカイブデータ取得料金が発生します。
転送アクセラレーション料金
転送アクセラレーションを有効にしてアクセラレーションエンドポイントを使用してバケットにアクセスする場合、データサイズに基づいて転送アクセラレーション料金が発生します。
関連 API
高度なカスタマイズを行うには、REST API リクエストを直接実行できます。これには、コード内で署名を手動で計算する必要があります。Authorization ヘッダー値の計算方法の詳細については、「署名バージョン 4 (推奨)」をご参照ください。
画像を処理するには、GetObject オペレーションに画像サイズ変更パラメーターを追加します。詳細については、「GetObject」オペレーションをご参照ください。
GET /oss.jpg?x-oss-process=image/resize,p_50 HTTP/1.1
Host: oss-example.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 28 Oct 2022 06:40:10 GMT
Authorization: SignatureValue



















