イメージ処理は、Object Storage Service (OSS) が提供する、大規模で安全、低コスト、高信頼性のイメージ処理サービスです。 イメージを OSS にアップロードすると、インターネットに接続されたデバイスから、いつでもどこでも簡単な RESTful インターフェイスを使用してイメージを処理できます。
注意事項
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスするには、内部エンドポイントを使用します。 サポートされているリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、環境変数からアクセス認証情報を取得します。 アクセス認証情報の設定方法の詳細については、「アクセス認証情報の設定」をご参照ください。
このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。 カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、「一般的なシナリオの設定例」をご参照ください。
イメージ処理パラメーターを使用したイメージの処理
単一のイメージ処理パラメーターを使用したイメージの処理
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 { // この例では、中国 (杭州) リージョンのエンドポイントを使用します。 実際のエンドポイントに置き換えてください。 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"; // ローカルファイルの完全なパスを設定します。 例: D:\\localpath\\example-resize.jpg。 指定したローカルファイルが存在する場合は上書きされ、存在しない場合は作成されます。 String localPath = "D:\\localpath\\example-resize.jpg"; // バケットが配置されているリージョンを設定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。 String region = "cn-hangzhou"; // OSSClient インスタンスを作成します。 // OSSClient インスタンスが不要になったら、シャットダウンメソッドを呼び出してリソースを解放します。 ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration(); clientBuilderConfiguration.setSignatureVersion(SignVersion.V4); OSS ossClient = OSSClientBuilder.create() .endpoint(endpoint) .credentialsProvider(credentialsProvider) .clientConfiguration(clientBuilderConfiguration) .region(region) .build(); try { // イメージを幅と高さが 100 px の固定サイズに変更します。 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 (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(); } } } }異なるイメージ処理パラメーターを使用したイメージの処理
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 { // この例では、中国 (杭州) リージョンのエンドポイントを使用します。 実際のエンドポイントに置き換えてください。 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"; // バケットが配置されているリージョンを設定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。 String region = "cn-hangzhou"; // OSSClient インスタンスを作成します。 // OSSClient インスタンスが不要になったら、シャットダウンメソッドを呼び出してリソースを解放します。 ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration(); clientBuilderConfiguration.setSignatureVersion(SignVersion.V4); OSS ossClient = OSSClientBuilder.create() .endpoint(endpoint) .credentialsProvider(credentialsProvider) .clientConfiguration(clientBuilderConfiguration) .region(region) .build(); try { // イメージを幅と高さが 100 px の固定サイズに変更します。 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(request, new File("D:\\localpath\\example-resize.jpg")); // 座標 (100,100) から開始して、イメージを幅と高さが 100 px になるようにトリミングします。 style = "image/crop,w_100,h_100,x_100,y_100"; request = new GetObjectRequest(bucketName, objectName); request.setProcess(style); // 処理されたイメージに example-crop.jpg という名前を付け、ローカルパスに保存します。 ossClient.getObject(request, new File("D:\\localpath\\example-crop.jpg")); // イメージを 90 度回転させます。 style = "image/rotate,90"; request = new GetObjectRequest(bucketName, objectName); request.setProcess(style); // 処理されたイメージに example-rotate.jpg という名前を付け、ローカルパスに保存します。 ossClient.getObject(request, new File("D:\\localpath\\example-rotate.jpg")); // イメージにテキストのウォーターマークを追加します。 // ウォーターマーク文字列を取得するには、ウォーターマークのテキストコンテンツを Base64 エンコードします。 次に、プラス記号 (+) をハイフン (-) に、スラッシュ (/) をアンダースコア (_) に置き換え、末尾の等号 (=) を削除します。 // テキスト "Hello World" のウォーターマーク文字列は、エンコード後 SGVsbG8gV29ybGQ になります。 style = "image/watermark,text_SGVsbG8gV29ybGQ"; request = new GetObjectRequest(bucketName, objectName); request.setProcess(style); // 処理されたイメージに example-watermarktext.jpg という名前を付け、ローカルパスに保存します。 ossClient.getObject(request, new File("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(request, new File("D:\\localpath\\example-watermarkimage.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(); } } } }複数のイメージ処理パラメーターを使用したイメージの同時処理
同じイメージで複数のイメージ処理パラメーターを使用するには、スタイル文字列内のパラメーターをスラッシュ (/) で区切ります。
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 { // この例では、中国 (杭州) リージョンのエンドポイントを使用します。 実際のエンドポイントに置き換えてください。 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"; // ローカルファイルの完全なパスを設定します。 例: D:\\localpath\\example-new.jpg。 指定したローカルファイルが存在する場合は上書きされ、存在しない場合は作成されます。 String pathName = "D:\\localpath\\example-new.jpg"; // バケットが配置されているリージョンを設定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。 String region = "cn-hangzhou"; // OSSClient インスタンスを作成します。 // OSSClient インスタンスが不要になったら、シャットダウンメソッドを呼び出してリソースを解放します。 ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration(); clientBuilderConfiguration.setSignatureVersion(SignVersion.V4); OSS ossClient = OSSClientBuilder.create() .endpoint(endpoint) .credentialsProvider(credentialsProvider) .clientConfiguration(clientBuilderConfiguration) .region(region) .build(); try { // イメージを幅と高さが 100 px の固定サイズに変更し、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(request, new File("D:\\localpath\\example-new.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(); } } } }
イメージスタイルを使用したイメージの処理
OSS コンソールでイメージスタイルを作成して、複数のイメージ処理パラメーターをカプセル化できます。 その後、そのスタイルを使用してイメージをバッチ処理できます。 詳細については、「イメージスタイル」をご参照ください。
次のコードは、イメージスタイルを使用してイメージを処理する方法の例を示しています。
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 {
// この例では、中国 (杭州) リージョンのエンドポイントを使用します。 実際のエンドポイントに置き換えてください。
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";
// ローカルファイルの完全なパスを設定します。 例: D:\\localpath\\example-new.jpg。 指定したローカルファイルが存在する場合は上書きされ、存在しない場合は作成されます。
String pathName = "D:\\localpath\\example-new.jpg";
// バケットが配置されているリージョンを設定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
String region = "cn-hangzhou";
// OSSClient インスタンスを作成します。
// OSSClient インスタンスが不要になったら、シャットダウンメソッドを呼び出してリソースを解放します。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
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 (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();
}
}
}
}イメージ処理の永続化
デフォルトでは、イメージ処理サービスは処理されたイメージを保存しません。 ImgSaveAs 操作を使用して、処理されたイメージをソースバケットに保存できます。
次のコードは、処理されたイメージを永続化する方法の例を示しています。
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.common.utils.BinaryUtil;
import com.aliyun.oss.common.utils.IOUtils;
import com.aliyun.oss.model.GenericResult;
import com.aliyun.oss.model.ProcessObjectRequest;
import java.util.Formatter;
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 sourceImage = "exampleimage.png";
// バケットが配置されているリージョンを設定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
String region = "cn-hangzhou";
// OSSClient インスタンスを作成します。
// OSSClient インスタンスが不要になったら、シャットダウンメソッドを呼び出してリソースを解放します。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// イメージを幅と高さが 100 px の固定サイズに変更します。
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 (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();
}
}
}
}イメージ処理パラメーターを含むファイルの署名付き URL の生成
非公開ファイルのアクセス URL には署名が必要です。 署名付き URL にイメージ処理パラメーターを直接追加することはできません。 非公開ファイルを処理するには、署名付き URL を生成する前に、署名文字列にイメージ処理パラメーターを追加する必要があります。 次のコードは、その例を示しています。
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
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";
// バケットが配置されているリージョンを設定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
String region = "cn-hangzhou";
// OSSClient インスタンスを作成します。
// OSSClient インスタンスが不要になったら、シャットダウンメソッドを呼び出してリソースを解放します。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// イメージを幅と高さが 100 px の固定サイズに変更し、90 度回転させます。
String style = "image/resize,m_fixed,w_100,h_100/rotate,90";
// 署名付き URL の有効期限を 10 分に設定します。 最大有効期限は 32,400 秒です。
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("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();
}
}
}
}