イメージ処理は、Object Storage Service (OSS) の機能の 1 つで、大規模で安全、コスト効率が高く、信頼性の高いイメージ処理サービスを提供します。 イメージを OSS にアップロードした後、シンプルな RESTful インターフェイスを使用して、いつでも、どこでも、インターネットに接続された任意のデバイスからイメージを処理できます。
注意事項
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSS と同じリージョンにある他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用します。 OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、環境変数からアクセス認証情報を取得します。 アクセス認証情報の設定方法の詳細については、「アクセス認証情報の設定」をご参照ください。
このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。 カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、「クライアントの設定 (Go SDK V1)」をご参照ください。
イメージ処理パラメーターを使用したイメージの処理
単一のイメージ処理パラメーターでイメージを処理し、ローカルファイルとして保存
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) } // OSSClient インスタンスを作成します。 // yourEndpoint をバケットのエンドポイントに設定します。 たとえば、中国 (杭州) リージョンのバケットの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 他のリージョンについては、実際のエンドポイントを使用します。 // yourRegion をバケットが配置されているリージョンに設定します。 たとえば、中国 (杭州) リージョンのバケットの場合、リージョンを cn-hangzhou に設定します。 他のリージョンについては、実際のリージョンを使用します。 clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)} clientOptions = append(clientOptions, oss.Region("yourRegion")) // 署名バージョンを設定します。 clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4)) client, err := oss.New("yourEndpoint", "", "", clientOptions...) if err != nil { HandleError(err) } // ソースイメージが格納されているバケットの名前 (examplebucket など) を指定します。 bucketName := "examplebucket" bucket, err := client.Bucket(bucketName) if err != nil { HandleError(err) } // ソースイメージの名前。 イメージがバケットのルートディレクトリにない場合は、example/example.jpg などのファイルパスを含めます。 sourceImageName := "yourObjectName" // 処理されたイメージの名前を指定します。 targetImageName := "LocalFileName" // イメージのサイズを幅と高さが 100 px の固定値に変更し、ローカルに保存します。 style := "image/resize,m_fixed,w_100,h_100" err = bucket.GetObjectToFile(sourceImageName, targetImageName, oss.Process(style)) if err != nil { HandleError(err) } }複数のイメージ処理パラメーターでイメージを処理し、ローカルファイルとして保存
複数のイメージ処理パラメーターを使用する場合は、スラッシュ (/) で区切ります。
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) } // OSSClient インスタンスを作成します。 // yourEndpoint をバケットのエンドポイントに設定します。 たとえば、中国 (杭州) リージョンのバケットの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 他のリージョンについては、実際のエンドポイントを使用します。 // yourRegion をバケットが配置されているリージョンに設定します。 たとえば、中国 (杭州) リージョンのバケットの場合、リージョンを cn-hangzhou に設定します。 他のリージョンについては、実際のリージョンを使用します。 clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)} clientOptions = append(clientOptions, oss.Region("yourRegion")) // 署名バージョンを設定します。 clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4)) client, err := oss.New("yourEndpoint", "", "", clientOptions...) if err != nil { HandleError(err) } // ソースイメージが格納されているバケットの名前 (examplebucket など) を指定します。 bucketName := "examplebucket" bucket, err := client.Bucket(bucketName) if err != nil { HandleError(err) } // ソースイメージの名前を指定します。 イメージがバケットのルートディレクトリにない場合は、exampledir/example.jpg などのイメージの完全なパスを含めます。 sourceImageName := "exampledir/example.jpg" // 処理されたイメージの名前を指定します。 targetImageName := "exampledir/newexample.jpg" // イメージのサイズを幅と高さが 100 px の固定値に変更し、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) } }
スタイルを使用したイメージの処理
複数のイメージ処理パラメーターをスタイルにカプセル化し、そのスタイルを使用してイメージをバッチ処理できます。 詳細については、「イメージスタイル」をご参照ください。 次のコードは、スタイルを使用してイメージを処理する方法を示しています。
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)
}
// OSSClient インスタンスを作成します。
// yourEndpoint をバケットのエンドポイントに設定します。 たとえば、中国 (杭州) リージョンのバケットの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 他のリージョンについては、実際のエンドポイントを使用します。
// yourRegion をバケットが配置されているリージョンに設定します。 たとえば、中国 (杭州) リージョンのバケットの場合、リージョンを cn-hangzhou に設定します。 他のリージョンについては、実際のリージョンを使用します。
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// 署名バージョンを設定します。
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
HandleError(err)
}
// ソースイメージが格納されているバケットの名前 (examplebucket など) を指定します。
bucketName := "examplebucket"
bucket, err := client.Bucket(bucketName)
if err != nil {
HandleError(err)
}
// ソースイメージの名前を指定します。 イメージがバケットのルートディレクトリにない場合は、example/example.jpg などのファイルの完全なパスを含めます。
sourceImageName := "example/example.jpg"
// 処理されたイメージに newexample.jpg という名前を付け、ローカルに保存します。
targetImageName := "D:\\localpath\\newexample.jpg"
// スタイルを使用してイメージを処理します。 yourCustomStyleName を OSS コンソールで作成したイメージスタイルの名前に設定します。
style := "style/yourCustomStyleName"
// 処理されたイメージをローカルに保存します。
err = bucket.GetObjectToFile(sourceImageName, targetImageName, oss.Process(style))
if err != nil {
HandleError(err)
}
}
イメージ処理の永続化
ImgSaveAs 操作を使用して、処理されたイメージを指定したバケットに保存できます。
package main
import (
"encoding/base64"
"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)
}
// OSSClient インスタンスを作成します。
// yourEndpoint をバケットのエンドポイントに設定します。 たとえば、中国 (杭州) リージョンのバケットの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 他のリージョンについては、実際のエンドポイントを使用します。
// yourRegion をバケットが配置されているリージョンに設定します。 たとえば、中国 (杭州) リージョンのバケットの場合、リージョンを cn-hangzhou に設定します。 他のリージョンについては、実際のリージョンを使用します。
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// 署名バージョンを設定します。
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
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"
// イメージのサイズを幅と高さが 100 px の固定値に変更し、指定したバケットに保存します。
style := "image/resize,m_fixed,w_100,h_100"
process := fmt.Sprintf("%s|sys/saveas,o_%v,b_%v", style, base64.URLEncoding.EncodeToString([]byte(targetImageName)), base64.URLEncoding.EncodeToString([]byte(targetBucketName)))
result, err := bucket.ProcessObject(sourceImageName, process)
if err != nil {
HandleError(err)
} else {
fmt.Println(result)
}
}
イメージ処理パラメーターを含むファイルの署名付き URL の生成
非公開ファイルのアクセス URL には署名が含まれています。 OSS は、署名付き URL にイメージ処理パラメーターを直接追加することをサポートしていません。 非公開ファイルを処理するには、署名にイメージ処理パラメーターを追加する必要があります。 次のコードに例を示します。
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)
}
// OSSClient インスタンスを作成します。
// yourEndpoint をバケットのエンドポイントに設定します。 たとえば、中国 (杭州) リージョンのバケットの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 他のリージョンについては、実際のエンドポイントを使用します。
// yourRegion をバケットが配置されているリージョンに設定します。 たとえば、中国 (杭州) リージョンのバケットの場合、リージョンを cn-hangzhou に設定します。 他のリージョンについては、実際のリージョンを使用します。
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// 署名バージョンを設定します。
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
HandleError(err)
}
// イメージが格納されているバケットの名前 (examplebucket など) を指定します。
bucketName := "examplebucket"
bucket, err := client.Bucket(bucketName)
if err != nil {
HandleError(err)
}
// イメージの名前を指定します。 イメージがバケットのルートディレクトリにない場合は、exampledir/example.jpg などのファイルの完全なパスを含めます。
ossImageName := "exampledir/example.jpg"
// 600 秒後に有効期限が切れる署名付き URL を生成します。 最大有効期間は 32,400 秒です。
signedURL, err := bucket.SignURL(ossImageName, oss.HTTPGet, 600, oss.Process("image/format,png"))
if err != nil {
HandleError(err)
} else {
fmt.Println(signedURL)
}
}
関連ドキュメント
イメージ処理でサポートされているパラメーターの詳細については、「イメージ処理」をご参照ください。