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

Object Storage Service:IMG

最終更新日:Dec 15, 2023

Image Processing (IMG) は、イメージの処理を支援するためにObject Storage service (OSS) によって提供される、安全で費用対効果の高い信頼性の高いイメージ処理サービスです。 ソースイメージをOSSにアップロードした後、RESTful APIを呼び出して、いつでもどこでも、接続されたデバイスでイメージを処理できます。

使用上の注意

  • このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba Cloudサービスを使用してOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSでサポートされているリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

  • このトピックでは、アクセス資格情報は環境変数から取得します。 アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。

  • このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSecurity Token Service (STS) を使用してOSSClientインスタンスを作成する場合は、「OSSClientインスタンスの作成」をご参照ください。

IMGパラメータを使用した画像処理

  • 単一のIMGパラメータを使用して画像を処理する

    com.aliyun.oss.*;
    impor t com.aliyun.oss.com mon.auth.*;
    com.aliyun.oss.mo del.GetObjectRequestをインポートします。java.io. ファイルをインポートします。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";
            // オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 
            文字列objectName = "exampleobject.jpg";
            // 処理した画像を保存するフルパスを指定します。 例: D :\\ localpath\\example-resize.jpg 同じ名前のファイルがすでにパスに存在する場合、処理されたイメージはファイルを上書きします。 そうでなければ、処理された画像はパスに保存される。 
            String localPath = "D :\\ localpath\\example-resize.jpg";
    
            // Create an OSSClient instance. 
            OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
    
            try {
                // 画像のサイズを100ピクセルの高さと幅に変更します。 
                String style = "image/resize,m_fixed,w_100,h_100";
                GetObjectRequest request = new GetObjectRequest(bucketName, objectName);
                request.setProcess(style);
                // 処理された画像example-resize.jpgに名前を付け、画像をローカルコンピューターに保存します。 
                // ファイルのローカルパスを指定せずに、example-resize.jpgなどのローカルファイル名のみを指定した場合、処理済み画像はサンプルプログラムが属するプロジェクトのローカルパスに保存されます。 
                ossClient.getObject(request, new File(localPath));
            } 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();
                }
            }
        }
    }
  • 異なるIMGパラメータを使用して画像を処理する

    com.aliyun.oss.*;
    impor t com.aliyun.oss.com mon.auth.*;
    com.aliyun.oss.mo del.GetObjectRequestをインポートします。java.io. ファイルをインポートします。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";
            // オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 
            文字列objectName = "exampleobject.jpg";
    
            // Create an OSSClient instance. 
            OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
    
            try {
                // 画像のサイズを100ピクセルの高さと幅に変更します。 
                String style = "image/resize,m_fixed,w_100,h_100";
                GetObjectRequest request = new GetObjectRequest(bucketName, objectName);
                request.setProcess(style);
                // 処理された画像example-resize.jpgに名前を付け、画像をローカルコンピューターに保存します。 
                // 処理した画像を保存するフルパスを指定します。 例: D :\\ localpath\\example-resize.jpg 同じ名前のファイルがすでにパスに存在する場合、処理されたイメージはファイルを上書きします。 そうでなければ、処理された画像はパスに保存される。 
                // ファイルのローカルパスを指定せずに、example-resize.jpgなどのローカルファイル名のみを指定した場合、処理済み画像はサンプルプログラムが属するプロジェクトのローカルパスに保存されます。 
                ossClient.getObject (要求、新しいファイル ("D :\\ localpath\\example-resize.jpg"));
    
                // 座標ペアを (100, 100) に設定して、画像を100ピクセルの高さと幅にトリミングします。 
                style = "image/crop,w_100,h_100,x_100,y_100";
                request = new GetObjectRequest(bucketName, objectName);
                request.setProcess(style);
                // 処理された画像example-crop.jpgに名前を付け、画像をローカルコンピューターに保存します。 
                ossClient.getObject (要求、新しいファイル ("D :\\ localpath\\example-crop.jpg"));
    
                // 画像を90度回転させます。 
                style = "image/rotate,90";
                request = new GetObjectRequest(bucketName, objectName);
                request.setProcess(style);
                // 処理された画像example-rotate.jpgに名前を付け、画像をローカルコンピューターに保存します。 
                ossClient.getObject (要求、新しいファイル ("D :\\ localpath\\example-rotate.jpg"));
    
                // 画像にテキストの透かしを追加します。 
                // Base64でテキスト透かしコンテンツをエンコードした後、エンコードされた結果のプラス記号 (+) をハイフン (-) に、スラッシュ (/) をアンダースコア (_) に置き換え、末尾の等号 (=) を削除します。 次に、透かし文字列を取得できます。 
                // テキスト透かしのコンテンツとしてHello Worldを指定し、テキストコンテンツをエンコードします。 次に、SGVsbG8gV29ybGQ文字列を取得できます。 
                style = "画像 /透かし、text_SGVsbG8gV29ybGQ";
                request = new GetObjectRequest(bucketName, objectName);
                request.setProcess(style);
                // 処理された画像example-watermarktext.jpgに名前を付け、画像をローカルコンピューターに保存します。 
                ossClient.getObject (要求、新しいファイル ("D :\\ localpath\\example-watermarktext.jpg"));
    
                // 画像に画像の透かしを追加します。 ウォーターマークイメージが、ソースイメージを格納するバケットに格納されていることを確認します。 
                // ウォーターマークイメージのフルパスがBase64でエンコードされた後、エンコードされた結果のプラス記号 (+) をハイフン (-) に、スラッシュ (/) をアンダースコア (_) に置き換え、末尾の等号 (=) を削除します。 次に、透かし文字列を取得できます。 
                // 透かし画像のフルパスとしてpanda.jpgを指定し、フルパスをエンコードします。 次に、cGFuZGEuanBn文字列を取得できます。 
                style = "image/watermark,image_cGFuZGEuanBn";
                request = new GetObjectRequest(bucketName, objectName);
                request.setProcess(style);
                // 処理された画像example-watermarkimage.jpgに名前を付け、画像をローカルコンピューターに保存します。 
                ossClient.getObject (要求、新しいファイル ("D :\\ localpath\\example-watermarkimage.jpg"));
            } 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();
                }
            }
        }
    }
  • 複数のIMGパラメータを使用して画像を同時に処理する

    次のサンプルコードは、複数のIMGパラメーターを使用してイメージを同時に処理する方法の例を示しています。 IMGパラメーターはスラッシュ (/) で区切ります。

    com.aliyun.oss.*;
    impor t com.aliyun.oss.com mon.auth.*;
    com.aliyun.oss.mo del.GetObjectRequestをインポートします。java.io. ファイルをインポートします。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";
            // オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 
            文字列objectName = "exampleobject.jpg";
            // 処理した画像を保存するフルパスを指定します。 例: D :\\ localpath\\example-new.jpg 同じ名前のファイルがすでにパスに存在する場合、処理されたイメージはファイルを上書きします。 そうでなければ、処理された画像はパスに保存される。 
            文字列pathName = "D :\\ localpath\\example-new.jpg";
    
            // Create an OSSClient instance. 
            OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
    
            try {
                // 画像のサイズを100ピクセルの高さと幅に変更し、画像を90度回転させます。 
                String style = "image/resize,m_fixed,w_100,h_100/rotate,90";
                GetObjectRequest request = new GetObjectRequest(bucketName, objectName);
                request.setProcess(style);
                // 処理された画像example-new.jpgに名前を付け、画像をローカルコンピューターに保存します。 
                // ファイルのローカルパスを指定せずに、example-new.jpgなどのローカルファイル名のみを指定した場合、処理済み画像はサンプルプログラムが属するプロジェクトのローカルパスに保存されます。 
                ossClient.getObject (要求、新しいファイル ("D :\\ localpath\\example-new.jpg"));
            } 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();
                }
            }
        }
    }

イメージスタイルを使用してイメージを処理する

OSSコンソールでイメージスタイルを作成し、そのスタイルに複数のIMGパラメーターをカプセル化できます。 次に、スタイルを使用して画像を処理できます。 詳細については、「イメージスタイル」をご参照ください。

次のサンプルコードは、イメージスタイルを使用してイメージを処理する方法の例を示しています。

com.aliyun.oss.*;
impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.mo del.GetObjectRequestをインポートします。java.io. ファイルをインポートします。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";
        // オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 
        文字列objectName = "exampleobject.jpg";
        // 処理した画像を保存するフルパスを指定します。 例: D :\\ localpath\\example-new.jpg 同じ名前のファイルがすでにパスに存在する場合、処理されたイメージはファイルを上書きします。 そうでなければ、処理された画像はパスに保存される。 
        文字列pathName = "D :\\ localpath\\example-new.jpg";

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

        try {
            // カスタム画像スタイルを使用して画像を処理します。 
            // この例では、yourCustomStyleNameをOSSコンソールで作成したイメージスタイルの名前に置き換えます。 
            String style = "style/yourCustomStyleName";
            GetObjectRequest request = new GetObjectRequest(bucketName, objectName);
            request.setProcess(style);
            // 処理された画像example-new.jpgに名前を付け、画像をローカルコンピューターに保存します。 
            // ファイルのローカルパスを指定せずに、example-new.jpgなどのローカルファイル名のみを指定した場合、処理済み画像はサンプルプログラムが属するプロジェクトのローカルパスに保存されます。 
            ossClient.getObject(request, new File(pathName));
        } 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();
            }
        }
    }
}

処理された画像を保存する

デフォルトでは、IMGは処理済み画像を保存しません。 ImgSaveAs操作を呼び出して、ソースイメージが保存されているバケットにイメージを保存できます。

次のコードは、処理されたイメージを保存する方法の例を示します。

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

IMGパラメータを含む署名付きオブジェクトURLを生成する

プライベートオブジェクトのURLに署名する必要があります。 署名付きURLの末尾にIMGパラメーターを追加することはできません。 プライベートオブジェクトを処理する場合は、署名にIMGパラメーターを追加します。 次のサンプルコードは、署名にIMGパラメーターを追加する方法の例を示しています。

com.aliyun.oss.*;
impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.mo del.GeneratePresignedUrlRequestをインポートします。impor t java.net.URL;
java.util.Dateをインポートします。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";
        // オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 
        文字列objectName = "exampleobject.jpg";

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

        try {
            // 画像のサイズを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 (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();
            }
        }
    }
}

参考資料

  • サポートされるIMGパラメーターの詳細については、「概要」をご参照ください。

  • IMGの完全なサンプルコードについては、『GitHub』をご参照ください。