一部の画像には、画像の属性や撮影設定を含む Exchangeable Image File Format (EXIF) データが含まれている場合があります。画像の EXIF データには、圧縮率、方向、水平解像度、垂直解像度などの画像情報が含まれています。画像の EXIF データを取得するには、info パラメーターを画像の URL に追加します。
パラメーター
操作: info
返される情報は JSON 形式です。
画像処理リクエストで info 操作を他の操作と一緒に使用することはできません。たとえば、image/resize,s_700,limit_0/info
を使用して画像のサイズを変更し、サイズ変更された画像に関する情報を同時にクエリすることはできません。
制限
info 操作を使用して、JPG、PNG、BMP、GIF、WebP、TIFF、および HEIC 画像に関する情報のみをクエリできます。
PNG 形式はサポートされていますが、info 操作を使用して PNG 画像の EXIF データをクエリすることはできません。
操作
URL、OSS SDK、または RESTful API を使用して画像処理パラメーターを設定できます。URL は、公開アクセス可能な画像に適しています。非公開の画像には、OSS SDK または RESTful API を使用することをお勧めします。詳細については、「IMG の実装モード」をご参照ください。
公開読み取りまたは公開読み書きの画像に関する情報を取得する
画像処理パラメーターを URL に直接追加することで、公開読み取りまたは公開読み書きの画像に関する情報を取得できます。
EXIF データを含まない画像に関する情報をクエリする
https://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/info
EXIF データを含まない画像の URL に info パラメーターを追加すると、応答には、画像のサイズ、形式、高さ、幅などの画像に関する基本情報のみが含まれます。
{ "FileSize": {"value": "21839"}, "Format": {"value": "jpg"}, "FrameCount": {"value": "1"}, "ImageHeight": {"value": "267"}, "ImageWidth": {"value": "400"}, "ResolutionUnit": {"value": "1"}, "XResolution": {"value": "1/1"}, "YResolution": {"value": "1/1"} }
EXIF データを含む画像に関する情報をクエリする
https://image-demo.oss-cn-hangzhou.aliyuncs.com/f.jpg?x-oss-process=image/info
EXIF データを含む画像の URL に info パラメーターを追加すると、応答には、画像に関する基本情報と画像の EXIF データが含まれます。詳細については、「Exif Version 2.31」をご参照ください。
{ "Compression": {"value": "6"}, "DateTime": {"value": "2015:02:11 15:38:27"}, "ExifTag": {"value": "2212"}, "FileSize": {"value": "23471"}, "Format": {"value": "jpg"}, "GPSLatitude": {"value": "0deg "}, "GPSLatitudeRef": {"value": "North"}, "GPSLongitude": {"value": "0deg "}, "GPSLongitudeRef": {"value": "East"}, "GPSMapDatum": {"value": "WGS-84"}, "GPSTag": {"value": "4292"}, "GPSVersionID": {"value": "2 2 0 0"}, "ImageHeight": {"value": "333"}, "ImageWidth": {"value": "424"}, "JPEGInterchangeFormat": {"value": "4518"}, "JPEGInterchangeFormatLength": {"value": "3232"}, "Orientation": {"value": "7"}, "ResolutionUnit": {"value": "2"}, "Software": {"value": "Microsoft Windows Photo Viewer 6.1.7600.16385"}, "XResolution": {"value": "96/1"}, "YResolution": {"value": "96/1"}}
非公開の画像に関する情報を取得する
Alibaba Cloud SDK または REST API を使用して、非公開の画像に関する情報を取得できます。
Alibaba Cloud SDK を使用する
次のサンプルコードは、一般的なプログラミング言語の SDK を使用して画像に関する情報を取得する方法の例を示しています。他のプログラミング言語の SDK を使用して画像に関する情報を取得する方法の詳細については、「SDK リファレンス」をご参照ください。
Java
Java SDK バージョン 3.17.4 以降が必要です。
// yourEndpoint バケットが配置されているリージョンのエンドポイントを指定します。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// リージョンのエンドポイントを指定します。例: cn-hangzhou。
String region = "cn-hangzhou";
// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// バケットの名前を指定します。
String bucketName = "examplebucket";
// 画像がバケットのルートディレクトリに保存されている場合は、画像の名前を指定します。他の場所に保存されている場合は、画像の完全なパスを指定する必要があります。例: exampledir/example.jpg。
String key = "example.jpg";
// OSSClient インスタンスを作成します。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// 画像に関する情報を取得するためのリクエストを作成します。
GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
getObjectRequest.setProcess("image/info");
// getObject を使用し、process パラメーターを介して命令を入力します。
OSSObject ossObject = ossClient.getObject(getObjectRequest);
// 情報を読み取って出力します。
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = ossObject.getObjectContent().read(buffer)) != -1) {
baos.write(buffer, 0, bytesRead);
}
String imageInfo = baos.toString("UTF-8");
System.out.println("Image Info:");
System.out.println(imageInfo);
} catch (IOException e) {
System.out.println("Error: " + e.getMessage());
} finally {
// OSSClient をシャットダウンします
ossClient.shutdown();
}
PHP
PHP SDK バージョン 2.7.0 以降が必要です。
<?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;
try {
// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
$provider = new EnvironmentVariableCredentialsProvider();
// バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
$endpoint = 'https://oss-cn-hangzhou.aliyuncs.com';
// バケットの名前を指定します。例: examplebucket。
$bucket = 'examplebucket';
// 画像がバケットのルートディレクトリに保存されている場合は、画像の名前を指定します。他の場所に保存されている場合は、画像の完全なパスを指定する必要があります。例: exampledir/example.jpg。
$key = 'example.jpg';
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
// リージョン ID を指定します。
"region" => "cn-hangzhou"
);
$ossClient = new OssClient($config);
// 画像に関する情報を取得するためのリクエストを作成します。
$options[$ossClient::OSS_PROCESS] = "image/info";
$result = $ossClient->getObject($bucket,$key,$options);
var_dump($result);
} catch (OssException $e) {
printf($e->getMessage() . "\n");
return;
}
Go
Go SDK 3.0.2 以降が必要です。
package main
import (
"fmt"
"io"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
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 インスタンスを作成します。
// バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。実際のエンドポイントを指定してください。
// リージョン ID を指定します。例: cn-hangzhou。
client, err := oss.New("https://oss-cn-hangzhou.aliyuncs.com", "", "", oss.SetCredentialsProvider(&provider), oss.AuthVersion(oss.AuthV4), oss.Region("cn-hangzhou"))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// バケットの名前を指定します。例: examplebucket。
bucketName := "examplebucket"
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 画像がバケットのルートディレクトリに保存されている場合は、画像の名前を指定します。他の場所に保存されている場合は、画像の完全なパスを指定する必要があります。例: exampledir/example.jpg。
// oss.Process を使用して、画像に関する情報を取得するためのリクエストを作成します。
body, err := bucket.GetObject("example.jpg", oss.Process("image/info"))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
defer body.Close()
data, err := io.ReadAll(body)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Println("data:", string(data))
}
REST API を使用する
ビジネスで高度なカスタマイズが必要な場合は、RESTful API を直接呼び出すことができます。API を直接呼び出すには、コードに署名計算を含める必要があります。詳細については、「GetObject」をご参照ください。
GetObject リクエストに IMG パラメーターまたは画像スタイルパラメーターを追加して、画像を処理できます。
GET /oss.jpg?x-oss-process=image/info HTTP/1.1
Host: oss-example.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 28 Oct 2022 06:40:10 GMT
Authorization: OSS qn6q**************:77Dv****************
FAQ
非公開の画像に関する情報をどのようにクエリしますか?
非公開の画像に関する情報をクエリするには、OSS SDK を使用して署名付き URL に info パラメーターを追加し、その URL を使用して画像にアクセスします。
署名付き URL を生成します。
次のサンプルコードは、OSS SDK for Java を使用して署名付き URL を生成する方法の例を示しています。
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"; // セキュリティ上の理由から、アクセス認証情報をプロジェクトコードに保存しないことをお勧めします。この例では、アクセス認証情報は環境変数から取得されます。サンプルコードを実行する前に、環境変数が設定されていることを確認してください。 EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); // バケットの名前を指定します。例: examplebucket。 String bucketName = "examplebucket"; // オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。 String objectName = "exampleobject.jpg"; // OSSClient インスタンスを作成します。 OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider); try { // 画像オブジェクトに関する情報をクエリします。 String style = "image/info"; // 署名付き 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("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 を使用して画像にアクセスし、画像情報をクエリします。