イメージURLで形式パラメーターを指定すると、イメージをダウンロードせずにObject Storage Service (OSS) に保存されているイメージの形式を変換できます。 このトピックでは、形式パラメーターについて説明し、画像の形式を変換する方法の例を示します。
シナリオ
異なるデバイスおよびプラットフォームに適応: 異なるブラウザ、オペレーティングシステム、またはモバイルデバイスは、異なる画像フォーマットをサポートすることができる。 たとえば、WebP形式はブラウザでより良い圧縮効率を提供します。 OSS画像形式変換を使用することで、アップロードされた画像を複数の形式に変換して、さまざまなデバイスでの互換性と最適な表示効果を確保できます。
ストレージコストの削減: ほとんどの場合、WebPなどの特定の画像形式は、視覚的な品質を維持しながら、他の従来の形式よりもサイズが小さくなります。 画質を損なうことなく、画像形式を変換してストレージの使用量を減らすことができます。 このようにして、ストレージコストが削減される。
集中リソース管理: eコマース、ソーシャルネットワーキング、メディア、その他の業界では、多数のユーザーがアップロードした画像を標準化する必要があります。 アップロードされた画像を特定の形式に変換して、その後の管理と配布できます。
使用上の注意
画像処理 (IMG) リクエストにフォーマットおよびサイズ変更パラメーターが含まれている場合は、フォーマットパラメーターを最後に配置することを推奨します。
例: image/resize,w_100/format,jpg
IMGリクエストにフォーマット、サイズ変更、透かしパラメーターが含まれている場合は、サイズ変更パラメーターの後にフォーマットパラメーターを配置することを推奨します。
例:
image/resize、w_100/format、jpg/watermark、...
ソース画像がアルファチャンネルをサポートしていない場合、ソース画像の形式はアルファチャンネルをサポートする形式に変換されます。 アルファチャンネルをサポートするフォーマットには、PNG、WebP、およびBMPがあります。 デフォルトでは、OSSは透明領域を白で塗りつぶします。
OSSを使用して透明領域を黒で塗りつぶすことはできません。
パラメーター
アクション: format
次の表に、ソースイメージの形式を変換するときに設定できるパラメーターを示します。
有効値 | 説明 |
jpg | ソースイメージの形式をJPGに変換します。 重要 アルファチャンネルをサポートするHEIC形式の画像は、JPG画像に変換できません。 |
png | ソースイメージの形式をPNGに変換します。 |
webp | ソースイメージの形式をWebPに変換します。 |
bmp | ソースイメージの形式をBMPに変換します。 |
gif | ソースイメージの形式をGIFに変換します。 変換は、ソースイメージがGIFイメージでもある場合にのみ有効になります。 ソース画像がGIF画像でない場合、処理された画像は元のフォーマットで保存されます。 |
tiff | ソースイメージの形式をTIFFに変換します。 |
方法
public-readまたはpublic-read-writeイメージのフォーマットの変換
イメージのURLにIMGパラメーターを追加して、パブリック読み取りイメージまたはパブリック読み取り /書き込みイメージの形式を変換できます。
次の例では、中国 (杭州) リージョンのimage-demoバケットにあるexample.gifという名前のイメージがソースイメージとして使用されています。 イメージは次のURLでホストされます。
ソース画像の形式をPNGに変換する
ソースイメージの形式を、段階的な表示をサポートするJPGに変換する
次のパラメーターを設定します。
段階的な表示を適用する:
interlace,1
ソースイメージのフォーマットをJPG:
format,jpg
に変換する
ソースイメージの処理に使用されるURLは https://oss-console-img-demo-cn-hangzhou-3az.oss-cn-hangzhou.aliyuncs.com/example.gif?x-oss-process=image/interlace,1/format,jpg です。
画像のサイズを200ピクセルの幅に変更し、画像の形式をWebPに変換します
次のパラメーターを設定します。
画像のサイズを200ピクセルの幅に変更します。Resize, w_200
画像のフォーマットをWebP: format,webp形式に変換
プライベートイメージのフォーマットを変換する
OSS SDKとOSS 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 {
// 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 endpoint. 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 that you want to process. Do not include the bucket name in the full path.
String objectName = "src.gif";
// Specify the full path of the processed image. Example: D:\\dest.jpg. If an image that has the same name already exists in the path, the processed image overwrites the image. Otherwise, the processed image is saved in the path.
String pathName = "D:\\dest.png";
// 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 {
// Convert the format of the source image to PNG.
String image = "image/format,png";
GetObjectRequest request = new GetObjectRequest(bucketName, objectName);
request.setProcess(image);
// Set the name of the processed image to dest.png and save it to your local computer.
// If you specify only the name of the processed image such as dest.png without specifying the local path of the processed image, the processed image is saved to the path of the project to which the sample program belongs.
ossClient.getObject(request, new File("D:\\dest.png"));
} 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 that you want to process. Do not include the bucket name in the full path.
$object = "src.gif";
// Specify the full path of the processed image. Example: D:\\dest.jpg. If an image that has the same name already exists in the path, the processed image overwrites the image. Otherwise, the processed image is saved in the path.
// If you specify only the name of the processed image such as dest.png without specifying the local path of the processed image, the processed image is saved to the path of the project to which the sample program belongs.
$download_file = "D:\\dest.png";
$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);
// Convert the format of the source image to PNG.
$image = "image/format,png";
$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 include the full path of the image. Example: exampledir/src.gif.
key = 'src.gif'
# Specify the name of the processed image.
new_pic = 'D:\\dest.png'
# Convert the format of the source image to PNG.
image = 'image/format,png'
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 include the full path of the image. Example: exampledir/src.gif.
sourceImageName := "src.gif"
// Specify the name of the processed image.
targetImageName := "D://dest.png"
// Convert the format of the source image to PNG.
image := "image/format,png"
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/format,png HTTP/1.1
Host: oss-example.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 28 Oct 2022 06:40:10 GMT
Authorization: OSS qn6q**************:77Dv****************
よくある質問
画像フォーマットの変換時に黒い境界線が表示される場合はどうすればよいですか?
画像フォーマットの品質はデフォルトです。 フォーマット変換中に品質を指定しない場合、画像フォーマットはデフォルトの品質に基づいて変換されます。 この場合、黒い境界線が画像に現れることがある。
画質を向上させたい場合は、画質パラメーターを100 (?x-oss-process=image/quality,Q_100) に設定することを推奨します。 画質調整の詳細については、「画質の調整」をご参照ください。
画像フォーマットの変換はページの読み込み速度に影響しますか?
画像フォーマットの変換は、ページの読み込み速度に影響します。
GIFイメージのフォーマットをMP4に変換できますか?
はい、GIF画像の形式をMP4に変換できます。 GIF画像の形式をMP4に変換するには、 チケットを起票してサポートセンターにお問い合わせくださいしてサポートセンターにお問い合わせください。