イメージのサイズを変更して、イメージの読み込みを高速化したり、ストレージ使用量を削減したり、帯域幅コストを削減したり、イメージを適切なサイズで表示したりできます。 Object Storage Service (OSS) は、バケット内の画像のサイズを変更するためのサイズ変更アクションを提供します。 このトピックでは、サイズ変更操作で使用されるパラメーターについて説明し、画像のサイズ変更の例をいくつか示します。
使用上の注意
ソースイメージの制限
JPG、PNG、BMP、GIF、WebP、TIFF、HEICの画像形式がサポートされています。
重要GIFイメージのサイズは、指定された幅と高さに基づいて縮小できますが、パーセンテージで縮小することはできません。 画像のサイズをパーセンテージで縮小すると、GIF画像は静止画像になります。
GIF画像は拡大できません。
ソースイメージのサイズは20 MBを超えることはできません。 ソースイメージのサイズの制限を調整するために適用できます。クォータセンター.
説明ソースイメージのサイズの制限は、イメージのサイズ変更パラメータを使用してイメージのサイズを変更する場合にのみ調整できます。
ソースイメージの幅または高さは30,000ピクセルを超えることはできません。 ソースイメージのピクセルの総数は250万を超えることはできません。
GIF画像などの動画像の総画素数は、
幅 × 高さ × 画像フレーム数
の式を用いて算出される。 PNG画像のような静止画像のピクセルの総数は、以下の式、幅 × 高さ
を使用することによって計算される。
サイズ変更された画像の制限
サイズ変更された画像の幅または高さは16,384ピクセルを超えることはできません。 サイズ変更された画像のピクセルの総数は16,777,216を超えることはできません。
優先順位の変更
幅と高さに基づくサイズ変更とURLの比例サイズ変更の両方のパラメーターを指定すると、指定した幅と高さに基づいて画像のサイズが変更されます。
指定した幅または高さに基づく画像のサイズ変更
比例リサイズが実行されると、ソース画像は比例リサイズされる。 たとえば、ソースイメージの幅を200 × 100ピクセルから100ピクセルにサイズ変更すると、ソースイメージの高さは50ピクセルにサイズ変更されます。
ソースイメージは、指定された幅または高さに基づいてサイズ変更されます。 たとえば、ソースイメージの高さを200 × 100ピクセルから100ピクセルにサイズ変更すると、ソースイメージの幅も100ピクセルにサイズ変更されます。
サイズ変更されたイメージのサイズがソースイメージのサイズより大きい場合、ソースイメージが返されます。
limit_0
パラメーターを追加すると、画像を拡大できます。 例:https://oss-console-img-demo-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,w_500,limit_0
。
パラメータ説明
アクション: resize
指定した高さと幅に基づいて画像のサイズを変更する
パラメーター
パラメーター
必須
説明
有効値
m
必須
サイズ変更アクションのタイプを指定します。
lfit: OSSは、指定された幅と高さに基づいて、ソースイメージを長方形にできるだけ大きく比例的にサイズ変更します。 デフォルト値です。
mfit: OSSは、指定された幅と高さに基づいて、ソースイメージを長方形の外側でできるだけ小さくサイズ変更します。
fill: OSSは、指定された幅と高さに基づいて、ソース画像を長方形の外側でできるだけ小さくサイズ変更し、中央から指定された幅と高さまでトリミングします。
pad: OSSは、指定された幅と高さに基づいて、ソース画像のサイズをできるだけ大きくして長方形にし、長方形の中心からの空白を特定の色で塗りつぶします。
fixed: 固定幅と高さに基づいてソースイメージのサイズを強制的に変更します。
各サイズ変更タイプの例の詳細については、「examples」をご参照ください。
重要このパラメーターをlfitまたはmfitに設定すると、ソースイメージの縦横比 (高さに対する幅の比率) が小数の場合は整数に丸められます。
mパラメーターを指定し、wまたはhに値を指定した場合、lおよびsに指定した値は有効になりません。
w
選択可能
画像のサイズを変更する幅を指定します。
[1,16384]
h
選択可能
画像のサイズを変更する高さを指定します。
[1,16384]
l
必須
画像のサイズを変更する長辺の長さを指定します。
説明lパラメーターまたはsパラメーターのみを指定した場合、ソースイメージは長辺または短辺に基づいてサイズ変更され、もう一方の辺は指定された幅と高さに従って計算された比率に基づいてサイズ変更されます。 この場合、mパラメーターは無効です。
lパラメーターとsパラメーターの両方を指定すると、指定した比率に基づいてソースイメージのサイズが変更されます。 mパラメーターが有効になります。 デフォルトのサイズ変更タイプはlfitです。
[1,16384]
s
必須
画像のサイズを変更する短辺の長さを指定します。
説明lパラメーターまたはsパラメーターのみを指定した場合、ソースイメージは長辺または短辺に基づいてサイズ変更され、もう一方の辺は指定された幅と高さに従って計算された比率に基づいてサイズ変更されます。 この場合、mパラメーターは無効です。
lパラメーターとsパラメーターの両方を指定すると、指定した比率に基づいてソースイメージのサイズが変更されます。 mパラメーターが有効になります。 デフォルトのサイズ変更タイプはlfitです。
[1,16384]
制限
選択可能
ターゲットイメージの解像度がソースイメージの解像度よりも高い場合にイメージのサイズを変更するかどうかを指定します。
1 (デフォルト): OSSは、ソースイメージの解像度に基づいて処理されたイメージを返します。 返されるイメージのサイズは、ソースイメージのサイズとは異なる場合があります。
0: 指定されたパラメーターに基づいてソースイメージのサイズを変更します。
説明GIF画像のサイズは縮小することしかできません。
カラー
はい (mの値がpadの场合のみ)
サイズ変更タイプをpadに設定した場合、空のスペースを塗りつぶす色を選択できます。
RGBカラー値。 例えば、000000は黒を指定し、FFFFFFは白を指定する。
デフォルト値: FFFFFF。
例
ソース画像のサイズは200 × 100ピクセルです。 wパラメーターは150に設定され、hパラメーターは80に設定されます。 異なるサイズ変更タイプを指定すると、ソースイメージのサイズが異なるように変更されます。
lfit
比例サイズ変更: サイズ変更された画像のアスペクト比は、ソース画像のアスペクト比と等しくなければなりません。 サイズ変更画像の幅が150ピクセルである場合、サイズ変更画像の高さは75ピクセルである。 サイズ変更画像の高さが80ピクセルである場合、サイズ変更画像の幅は160ピクセルである。
指定された幅と高さに基づく長方形内の最大画像サイズ: サイズ変更された画像の幅と高さは、それぞれ150ピクセルと80ピクセルを超えることはできません。
この場合、リサイズ画像のサイズは150 × 75画素である。
mfit
比例サイズ変更: サイズ変更された画像のアスペクト比は、ソース画像のアスペクト比と等しくなければなりません。 サイズ変更画像の幅が150ピクセルである場合、サイズ変更画像の高さは75ピクセルである。 サイズ変更画像の高さが80ピクセルである場合、サイズ変更画像の幅は160ピクセルである。
指定された幅と高さに基づく長方形の外側の最小画像サイズ: サイズが150 × 80ピクセルを超える最小の長方形である必要があります。
この場合、リサイズ画像のサイズは160 × 80画素である。
fill
塗りつぶしサイズ変更タイプを使用して、横の長さとして指定されたwとhを持つ長方形の外側にできるだけ小さな画像にソース画像を比例的にサイズ変更し、中心から指定された幅と高さに画像をトリミングします。 この場合、ソース画像は、160 × 80ピクセルにリサイズされる。 次に、得られた画像を中心から150ピクセルの幅にトリミングして、サイズが150 × 80ピクセルの最終画像を生成する。
パッド
パッドサイズ変更タイプを使用して、ソースイメージを、指定されたwとhの辺の長さを持つ長方形のできるだけ大きなイメージに比例してサイズ変更し、指定された幅と高さに基づいて長方形の残りの空きスペースを埋めて、必要なサイズの最終イメージを生成します。 この場合、ソース画像は、150 × 75ピクセルにリサイズされる。 得られた画像の高さを中心から80ピクセルまで充填して、サイズが150 × 80ピクセルの最終画像を生成する。
固定
固定サイズ変更タイプは、指定された幅と高さに基づいてソースイメージのサイズを変更します。 目的の画像のアスペクト比がソース画像のアスペクト比と異なる場合、結果として得られる画像は歪んでいる。
パーセンテージで画像のサイズを変更する
パラメーター | 必須 | 説明 | 有効値 |
p | 必須 | 画像のサイズを変更する割合を指定します。 | [1,1000] 100より小さい値は、画像サイズを縮小することを指定します。 100より大きい値は、イメージが拡大されることを指定します。 |
実装方法
パブリック読み取りまたはパブリック読み取り書き込みイメージのサイズ変更
パブリック読み取りまたはパブリック読み取り書き込みイメージのURLにイメージ処理 (IMG) パラメーターを追加して、イメージのサイズを変更できます。
このセクションでは、中国 (杭州) リージョンのoss-console-img-demo-cn-Hangzhouバケットで画像のサイズを変更する方法の例を示します。 画像のサイズは400 × 300ピクセルで、次のURLでホストされます。
画像のサイズを比例的に変更する
幅か高さに基づく
次のパラメーターを設定して、画像のサイズを変更します。
ソースイメージを100ピクセルの高さにサイズ変更する: Resize、h_100
サイズ変更タイプをlfit:
m_lfit
に設定します。
上記のパラメーターを適用するために使用されるURL: https://oss-console-img-demo-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,h_100,m_lfit
ソース画像は、400 × 300ピクセルから133 × 100ピクセルに比例してサイズ変更される。
長い側面に基づく
長辺が100ピクセルのサイズ変更画像を取得する:
resize,l_100
上記のパラメーターを適用するために使用されるURL: https://oss-console-img-demo-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,l_100
ソース画像は、400 × 300ピクセルから100 × 75ピクセルに比例的にサイズ変更される。
固定幅と高さに基づいて画像のサイズを変更する
次のパラメーターを設定して、画像のサイズを変更します。
ソースイメージのサイズを100 × 100ピクセルに変更する:
Resize, h_100,w_100
サイズ変更タイプをfixed:
m_fixed
上記のパラメーターを適用するために使用されるURL: https://oss-console-img-demo-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,m_fixed,h_100,w_100
ソース画像は、400 × 300ピクセルから100 × 100ピクセルにサイズ変更され、サイズ変更操作後に得られた画像は歪んでいる。
指定した幅と高さに基づいて画像をトリミングする
次のパラメーターを設定して、画像のサイズを変更します。
ソースイメージのサイズを100 × 100ピクセルに変更する:
Resize, h_100,w_100
サイズ変更タイプをfill:
m_fill
に設定します。
上記のパラメーターを適用するために使用されるURL: https://oss-console-img-demo-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,m_fill,h_100,w_100 です。
ソース画像は、最初に400 × 300ピクセルから133 × 100ピクセルにサイズ変更され、中心から幅だけ切り取られて、サイズが100 × 100ピクセルである最終画像を生成する。
指定した幅と高さに基づいてソースイメージのサイズを変更し、空のスペースを埋めます
次のパラメーターを設定して、画像のサイズを変更します。
ソースイメージのサイズを100 × 100ピクセルに変更する:
Resize, h_100,w_100
サイズ変更タイプをpad:
m_pad
に設定します説明m_padパラメーターは、ソースイメージが4つのカラーチャンネルを持つPNGイメージであるイメージをサポートしません。
空のスペースを赤で埋める:
color_FF0000
上記のパラメーターを適用するために使用されるURL: https://oss-console-img-demo-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,m_pad,h_100,w_100,color_FF0000
ソース画像は、400 × 300ピクセルから100 × 75ピクセルにサイズ変更され、結果として得られる画像の高さは、中心から100ピクセルに拡大され、空きスペースは赤で塗りつぶされます。
指定したパーセンテージに基づいて画像のサイズを変更する
次のパラメーターを設定して、画像のサイズを変更します。
50%:
Resize, p_50
でソースイメージのサイズを変更する上記のパラメーターを適用するために使用されるURL: https://oss-console-img-demo-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/resize,p_50
ソース画像は、400 × 300ピクセルから200 × 150ピクセルに比例してサイズ変更される。 サイズ変更操作後に取得されるイメージは、ソースイメージの半分のサイズです。
プライベートイメージのサイズ変更
OSS SDKおよびAPI操作を使用して、プライベートイメージのサイズを変更できます。
OSS SDKの使用
次のサンプルコードは、一般的なプログラミング言語でOSS SDKを使用して画像のサイズを変更する方法の例を示しています。 他のプログラミング言語を使用して画像のサイズを変更する方法の詳細については、「概要」をご参照ください。
Java
Java 3.17.4以降のOSS SDKが必要です。
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.GetObjectRequest;
import java.io.File;
public class Demo {
public static void main(String[] args) throws Throwable {
// Specify the endpoint of the region. In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Specify the region of the bucket in which the private image is stored. Example: cn-hangzhou.
String region = "cn-hangzhou";
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Specify the name of the bucket. Example: examplebucket.
String bucketName = "examplebucket";
// Specify the full path of the object. Do not include the bucket name in the full path.
String objectName = "src.jpg";
// Specify the full path to which you want to save the processed image. Example: D:\\localpath\\example-new.jpg. If a file that has the same name already exists in the path, the processed image overwrites the file. Otherwise, the processed image is saved in the path.
String pathName = "D:\\dest.jpg";
// Create an OSSClient instance.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Resize the image to 100 x 100 pixels.
String image = "image/resize,m_fixed,w_100,h_100";
GetObjectRequest request = new GetObjectRequest(bucketName, objectName);
request.setProcess(image);
// Save the processed image as example-new.jpg to your local computer.
// If you specify only the name of a local file such as example-new.jpg without specifying the local path of the file, the processed image is saved to the local path of the project to which the sample program belongs.
ossClient.getObject(request, new File("D:\\dest.jpg"));
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
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("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
PHP
PHP 2.7.0以降のOSS SDKが必要です。
<?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;
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
$provider = new EnvironmentVariableCredentialsProvider();
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Specify the name of the bucket. Example: examplebucket.
$bucket= "examplebucket";
// Specify the full path of the object. Example: exampledir/exampleobject.jpg. Do not include the bucket name in the full path.
$object = "src.jpg";
// Specify the full path to which you want to save the processed image. Example: D:\\localpath\\example-new.jpg. If a file that has the same name already exists in the path, the processed image overwrites the file. Otherwise, the processed image is saved in the path.
// If you specify only the name of the local file such as example-new.jpg without specifying the local path of the file, the processed image is saved to the path of the project to which the sample program belongs.
$download_file = "D:\\dest.jpg";
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
// Specify the ID of the Alibaba Cloud region in which the bucket is located.
"region" => "cn-hangzhou"
);
$ossClient = new OssClient($config);
// Resize the image to 100 x 100 pixels.
$image = "image/resize,m_fixed,w_100,h_100";
$options = array(
OssClient::OSS_FILE_DOWNLOAD => $download_file,
OssClient::OSS_PROCESS => $image);
// Save the processed image to your local computer.
$ossClient->getObject($bucket, $object, $options);
Python
Python 2.18.4以降のOSS SDKが必要です。
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
## Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# Specify the ID of the Alibaba Cloud region in which the bucket is located.
region = 'cn-hangzhou'
bucket = oss2.Bucket(auth, endpoint, 'examplebucket', region=region)
# Specify the name of the source image. If the image is not stored in the root directory of the bucket, you must specify the full path of the image. Example: exampledir/example.jpg.
key = 'src.jpg'
# Specify the name of the processed image.
new_pic = 'D:\\dest.jpg'
# Resize the image to 100 × 100 pixels.
image = 'image/resize,m_fixed,w_100,h_100'
bucket.get_object_to_file(key, new_pic, process=image)
Go
Go 3.0.2以降のOSS SDKが必要です。
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() {
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Create an OSSClient instance.
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint.
client, err := oss.New("https://oss-cn-hangzhou.aliyuncs.com", "", "", oss.SetCredentialsProvider(&provider), oss.AuthVersion(oss.AuthV4), oss.Region("cn-hangzhou"))
if err != nil {
HandleError(err)
}
// Specify the name of the bucket in which the source image is stored. Example: examplebucket.
bucketName := "examplebucket"
bucket, err := client.Bucket(bucketName)
if err != nil {
HandleError(err)
}
// Specify the name of the source image. If the image is not stored in the root directory of the bucket, you must specify the full path of the image. Example: exampledir/example.jpg.
sourceImageName := "src.jpg"
// Specify the name of the processed image.
targetImageName := "D://dest.jpg"
// Resize the image to 100 x 100 pixels.
image := "image/resize,m_fixed,w_100,h_100"
err = bucket.GetObjectToFile(sourceImageName, targetImageName, oss.Process(image))
if err != nil {
HandleError(err)
}
}
OSS APIの使用
ビジネスで高度なカスタマイズが必要な場合は、RESTful APIを直接呼び出すことができます。 APIを直接呼び出すには、コードに署名計算を含める必要があります。 詳しくは、「GetObject」をご参照ください。
GetObject操作に画像のサイズ変更パラメーターを追加して、画像のサイズを変更できます。
GET /oss.jpg?x-oss-process=image/resize,w_100 HTTP/1.1
Host: oss-example.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 28 Oct 2022 06:40:10 GMT
Authorization: OSS qn6q**************:77Dv****************
よくある質問
イメージのアクセス制御リスト (ACL) が非公開の場合、圧縮イメージにアクセスするにはどうすればよいですか?
画像にアクセスするには、画像のURLに署名情報を追加します。 詳細については、「オブジェクトとオブジェクトURLの共有」をご参照ください。
画像圧縮リクエストの送信に対して課金されますか?
はい。 イメージ圧縮リクエストの送信に対して課金されます。 詳細については、「API 操作呼び出し料金」をご参照ください。
画像の圧縮には料金がかかりますか?
いいえ。 画像の圧縮に対しては課金されません。
画像のサイズ変更要求のトラフィック料金は、ソース画像またはサイズ変更された画像に基づいて計算されますか。
画像サイズ変更要求に対するトラフィック料金は、サイズ変更された画像に基づいて計算される。 たとえば、20 MBのイメージを2 MBのイメージにサイズ変更するようにリクエストした場合、リクエストに対して発生するトラフィック料金は、サイズ変更されたイメージ (2 MB) に基づいて計算されます。
画像を幅または高さで拡大できない場合はどうすればよいですか?
画像を幅または高さで拡大するには、limitパラメーターを0に設定します。 そうでなければ、画像は拡大されない。
たとえば、次のURLは、画像を300ピクセルから500ピクセルに高さで拡大します。