すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:IMG implementation modes

最終更新日:Mar 21, 2026

OSS では、画像処理 (IMG) をイメージオブジェクトに適用するために、オブジェクト URL、OSS SDK、OSS API の 3 つの方法を提供しています。ワークフローに合わせて適切な方法を選択してください。

方法最適な用途
オブジェクト URLパブリックイメージの迅速な共有、ブラウザでのプレビュー、または CDN 配信
OSS SDKアプリケーションレベルの処理 — 処理済みイメージを直接ダウンロードするか、プライベートイメージ用の署名付き URL を生成
OSS APIリクエストを自身で構築し署名するカスタム統合
重要

デフォルトでは、URL 経由でイメージオブジェクトにアクセスすると、ブラウザで表示される代わりにファイルがダウンロードされます。ブラウザでのプレビューを有効にするには、カスタムドメイン名をバケットにマッピングし、CNAME レコードを追加する必要があります。詳細については、「カスタムドメイン名のマッピング」をご参照ください。

オブジェクト URL の使用

IMG パラメーターまたはイメージスタイルパラメーターをオブジェクト URL に直接追加します。使用する方法は、オブジェクトのアクセス制御リスト (ACL) によって異なります。

パブリックイメージ (パブリック読み取りまたはパブリック読み書き)

パブリック読み取りまたはパブリック読み書きの ACL を持つオブジェクトの場合、署名なしで URL にパラメーターを追加します。

URL フォーマット:

モードURL フォーマット
IMG パラメーターhttps://bucketname.endpoint/objectname?x-oss-process=image/action,param_value
イメージスタイルhttps://bucketname.endpoint/objectname?x-oss-process=style/stylename

URL コンポーネント:

コンポーネント説明
https://bucketname.endpoint/objectname完全なオブジェクト URL。詳細については、「アップロードされたオブジェクトの URL を取得する方法
x-oss-process=image/IMG パラメーターが続くことを示す固定プレフィックス。
action,param_value操作名とそのパラメーター。複数の操作を / で連結します。OSS は左から右の順に適用します。
x-oss-process=style/イメージスタイルが続くことを示す固定プレフィックス。
stylenameOSS コンソールで作成されたスタイルの名前。詳細については、「イメージスタイルの作成」をご参照ください。

処理順序:OSS は、URL に出現する順序で IMG 操作を適用します。たとえば、image/resize,w_200/rotate,90 は、まずイメージを幅 200 px にリサイズし、次に 90 度回転させます。

例:

#include "oss_api.h"
#include "aos_http_io.h"

/* バケットが配置されているリージョンのエンドポイントを指定します。 */
const char *endpoint = "yourEndpoint";
/* バケットの名前を指定します。例: examplebucket。 */
const char *bucket_name = "examplebucket";
/* オブジェクトの完全なパスを指定します。バケット名は含めません。例: exampledir/exampleobject.txt。 */
const char *object_name = "exampledir/exampleobject.txt";

void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    aos_str_set(&options->config->endpoint, endpoint);
    /* アクセス認証情報を環境変数から取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 */
    aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
    aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
    /* CNAME を使用するかどうかを指定します。0 = CNAME を使用しない。 */
    options->config->is_cname = 0;
    options->ctl = aos_http_controller_create(options->pool, 0);
}

int main(int argc, char *argv[])
{
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }

    aos_pool_t *pool;
    aos_pool_create(&pool, NULL);
    oss_request_options_t *oss_client_options;
    oss_client_options = oss_request_options_create(pool);
    init_options(oss_client_options);

    aos_string_t bucket;
    aos_string_t object;
    aos_table_t *params = NULL;
    aos_http_request_t *req;
    char *url_str;
    apr_time_t now;
    int64_t expire_time;

    aos_str_set(&bucket, bucket_name);
    aos_str_set(&object, object_name);

    /* 画像を 100 × 100 ピクセルにサイズ変更します。 */
    params = aos_table_make(pool, 1);
    apr_table_set(params, OSS_PROCESS, "image/resize,m_fixed,w_100,h_100");
    req = aos_http_request_create(pool);
    req->method = HTTP_GET;
    req->query_params = params;

    /* 有効期間を 10 分に設定します。 */
    now = apr_time_now();
    expire_time = now / 1000000 + 10 * 60;

    url_str = oss_gen_signed_url(oss_client_options, &bucket, &object, expire_time, req);
    printf("url: %s\n", url_str);

    aos_pool_destroy(pool);
    aos_http_io_deinitialize();
    return 0;
}

カスタム区切り文字:カスタム区切り文字を設定すると、?x-oss-process=style/ が置き換えられ、URL が短くなります。たとえば、区切り文字として ! を使用する場合:https://bucketname.endpoint/objectname!stylename。これは、「イメージスタイルの設定」の「ソース画像の保護の設定」セクションで設定します。

プライベートイメージ

プライベートオブジェクトには署名付き URL が必要です。これは、認証情報を署名に埋め込んだ、有効期限付きの URL です。有効な署名がない場合、OSS は権限付与エラーを返します。

OSS SDK を使用して、IMG パラメーターが埋め込まれた署名付き URL を生成します。他の言語については、「概要」をご参照ください。

<details> <summary>Java</summary>

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
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";
        // オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。
        String objectName = "exampleobject.jpg";

        // OSSClient インスタンスを作成します。
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);

        try {
            // イメージを 100 x 100 ピクセルにリサイズし、90 度回転させます。
            String style = "image/resize,m_fixed,w_100,h_100/rotate,90";
            // 署名付き URL の有効期限を 10 分に設定します。
            Date expiration = new Date(new Date().getTime() + 1000 * 60 * 10);
            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("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("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

</details>

<details> <summary>Python</summary>

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# エンドポイントとバケット名を指定します。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')

key = 'exampledir/example.jpg'

# イメージを 100 x 100 ピクセルにリサイズし、90 度回転させます。
style = 'image/resize,m_fixed,w_100,h_100/rotate,90'
# 600 秒間有効な署名付き URL を生成します。
url = bucket.sign_url('GET', key, 10 * 60, params={'x-oss-process': style})
print(url)

</details>

<details> <summary>Go</summary>

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)
    }

    // バケットが配置されているリージョンのエンドポイントを指定します。
    client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
    if err != nil {
        HandleError(err)
    }

    bucketName := "examplebucket"
    bucket, err := client.Bucket(bucketName)
    if err != nil {
        HandleError(err)
    }

    ossImageName := "exampledir/example.jpg"
    // image/format,png を適用した 600 秒間有効な署名付き URL を生成します。
    signedURL, err := bucket.SignURL(ossImageName, oss.HTTPGet, 600, oss.Process("image/format,png"))
    if err != nil {
        HandleError(err)
    } else {
        fmt.Println(signedURL)
    }
}

</details>

<details> <summary>Node.js</summary>

const OSS = require("ali-oss");

const client = new OSS({
  // バケットが配置されているリージョンを指定します。例:oss-cn-hangzhou
  region: "oss-cn-hangzhou",
  // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  // バケット名を指定します。
  bucket: "examplebucket",
});

// image/resize,w_300 を適用した 600 秒間有効な署名付き URL を生成します。
const signUrl = client.signatureUrl("example.png", {
  expires: 600,
  process: "image/resize,w_300",
});
console.log("signUrl=" + signUrl);

</details>

<details> <summary>PHP</summary>

<?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 = "yourEndpoint";
// バケット名を指定します。例:examplebucket
$bucket = "examplebucket";
// オブジェクトの完全なパスを指定します。例:exampledir/exampleobject.jpg。バケット名は含めないでください。
$object = "exampledir/exampleobject.jpg";

$config = array(
    "provider" => $provider,
    "endpoint" => $endpoint,
);
$ossClient = new OssClient($config);

// IMG パラメーターを含む 3,600 秒間有効な署名付き URL を生成します。
// この URL はブラウザで直接使用して、処理済みのイメージを表示できます。
$timeout = 3600;
$options = array(
    // イメージを 100 x 100 ピクセルにリサイズします。
    OssClient::OSS_PROCESS => "image/resize,m_fixed,h_100,w_100"
);

$signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "GET", $options);
print("Signed URL: \n" . $signedUrl);

</details>

<details> <summary>C#</summary>

using Aliyun.OSS;
using Aliyun.OSS.Common;

// バケットが配置されているリージョンのエンドポイントを指定します。
var endpoint = "yourEndpoint";
// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// バケット名とオブジェクト名を指定します。
var bucketName = "examplebucket";
var objectName = "exampledir/exampledir.jpg";

var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
try
{
    // イメージを 100 x 100 ピクセルにリサイズします。
    var process = "image/resize,m_fixed,w_100,h_100";
    var req = new GeneratePresignedUriRequest(bucketName, objectName, SignHttpMethod.Get)
    {
        Expiration = DateTime.Now.AddHours(1),
        Process = process
    };
    var uri = client.GeneratePresignedUri(req);
    Console.WriteLine("Generate Presigned Uri:{0} with process:{1} succeeded ", uri, process);
}
catch (OssException ex)
{
    Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
        ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
    Console.WriteLine("Failed with error info: {0}", ex.Message);
}

</details>

<details> <summary>C++</summary>

#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* バケットが配置されているリージョンのエンドポイントを指定します。*/
    std::string Endpoint = "yourEndpoint";
    /* バケット名とオブジェクト名を指定します。*/
    std::string BucketName = "examplebucket";
    std::string ObjectName = "exampledir/example.jpg";

    /* ネットワークリソースを初期化します。*/
    InitializeSdk();

    ClientConfiguration conf;
    /* 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。*/
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);

    /* IMG パラメーターを含む署名付き URL を生成します。*/
    std::string Process = "image/resize,m_fixed,w_100,h_100";
    GeneratePresignedUrlRequest request(BucketName, ObjectName, Http::Get);
    request.setProcess(Process);
    auto outcome = client.GeneratePresignedUrl(request);

    if (outcome.isSuccess()) {
        std::cout << "Generated presigned URL: " << outcome.result() << std::endl;
    } else {
        std::cout << "Failed to generate presigned URL. Error code: " << outcome.error().Code()
                  << ", Message: " << outcome.error().Message()
                  << ", RequestId: " << outcome.error().RequestId() << std::endl;
    }

    /* ネットワークリソースを解放します。*/
    ShutdownSdk();
    return 0;
}

</details>

<details> <summary>C</summary>

#include "oss_api.h"
#include "aos_http_io.h"

/* バケットが配置されているリージョンのエンドポイントを指定します。*/
const char *endpoint = "yourEndpoint";
/* バケット名を指定します。例:examplebucket */
const char *bucket_name = "examplebucket";
/* オブジェクトの完全なパスを指定します。バケット名は含めないでください。例:exampledir/exampleobject.txt */
const char *object_name = "exampledir/exampleobject.txt";

void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    aos_str_set(&options->config->endpoint, endpoint);
    /* 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。*/
    aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
    aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
    /* CNAME を使用するかどうかを指定します。0 = CNAME を使用しない。*/
    options->config->is_cname = 0;
    options->ctl = aos_http_controller_create(options->pool, 0);
}

int main(int argc, char *argv[])
{
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }

    aos_pool_t *pool;
    aos_pool_create(&pool, NULL);
    oss_request_options_t *oss_client_options;
    oss_client_options = oss_request_options_create(pool);
    init_options(oss_client_options);

    aos_string_t bucket;
    aos_string_t object;
    aos_table_t *params = NULL;
    aos_http_request_t *req;
    char *url_str;
    apr_time_t now;
    int64_t expire_time;

    aos_str_set(&bucket, bucket_name);
    aos_str_set(&object, object_name);

    /* イメージを 100 x 100 ピクセルにリサイズします。*/
    params = aos_table_make(pool, 1);
    apr_table_set(params, OSS_PROCESS, "image/resize,m_fixed,w_100,h_100");
    req = aos_http_request_create(pool);
    req->method = HTTP_GET;
    req->query_params = params;

    /* 有効期間を 10 分に設定します。*/
    now = apr_time_now();
    expire_time = now / 1000000 + 10 * 60;

    url_str = oss_gen_signed_url(oss_client_options, &bucket, &object, expire_time, req);
    printf("url: %s\n", url_str);

    aos_pool_destroy(pool);
    aos_http_io_deinitialize();
    return 0;
}

</details>

OSS SDK の使用

OSS SDK を使用すると、IMG パラメーターまたはイメージスタイルを適用して、処理済みのイメージを直接ファイルにダウンロードできます。各 SDK 呼び出しでは、URL と同じ方法でプロセス文字列を指定し、/ を使用して複数の操作を連結します。

IMG パラメーターの適用

process オプションを image/ 文字列に設定し、SDK の get-object メソッドを呼び出します。OSS は操作を左から右の順に適用します。

他の言語については、「概要」をご参照ください。

<details> <summary>Java</summary>

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.model.GetObjectRequest;
import java.io.File;

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();
        String bucketName = "examplebucket";
        String objectName = "exampleobject.jpg";
        // 処理済みイメージを保存するローカルパスを指定します。
        String pathName = "D:\\localpath\\example-new.jpg";

        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);

        try {
            // イメージを 100 x 100 ピクセルにリサイズし、90 度回転させます。
            String style = "image/resize,m_fixed,w_100,h_100/rotate,90";
            GetObjectRequest request = new GetObjectRequest(bucketName, objectName);
            request.setProcess(style);
            ossClient.getObject(request, new File("D:\\localpath\\example-new.jpg"));
        } catch (OSSException oe) {
            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("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

</details>

<details> <summary>Python</summary>

# -*- coding: utf-8 -*-
import os
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')

key = 'exampledir/example.jpg'
new_pic = 'exampledir/newexample.jpg'

# イメージを 100 x 100 ピクセルにリサイズし、90 度回転させます。
style = 'image/resize,m_fixed,w_100,h_100/rotate,90'
bucket.get_object_to_file(key, new_pic, process=style)

</details>

<details> <summary>Go</summary>

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)
    }

    client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
    if err != nil {
        HandleError(err)
    }

    bucketName := "examplebucket"
    bucket, err := client.Bucket(bucketName)
    if err != nil {
        HandleError(err)
    }

    sourceImageName := "exampledir/example.jpg"
    targetImageName := "exampledir/newexample.jpg"
    // イメージを 100 x 100 ピクセルにリサイズし、90 度回転させます。
    style := "image/resize,m_fixed,w_100,h_100/rotate,90"
    err = bucket.GetObjectToFile(sourceImageName, targetImageName, oss.Process(style))
    if err != nil {
        HandleError(err)
    }
}

</details>

<details> <summary>Node.js</summary>

const OSS = require('ali-oss');

const client = new OSS({
  region: 'yourregion',
  // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  bucket: 'yourbucketname'
});

// イメージを 100 x 100 ピクセルにリサイズします。
async function scale() {
  try {
    const result = await client.get('example.jpg', './example-resize.jpg', { process: 'image/resize,m_fixed,w_100,h_100' });
  } catch (e) {
    console.log(e);
  }
}

scale();

// イメージを座標 (100, 100) から 100 x 100 ピクセルで切り抜きます。
async function cut() {
  try {
    const result = await client.get('example.jpg', './example-crop.jpg', { process: 'image/crop,w_100,h_100,x_100,y_100,r_1' });
  } catch (e) {
    console.log(e);
  }
}

cut();

// イメージを 90 度回転させます。
async function rotate() {
  try {
    const result = await client.get('example.jpg', './example-rotate.jpg', { process: 'image/rotate,90' });
  } catch (e) {
    console.log(e);
  }
}

rotate();

// 値 100 でイメージをシャープ化します。
async function sharpen() {
  try {
    const result = await client.get('example.jpg', './example-sharpen.jpg', { process: 'image/sharpen,100' });
  } catch (e) {
    console.log(e);
  }
}

sharpen();

// ウォーターマークを追加します。
async function watermark() {
  try {
    const result = await client.get('example.jpg', './example-watermark.jpg', { process: 'image/watermark,text_SGVsbG8g5Zu-54mH5pyN5YqhIQ' });
  } catch (e) {
    console.log(e);
  }
}

watermark();

// イメージフォーマットを変換します。
async function format() {
  try {
    const result = await client.get('example.jpg', './example-format.jpg', { process: 'image/format,png' });
  } catch (e) {
    console.log(e);
  }
}

format();

// イメージのメタデータを取得します。
async function info() {
  try {
    const result = await client.get('example.jpg', './example-info.txt', { process: 'image/info' });
  } catch (e) {
    console.log(e);
  }
}

info();

</details>

<details> <summary>PHP</summary>

<?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 = "yourEndpoint";
$bucket = "examplebucket";
$object = "exampledir/exampleobject.jpg";
$download_file = "D:\\localpath\\example-new.jpg";

$config = array(
    "provider" => $provider,
    "endpoint" => $endpoint,
);
$ossClient = new OssClient($config);

// yourCustomStyleName を OSS コンソールで作成したイメージスタイルの名前に置き換えます。
$style = "style/yourCustomStyleName";

$options = array(
    OssClient::OSS_FILE_DOWNLOAD => $download_file,
    OssClient::OSS_PROCESS => $style
);

$ossClient->getObject($bucket, $object, $options);

</details>

<details> <summary>C++</summary>

#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    std::string Endpoint = "yourEndpoint";
    std::string BucketName = "examplebucket";
    std::string ObjectName = "exampledir/example.jpg";

    InitializeSdk();

    ClientConfiguration conf;
    /* 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。*/
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);

    /* イメージを 100 x 100 ピクセルにリサイズし、90 度回転させます。*/
    std::string Process = "image/resize,m_fixed,w_100,h_100/rotate,90";
    GetObjectRequest request(BucketName, ObjectName);
    request.setProcess(Process);
    auto outcome = client.GetObject(request);
    if (outcome.isSuccess()) {
        std::cout << "Image processed successfully." << std::endl;
    } else {
        std::cout << "Failed to process image. Error code: " << outcome.error().Code()
                  << ", Message: " << outcome.error().Message()
                  << ", RequestId: " << outcome.error().RequestId() << std::endl;
    }

    ShutdownSdk();
    return 0;
}

</details>

<details> <summary>C</summary>

#include "oss_api.h"
#include "aos_http_io.h"

const char *endpoint = "yourEndpoint";
const char *bucket_name = "examplebucket";
const char *object_name = "exampledir/exampleobject.txt";

void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    aos_str_set(&options->config->endpoint, endpoint);
    /* 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。*/
    aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
    aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
    options->config->is_cname = 0;
    options->ctl = aos_http_controller_create(options->pool, 0);
}

int main(int argc, char *argv[])
{
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }

    aos_pool_t *pool;
    aos_pool_create(&pool, NULL);
    oss_request_options_t *oss_client_options;
    oss_client_options = oss_request_options_create(pool);
    init_options(oss_client_options);

    aos_string_t bucket;
    aos_string_t object;
    aos_string_t file;
    aos_table_t *headers = NULL;
    aos_table_t *params = NULL;
    aos_table_t *resp_headers = NULL;
    aos_status_t *resp_status = NULL;

    aos_str_set(&bucket, bucket_name);
    aos_str_set(&object, object_name);

    /* イメージを 100 x 100 ピクセルにリサイズし、90 度回転させます。*/
    params = aos_table_make(pool, 1);
    apr_table_set(params, OSS_PROCESS, "image/resize,m_fixed,w_100,h_100/rotate,90");

    aos_str_set(&file, "yourLocalFileName");
    resp_status = oss_get_object_to_file(oss_client_options, &bucket, &object, headers, params, &file, &resp_headers);
    if (aos_status_is_ok(resp_status)) {
        printf("get object to file succeeded\n");
    } else {
        printf("get object to file failed\n");
    }

    aos_pool_destroy(pool);
    aos_http_io_deinitialize();
    return 0;
}

</details>

イメージスタイルの適用

イメージスタイルは、複数の IMG パラメーターを単一の名前付きプリセットにバンドルするため、多くのイメージに同じ変換を簡単に適用できます。このアプローチにより、変換の再利用、複雑な URL の短縮、配信 URL からの変換詳細の非表示が可能になります。OSS コンソールでスタイルを作成し、SDK 呼び出しで名前によって参照します。

すべての例では、プロセス文字列として style/yourCustomStyleName を使用します。yourCustomStyleName を OSS コンソールで作成したスタイルの名前に置き換えてください。

他の言語については、「概要」をご参照ください。

<details> <summary>Java</summary>

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.model.GetObjectRequest;
import java.io.File;

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();
        String bucketName = "examplebucket";
        String objectName = "exampleobject.jpg";
        String pathName = "D:\\localpath\\example-new.jpg";

        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);

        try {
            // yourCustomStyleName を OSS コンソールで作成したイメージスタイルの名前に置き換えます。
            String style = "style/yourCustomStyleName";
            GetObjectRequest request = new GetObjectRequest(bucketName, objectName);
            request.setProcess(style);
            ossClient.getObject(request, new File(pathName));
        } catch (OSSException oe) {
            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("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

</details>

<details> <summary>Python</summary>

# -*- coding: utf-8 -*-
import os
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')

key = 'exampledir/example.jpg'
new_pic = 'exampledir/newexample.jpg'

# yourCustomStyleName を OSS コンソールで作成したイメージスタイルの名前に置き換えます。
style = 'style/yourCustomStyleName'
bucket.get_object_to_file(key, new_pic, process=style)

</details>

<details> <summary>Go</summary>

package main

import (
    "fmt"
    "github.com/aliyun/aliyun-oss-go-sdk/oss"
    "os"
)

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)
    }

    client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
    if err != nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    bucketName := "examplebucket"
    bucket, err := client.Bucket(bucketName)
    if err != nil {
        HandleError(err)
    }

    sourceImageName := "example/example.jpg"
    targetImageName := "D:\\localpath\\newexample.jpg"
    // yourCustomStyleName を OSS コンソールで作成したイメージスタイルの名前に置き換えます。
    style := "style/yourCustomStyleName"
    err = bucket.GetObjectToFile(sourceImageName, targetImageName, oss.Process(style))
    if err != nil {
        HandleError(err)
    }
}

</details>

<details> <summary>Node.js</summary>

const OSS = require('ali-oss');

const client = new OSS({
  region: 'yourregion',
  // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  bucket: 'yourbucketname'
});

// イメージを 100 x 100 ピクセルにリサイズします。
async function scale() {
  try {
    const result = await client.get('example.jpg', './example-resize.jpg', { process: 'image/resize,m_fixed,w_100,h_100' });
  } catch (e) {
    console.log(e);
  }
}

scale();

// イメージを座標 (100, 100) から 100 x 100 ピクセルで切り抜きます。
async function cut() {
  try {
     const result = await client.get('example.jpg', './example-crop.jpg', { process: 'image/crop,w_100,h_100,x_100,y_100,r_1'});
  } catch (e) {
    console.log(e);
  }
}

cut();

// イメージを 90 度回転させます。
async function rotate() {
  try {
    const result = await client.get('example.jpg', './example-rotate.jpg', { process: 'image/rotate,90'});
  } catch (e) {
    console.log(e);
  }
}

rotate();

// 値 100 でイメージをシャープ化します。
async function sharpen() {
  try {
    const result = await client.get('example.jpg', './example-sharpen.jpg', { process: 'image/sharpen,100'});
  } catch (e) {
    console.log(e);
  }
}

sharpen();

// ウォーターマークを追加します。
async function watermark() {
  try {
    const result = await client.get('example.jpg', './example-watermark.jpg', { process: 'image/watermark,text_SGVsbG8g5Zu-54mH5pyN5YqhIQ'});
  } catch (e) {
    console.log(e);
  }
}

watermark();

// イメージフォーマットを変換します。
async function format() {
  try {
    const result = await client.get('example.jpg', './example-format.jpg', { process: 'image/format,png'});
  } catch (e) {
    console.log(e);
  }
}

format();

// イメージのメタデータを取得します。
async function info() {
  try {
    const result = await client.get('example.jpg', './example-info.txt', {process: 'image/info'});
  } catch (e) {
    console.log(e);
  }
}

info();

</details>

<details> <summary>PHP</summary>

<?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 = "yourEndpoint";
$bucket = "examplebucket";
$object = "exampledir/exampleobject.jpg";
$download_file = "D:\\localpath\\example-new.jpg";

$config = array(
    "provider" => $provider,
    "endpoint" => $endpoint,
);
$ossClient = new OssClient($config);

// yourCustomStyleName を OSS コンソールで作成したイメージスタイルの名前に置き換えます。
$style = "style/yourCustomStyleName";

$options = array(
    OssClient::OSS_FILE_DOWNLOAD => $download_file,
    OssClient::OSS_PROCESS => $style
);

$ossClient->getObject($bucket, $object, $options);

</details>

<details> <summary>C++</summary>

#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    std::string Endpoint = "yourEndpoint";
    std::string BucketName = "examplebucket";
    std::string ObjectName = "exampledir/example.jpg";

    InitializeSdk();

    ClientConfiguration conf;
    /* 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。*/
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);

    /* yourCustomStyleName を OSS コンソールで作成したイメージスタイルの名前に置き換えます。*/
    std::string Process = "style/yourCustomStyleName";
    GetObjectRequest request(BucketName, ObjectName);
    request.setProcess(Process);
    auto outcome = client.GetObject(request);
    if (outcome.isSuccess()) {
        std::cout << "Image processed successfully." << std::endl;
    } else {
        std::cout << "Failed to process image. Error code: " << outcome.error().Code()
                  << ", Message: " << outcome.error().Message()
                  << ", RequestId: " << outcome.error().RequestId() << std::endl;
    }

    ShutdownSdk();
    return 0;
}

</details>

<details> <summary>C</summary>

#include "oss_api.h"
#include "aos_http_io.h"

const char *endpoint = "yourEndpoint";
const char *bucket_name = "examplebucket";
const char *object_name = "exampledir/exampleobject.txt";

void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    aos_str_set(&options->config->endpoint, endpoint);
    /* 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。*/
    aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
    aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
    options->config->is_cname = 0;
    options->ctl = aos_http_controller_create(options->pool, 0);
}

int main(int argc, char *argv[])
{
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }

    aos_pool_t *pool;
    aos_pool_create(&pool, NULL);
    oss_request_options_t *oss_client_options;
    oss_client_options = oss_request_options_create(pool);
    init_options(oss_client_options);

    aos_string_t bucket;
    aos_string_t object;
    aos_string_t file;
    aos_table_t *headers = NULL;
    aos_table_t *params = NULL;
    aos_table_t *resp_headers = NULL;
    aos_status_t *resp_status = NULL;

    aos_str_set(&bucket, bucket_name);
    aos_str_set(&object, object_name);

    /* yourCustomStyleName を OSS コンソールで作成したイメージスタイルの名前に置き換えます。*/
    params = aos_table_make(pool, 1);
    apr_table_set(params, OSS_PROCESS, "style/yourCustomStyleName");

    aos_str_set(&file, "yourLocalFileName");
    resp_status = oss_get_object_to_file(oss_client_options, &bucket, &object, headers, params, &file, &resp_headers);
    if (aos_status_is_ok(resp_status)) {
        printf("get object to file succeeded\n");
    } else {
        printf("get object to file failed\n");
    }

    aos_pool_destroy(pool);
    aos_http_io_deinitialize();
    return 0;
}

</details>

OSS API の使用

カスタム統合の場合は、IMG パラメーターまたはイメージスタイルパラメーターを GetObject リクエストに直接追加します。署名計算をコードに含めてください。詳細については、「GetObject」をご参照ください。

IMG パラメーター:

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 qn6qrrqxo2oawuk53otf****:UNQDb7GapEgJkcde6OhZ9J****

イメージスタイル:

GET /oss.jpg?x-oss-process=style/styleexample HTTP/1.1
Host: oss-example.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 28 Oct 2022 06:40:10 GMT
Authorization: OSS qn6qrrawuk53oqxo2otf****:UNapEgQDb7GJkcde6OhZ9J****

処理済みイメージの保存

デフォルトでは、IMG は処理済みのイメージを保存しません。saveas パラメーターを IMG リクエストに追加して、結果を指定したバケットに永続化します。詳細については、「処理済みイメージの保存」をご参照ください。