一部の画像は、画像属性および撮影設定を含む交換可能画像ファイルフォーマット (EXIF) データを含むことができる。 画像のEXIFデータは、圧縮率、向き、水平解像度、垂直解像度などの画像情報を含む。 画像のEXIFデータを取得する場合は、画像のURLにinfoパラメーターを追加します。
パラメーター
アクション: info
返される情報はJSON形式です。
infoアクションは、画像処理リクエストで他のアクションと一緒に使用することはできません。 たとえば、image/resize,s_700,limit_0/info
を使用して画像のサイズを変更し、サイズ変更された画像に関する情報を同時に照会することはできません。
制限事項
infoアクションを使用して、JPG、PNG、BMP、GIF、WebP、TIFF、およびHEICイメージに関する情報のみを照会できます。
infoアクションを使用してPNG画像のEXIFデータを照会することはできません。
操作
public-readまたはpublic-read-writeイメージに関する情報を取得する
画像処理パラメーターを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データの詳細については、「Exifバージョン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以上が必要です。
import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.OSSObject;
import com.aliyun.oss.model.GetObjectRequest;
import com.aliyuncs.exceptions.ClientException;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
public class Demo{
public static void main(String[] args) throws ClientException, ClientException {
// yourEndpoint Specify the endpoint of the region in which the bucket is located.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Specify the endpoint of the region. For example, cn-hangzhou.
String region = "cn-hangzhou";
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Specify the name of the bucket.
String bucketName = "examplebucket";
// Specify the name of the image if it is stored in the root directory of the bucket. If it is stored elsewhere, you must specify the full path of the image. Example: exampledir/example.jpg.
String key = "example.jpg";
// Create an OSSClient instance.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Create a request to obtain information about the image.
GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
getObjectRequest.setProcess("image/info");
// Use getObject and input instructions via process parameters.
OSSObject ossObject = ossClient.getObject(getObjectRequest);
// Read and print information.
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 {
// Shut down 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 {
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
$provider = new EnvironmentVariableCredentialsProvider();
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
$endpoint = 'https://oss-cn-hangzhou.aliyuncs.com';
// Specify the name of the bucket. Example: examplebucket.
$bucket = 'examplebucket';
// Specify the name of the image if it is stored in the root directory of the bucket. If it is stored elsewhere, you must specify the full path of the image. Example: exampledir/example.jpg.
$key = 'example.jpg';
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
// Specify the Region ID.
"region" => "cn-hangzhou"
);
$ossClient = new OssClient($config);
// Create a request to obtain information about the image.
$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() {
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Create an OSSClient instance.
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint.
// Specify the Region ID. Example: 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)
}
// Specify the name of the bucket. Example: examplebucket.
bucketName := "examplebucket"
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Specify the name of the image if it is stored in the root directory of the bucket. If it is stored elsewhere, you must specify the full path of the image. Example: exampledir/example.jpg.
// Create a request to obtain information about the image by using 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
ホスト: oss-example.oss-cn-hangzhou.aliyuncs.com
日付: 10月28日金曜日2022 06:40:10 GMT
承認: OSS qn6q ****************: 77Dv **************************
よくある質問
プライベートイメージに関する情報を照会するにはどうすればよいですか?
プライベートイメージに関する情報を照会するには、OSS SDKを使用してinfoパラメーターを署名付きURLに追加し、その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 { // In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // For security purposes, we recommend that you do not save access credentials in the project code. In this example, access credentials are obtained from environment variables. Before you run the sample code, make sure that the environment variables are configured. EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); // Specify the name of the bucket. Example: examplebucket. String bucketName = "examplebucket"; // Specify the full path of the object. Do not include the bucket name in the full path. String objectName = "exampleobject.jpg"; // Create an OSSClient instance. OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider); try { // Query information about the image object. String style = "image/info"; // Set the validity period of the signed URL to 10 minutes. 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を使用して、ブラウザから画像にアクセスし、画像情報を照会します。