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

Object Storage Service:処理された画像を保存する

最終更新日:Feb 27, 2024

デフォルトでは、Object Storage Service (OSS) は、イメージ処理 (IMG) リクエストのパラメーターに基づいてソースイメージを処理しますが、処理されたイメージは保存しません。 サムネイル、トリミングされた画像、フォーマット変換された画像など、同じ処理結果を表示する場合は、処理済みの画像を保存できます。 処理されたイメージをオブジェクトとして特定のバケットに保存するには、saveasパラメーターをIMGリクエストに追加する必要があります。

使用上の注意

  • 必要な権限。

    処理されたイメージをバケットに保存するには、ソースバケットに対するoss:PostProcessTaskアクセス許可と、ターゲットバケットに対するoss:PutBucketおよびoss:PutObjectアクセス許可が必要です。

  • ストレージリージョン

    処理されたイメージは、ソースイメージが保存されている同じバケットまたは別のバケットに保存できます。 ただし、ソースバケットとターゲットバケットは、同じAlibaba Cloudアカウントに属し、同じリージョンにある必要があります。

  • 保管方法

    • saveasパラメーターをIMGリクエストに追加して、Object Storage Service (OSS) SDKを使用して処理されたイメージを特定のバケットに保存できます。 詳細については、「OSS SDKの使用」をご参照ください。

    • オブジェクトURLを使用して処理されたイメージを直接保存することはできません。 処理した画像をコンピュータに保存し、バケットにアップロードできます。

  • ACL

    処理されたイメージのアクセス制御リスト (ACL) は、イメージを保存するバケットのアクセス制御リスト (ACL) と同じであり、変更できません。

  • ストレージ期間

    処理されたイメージを特定の期間保存する場合は、イメージオブジェクトのライフサイクルルールを設定して、オブジェクトの有効期限を指定します。 詳細については、「最終変更時刻に基づくライフサイクルルール」をご参照ください。

手順

OSS SDKの使用

次のサンプルコードでは、一般的なプログラミング言語でOSS SDKを使用して処理済みイメージを保存する方法の例を示します。 他のプログラミング言語のOSS SDKを使用して処理済みイメージを保存する方法の詳細については、「概要」をご参照ください。

com.aliyun.oss.*;
impor t com.aliyun.oss.com mon.auth.*;
impor t com.aliyun.oss.com mon.utils.BinaryUtil;
impor t com.aliyun.oss.com mon.utils.IOUtils;
com.aliyun.oss.mo del.GenericResultをインポートします。com.aliyun.oss.mo del.ProcessObjectRequestをインポートします。java.util.Formatterをインポートします。public classデモ {
    public static void main(String[] args) 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";
        // オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 
        文字列sourceImage = "exampleimage.png";

        // Create an OSSClient instance. 
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);

        try {
            // 画像のサイズを100ピクセルの高さと幅に変更します。 
            StringBuilder sbStyle = new StringBuilder();
            Formatter styleFormatter = new Formatter(sbStyle);
            String styleType = "image/resize,m_fixed,w_100,h_100";
            // 処理されたイメージexample-resize.pngに名前を付け、ソースイメージが保存されているバケットにイメージを保存します。 
            // オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 
            String targetImage = "example-resize.png";
            styleFormatter.format("%s|sys/saveas,o_%s,b_%s", styleType,
                    BinaryUtil.toBase64String(targetImage.getBytes()),
                    BinaryUtil.toBase64String(bucketName.getBytes()));
            System.out.println(sbStyle.toString());
            ProcessObjectRequest request = new ProcessObjectRequest(bucketName, sourceImage, sbStyle.toString());
            GenericResult processResult = ossClient.processObject(request);
            String json = IOUtils.readStreamAsString(processResult.getResponse().getContent(), "UTF-8");
            processResult.getResponse().getContent().close();
            System.out.println(json);
        } catch (Exception e) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "しかし、何らかの理由でエラー応答で拒否されました。");
            System.out.println("エラーメッセージ:" + oe.getErrorMessage());
            System.out.println("エラーコード:" + oe.getErrorCode());
            System.out.println("リクエストID:" + oe.getRequestId());
            System.out.println("ホストID:" + oe.getHostId());
        } catch (ClientException e) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + 「ネットワークにアクセスできないなど」;
            System.out.println("エラーメッセージ:" + ce.getMessage());
        } 最後に{
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
} 
<?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';
}

OSS\OssClientを使用します。// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
$accessKeyId = getenv("OSS_ACCESS_KEY_ID");
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
$end point = "yourEndpoint";
// バケットの名前を指定します。 例: examplebucket. 
$bucket= "examplebucket";
// ソースオブジェクトのフルパスを指定します。 例: exampledir/exampleobject.jpg バケット名をフルパスに含めないでください。 
$object = "exampledir/exampleobject.jpg";
// 処理された画像の保存に使用されるフルパスを指定します。 例: example-new.jpg。 
$save_object = "example-new.jpg";

関数base64url_encode($データ)
{
    rtrimを返します (strtr(base64_encode($data), '+/', '-_'), '=');
}

$ossClient = new OssClient($accessKeyId, $accessKeySecret, $end point, false);
// 処理するイメージが指定されたバケットに存在しない場合は、指定されたバケットにイメージをアップロードする必要があります。 
// $ossClient->uploadFile($bucket、$object、"D :\\ localpath\\exampleobject.jpg");

// 画像のサイズを100 × 100ピクセルに変更した後、画像を90度回転させます。 
$style = "image/resize,m_fixed,w_100,h_100/rotate,90";

$process = $styleです。
           '| sys/saveas' です。
           ',o_'.base64url_encode($save_object) 。
           ',b_'.base64url_encode($bucket);

// 処理された画像example-new.pngに名前を付け、画像を現在のバケットに保存します。 
$result = $ossClient->processObject($bucket, $object, $process);
// 処理された結果を表示します。 
print($result); 
const OSS = require('ali-OSS ');

const client = new OSS({
  // バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンをoss-cn-Hangzhouに設定します。 
  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'
});

const sourceImage = 'sourceObject.png ';
const targetImage = 'targetObject.jpg ';
async関数processImage(processStr, targetBucket) {
  const result = await client.processObjectSave ()
    sourceImage,
    targetImage,
    processStr,
    targetBucket
  );
  console.log(result.res.status);
}

// イメージのサイズを変更し、処理済みイメージの保存に使用する宛先バケットを設定します。 
processImage("image/resize,m_fixed,w_100,h_100", "target bucket")

// イメージをクロップし、処理されたイメージを保存するために使用される宛先バケットを設定します。 
processImage("image/crop,w_100,h_100,x_100,y_100,r_1", "target bucket")

// イメージを回転させ、処理されたイメージを保存するために使用される宛先バケットを設定します。 
processImage("image/rotate,90", "target bucket")

// イメージをシャープにし、処理されたイメージを保存するために使用される宛先バケットを設定します。 
processImage("image/sharpen,100", "target bucket")

// 画像に透かしを追加し、処理された画像を保存するために使用される宛先バケットを設定します。 
processImage("image/watermark,text_SGVsbG8g5Zu-54mH5pyN5YqhIQ", "target bucket")

// イメージの形式を変換し、処理されたイメージを保存するために使用される宛先バケットを設定します。 
processImage("image/format,jpg", "target bucket")

// イメージの形式を変換し、処理されたイメージを保存するために使用される宛先バケットを設定します。 
processImage("image/format,jpg", "target bucket")
# -*- coding: utf-8 -*-
osのインポート
インポートbase64
oss2のインポート
oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート

# 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
# バケットの名前を指定します。 
bucket = oss2.Bucket(auth, 'https:// oss-cn-hangzhou.aliyuncs.com ', 'examplebucket')
# ソースイメージが保存されているバケットの名前を指定します。 
source_bucket_name = 'srcbucket'
# 処理されたイメージを保存するバケットの名前を指定します。 バケットは、ソースイメージが保存されているバケットと同じリージョン内にある必要があります。 
target_bucket_name = 'destbucket'
# ソースイメージの名前を指定します。 イメージがバケットのルートディレクトリに保存されていない場合は、イメージのフルパスを指定する必要があります。 例: Example /example.jpg 
source_image_name = 'example/example.jpg'

# 画像のサイズを100 × 100ピクセルに変更します。 
style = 'image/resize,m_fixed,w_100,h_100'
# 処理されたイメージの名前を指定します。 イメージがバケットのルートディレクトリに保存されていない場合は、イメージのフルパスを指定する必要があります。 例: exampledir/example.jpg 
target_image_name = 'exampledir/example.jpg'
process = "{0}| sys/saveas,o_{1},b_{2}".format(style, 
    oss2.compat.to_string(base64.urlsafe_b64encode(oss2.compat.to_bytes(target_image_name))),
    oss2.compat.to_string (base64.urlsaf_b64encode (oss2.compat.to_bytes(target_bucket_name))))
result = bucket.process_object(source_image_name, process)
print(result) 
// fromBucketは、ソースバケットの名前を示します。 toBucketは、宛先バケットの名前を示します。 
// fromObjectKeyは、ソースオブジェクトの名前を示します。 toObjectkeyは、宛先オブジェクトの名前を示します。 ソースオブジェクトと宛先オブジェクトの名前は、イメージオブジェクトのサフィックスを含む完全なパスでなければなりません。 例: abc/efg/123.jpg. 
// アクションはIMG操作を示します。 
ImagePersistRequest request = new ImagePersistRequest(fromBucket,fromObjectKey,toBucket,toObjectkey,action);

        OSSAsyncTask task = mOss.asyncImagePersist(request, new OSSCompletedCallback<ImagePersistRequest, ImagePersistResult>() {
            @オーバーライド
            public void onSuccess(ImagePersistRequestリクエスト, ImagePersistResult結果) {
                // 成功コールバック
            }

            @オーバーライド
            public void onFailure(ImagePersistRequestリクエスト, ClientException clientException, ServiceException serviceException) {
                  // errrorコールバック
            }
        }); 
パッケージメイン

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

func HandleError (エラーエラー) {
    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)
    }

    // Create an OSSClient instance. 
    // バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。 
    client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider))
    if err! =nil {
    HandleError(err)
    }

    // ソースイメージが保存されているバケットの名前を指定します。 例: srcbucket. 
    bucketName := "SourceBucketName"
    bucket, err := client.Bucket(bucketName)
    if err! =nil {
    HandleError(err)
    }
    // ソースイメージの名前を指定します。 ソースイメージがバケットのルートディレクトリに保存されていない場合は、イメージのフルパスを指定する必要があります。 例: Example /example.jpg 
    sourceImageName := "yourObjectName"
    // 処理されたイメージを保存するバケットの名前を指定します。 バケットは、ソースイメージが保存されているバケットと同じリージョンに配置する必要があります。 
    targetBucketName := "TargetBucketName"
    // 処理されたイメージの名前を指定します。 処理されたイメージがバケットのルートディレクトリに保存されていない場合は、イメージのフルパスを指定する必要があります。 例: exampledir/example.jpg 
    targetImageName := "TargetObjectName"
    // 画像のサイズを100x100ピクセルに変更し、画像を特定のバケットに保存します。 
    style := "image/resize,m_fixed,w_100,h_100"
    process := fmt.Sprintf("% s | sys/saveas,o_% v,b_% v", style, base64.URLEncoding.EncodeToString([] バイト (targetImageName))), base64.URLEncoding.EncodeToString([] バイト (targetBucketName)))
    result, err := bucket.ProcessObject(sourceImageName, process)
    if err! =nil {
    HandleError(err)
    } else {
    fmt.Println(result)
    }
}
OSSImagePersistRequest * request = [OSSImagePersistRequest new];
// ソースイメージが配置されているバケットの名前を指定します。 
request.fromBucket = @ "srcbucket";
// ソースイメージの名前を指定します。 イメージがバケットのルートディレクトリに保存されていない場合は、イメージのフルパスを指定する必要があります。 例: exampledir/src.jpg 
request.fromObject = @ "exampledir/src.jpg";
// 処理されたイメージを格納するバケットの名前を指定します。 バケットは、ソースイメージが保存されているバケットと同じリージョンに配置する必要があります。 
request.toBucket = @ "destbucket";
// 処理されたイメージの名前を指定します。
request.toObject = @ "exampledir/dest.jpg";
// 画像のサイズを100ピクセルの幅に変更し、処理した画像を現在のバケットに保存します。 
request.action = @ "image/resize,w_100";
// request.action = @ "resize,w_100";

[[[[ossClient imageActionPersist: リクエスト] continueWithBlock:^ id _Nullable(OSSTask * _Nonnullタスク)) {

    nilを返します。}] waitUntilFinished]; 
#include <alibabacloud/oss/OssClient.h>
# include <sstream>
名前空間listaCloud::OSSを使用します。int main(void)
{
    /* OSSへのアクセスに使用されるアカウントに関する情報を初期化します。 */
            
    /* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 */
    std::string Endpoint = "yourEndpoint";
    /* バケットの名前を指定します。 例: examplebucket. */
    std::string BucketName = "examplebucket";
    /* ソースイメージの名前を指定します。 イメージがバケットのルートディレクトリに保存されていない場合は、イメージ名の前にイメージへのパスを追加します。 例: Example /example.jpg */
    std::string SourceObjectName = "example/example.jpg";
    /* 処理されたイメージの名前を指定します。 イメージがバケットのルートディレクトリに保存されていない場合は、イメージ名の前にイメージへのパスを追加します。 例: exampledir/example.jpg */
    std::string TargetObjectName = "exampledir/example.jpg";

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

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

    /* イメージのサイズを100ピクセルの高さと幅に変更し、ソースイメージが保存されているバケットにイメージを保存します。 */
    std::string Process = "image/resize,m_fixed,w_100,h_100";
    std::stringstream ss;
    ss <<プロセス 
    <<"| sys/saveas"
    << ",o_" << Base64EncodeUrlSafe(TargetObjectName)
    << ",b_" << Base64EncodeUrlSafe(BucketName);
    ProcessObjectRequestリクエスト (BucketName, SourceObjectName, ss.str());
    auto outcome = client.ProcessObject (リクエスト);
    if (outcome.isSuccess()) {
    std::cout << "画像は正常に処理されました。" << std::endl;
    } else {
    std::cout << "イメージの処理に失敗しました。 エラーコード: " << outcome. Error (). code ()
              << ", Message: " << outcome.error().Message()
              << ", RequestId: " << outcome.error().RequestId() << std::endl;
    }

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

OSS APIの使用

ビジネスで高度なカスタマイズが必要な場合は、RESTful APIを直接呼び出すことができます。 APIを直接呼び出すには、コードに署名計算を含める必要があります。

saveasパラメーターをIMGリクエストに追加する場合は、次の表に示すオプションを指定する必要があります。

オプション

説明

o

処理された画像が保存されるオブジェクトの名前。 このオプションの値は、URLセーフBase64-encodedである必要があります。 詳細については、「透かしの追加」をご参照ください。

b

処理されたイメージを保存するバケットの名前。 このオプションの値は、URLセーフBase64-encodedである必要があります。 このオプションが指定されていない場合、処理されたイメージは、ソースイメージが格納されているバケットに保存されます。

次のいずれかの方法を使用して画像を処理し、処理した画像を特定のバケットに保存できます。

  • 次のサンプルコードは、イメージを処理し、処理したイメージを特定のバケットに保存するようにIMGパラメーターを設定する方法の例を示しています。

    POST /ObjectName?x-oss-プロセスHTTP/1.1
    ホスト: oss-example.oss.aliyuncs.com
    コンテンツ-長さ: 247
    日付: 5月4日金曜日2012 03:21:12 GMT
    権限付与: OSS qn6qrrqxo2oawuk53otf ****:KU5h8YMUC78M30dXqf3JxrT ****=
    
    // test.jpgという名前のソースイメージのサイズを100ピクセルの幅に比例して変更し、処理したイメージをテストバケットに保存します。 
    x-oss-process=image/resize,w_100 | sys/saveas,o_dGVzdC5qcGc,b_dGVzdA 
  • 次のサンプルコードは、イメージスタイルを使用してイメージを処理し、処理したイメージを特定のバケットに保存する方法の例を示しています。

    POST /ObjectName?x-oss-プロセスHTTP/1.1
    ホスト: oss-example.oss.aliyuncs.com
    コンテンツ-長さ: 247
    日付: 5月4日金曜日2012 03:22:13 GMT
    権限付与: OSS qn6qrrqxo2oawuk53otf ****:KU5h8YMUC78M30dXqf3JxrT ****=
    
    // examplestyleという名前のイメージスタイルを使用して、test.jpgという名前のソースイメージを処理し、処理したイメージをテストバケットに保存します。 
    x-oss-process=style/examplestyle | sys/saveas,o_dGVzdC5qcGc,b_dGVzdA