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/ | イメージスタイルが続くことを示す固定プレフィックス。 |
stylename | OSS コンソールで作成されたスタイルの名前。詳細については、「イメージスタイルの作成」をご参照ください。 |
処理順序: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 リクエストに追加して、結果を指定したバケットに永続化します。詳細については、「処理済みイメージの保存」をご参照ください。