Beberapa gambar mungkin berisi data Exchangeable Image File Format (EXIF) yang mencakup atribut gambar dan pengaturan pemotretan. Data EXIF dari sebuah gambar mencakup informasi seperti rasio kompresi, orientasi, resolusi horizontal, dan resolusi vertikal. Untuk mendapatkan data EXIF dari sebuah gambar, tambahkan parameter info ke URL gambar tersebut.
Parameter
Aksi: info
Informasi yang dikembalikan berada dalam format JSON.
Anda tidak dapat menggunakan tindakan info bersamaan dengan tindakan lainnya dalam permintaan pemrosesan gambar. Sebagai contoh, Anda tidak dapat menggunakan image/resize,s_700,limit_0/info untuk mengubah ukuran gambar dan meminta informasi tentang gambar yang telah diubah ukurannya secara bersamaan.
Batasan
Anda dapat menggunakan aksi info untuk memperoleh informasi hanya pada gambar dengan format JPG, PNG, BMP, GIF, WebP, TIFF, dan HEIC.
Anda tidak dapat menggunakan aksi info untuk memperoleh data EXIF dari gambar PNG meskipun format PNG didukung.
Operasi
Anda dapat mengonfigurasi parameter pemrosesan gambar menggunakan URL, OSS SDK, atau RESTful API. URL cocok untuk gambar yang dapat diakses secara publik. Kami menyarankan Anda menggunakan OSS SDK atau RESTful API untuk gambar pribadi. Untuk detail lebih lanjut, lihat Mode implementasi IMG.
Mendapatkan informasi tentang gambar dengan hak akses public-read atau public-read-write
Anda dapat memperoleh informasi tentang gambar dengan hak akses public-read atau public-read-write dengan menambahkan parameter pemrosesan gambar langsung ke URL.
Meminta informasi tentang gambar yang tidak berisi data EXIF
https://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/info
Jika Anda menambahkan parameter info ke URL gambar yang tidak berisi data EXIF, respons hanya akan mencakup informasi dasar tentang gambar, seperti ukuran, format, tinggi, dan lebar gambar.
{ "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"} }Meminta informasi tentang gambar yang berisi data EXIF
https://image-demo.oss-cn-hangzhou.aliyuncs.com/f.jpg?x-oss-process=image/info
Jika Anda menambahkan parameter info ke URL gambar yang berisi data EXIF, respons mencakup informasi dasar tentang gambar serta data EXIF dari gambar tersebut. Untuk informasi lebih lanjut, lihat Exif Versi 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"}}
Mendapatkan informasi tentang gambar pribadi
Anda dapat memperoleh informasi tentang gambar pribadi dengan menggunakan Alibaba Cloud SDK atau REST API.
Menggunakan Alibaba Cloud SDK
Kode sampel berikut memberikan contoh cara menggunakan SDK untuk bahasa pemrograman umum guna mendapatkan informasi tentang gambar. Untuk informasi lebih lanjut tentang cara mendapatkan informasi tentang gambar dengan menggunakan SDK untuk bahasa pemrograman lainnya, lihat Referensi SDK.
Java
SDK Java versi 3.17.4 atau lebih tinggi diperlukan.
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 Tentukan endpoint wilayah tempat bucket berada.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Tentukan endpoint wilayah. Contohnya, cn-hangzhou.
String region = "cn-hangzhou";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET sudah dikonfigurasi.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Tentukan nama bucket.
String bucketName = "examplebucket";
// Tentukan nama gambar jika disimpan di direktori root bucket. Jika disimpan di lokasi lain, Anda harus menentukan jalur lengkap gambar. Contoh: exampledir/example.jpg.
String key = "example.jpg";
// Buat instance OSSClient.
// Panggil metode shutdown untuk melepaskan sumber daya ketika OSSClient tidak lagi digunakan.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Buat permintaan untuk mendapatkan informasi tentang gambar.
GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
getObjectRequest.setProcess("image/info");
// Gunakan getObject dan masukkan instruksi melalui parameter proses.
OSSObject ossObject = ossClient.getObject(getObjectRequest);
// Baca dan cetak informasi.
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("Informasi Gambar:");
System.out.println(imageInfo);
} catch (IOException e) {
System.out.println("Error: " + e.getMessage());
} finally {
// Matikan OSSClient
ossClient.shutdown();
}
}
}PHP
SDK PHP versi 2.7.0 atau lebih tinggi diperlukan.
<?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 {
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET sudah dikonfigurasi.
$provider = new EnvironmentVariableCredentialsProvider();
// Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint menjadi https://oss-cn-hangzhou.aliyuncs.com.
$endpoint = 'https://oss-cn-hangzhou.aliyuncs.com';
// Tentukan nama bucket. Contoh: examplebucket.
$bucket = 'examplebucket';
// Tentukan nama gambar jika disimpan di direktori root bucket. Jika disimpan di lokasi lain, Anda harus menentukan jalur lengkap gambar. Contoh: exampledir/example.jpg.
$key = 'example.jpg';
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
// Tentukan ID Wilayah.
"region" => "cn-hangzhou"
);
$ossClient = new OssClient($config);
// Buat permintaan untuk mendapatkan informasi tentang gambar.
$options[$ossClient::OSS_PROCESS] = "image/info";
$result = $ossClient->getObject($bucket,$key,$options);
var_dump($result);
} catch (OssException $e) {
printf($e->getMessage() . "\n");
return;
}Go
SDK Go 3.0.2 atau lebih tinggi diperlukan.
package main
import (
"fmt"
"io"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET sudah dikonfigurasi.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Kesalahan:", err)
os.Exit(-1)
}
// Buat instance OSSClient.
// Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint menjadi https://oss-cn-hangzhou.aliyuncs.com. Tentukan endpoint aktual Anda.
// Tentukan ID Wilayah. Contoh: 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("Kesalahan:", err)
os.Exit(-1)
}
// Tentukan nama bucket. Contoh: examplebucket.
bucketName := "examplebucket"
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Kesalahan:", err)
os.Exit(-1)
}
// Tentukan nama gambar jika disimpan di direktori root bucket. Jika disimpan di lokasi lain, Anda harus menentukan jalur lengkap gambar. Contoh: exampledir/example.jpg.
// Buat permintaan untuk mendapatkan informasi tentang gambar dengan menggunakan oss.Process.
body, err := bucket.GetObject("example.jpg", oss.Process("image/info"))
if err != nil {
fmt.Println("Kesalahan:", err)
os.Exit(-1)
}
defer body.Close()
data, err := io.ReadAll(body)
if err != nil {
fmt.Println("Kesalahan:", err)
os.Exit(-1)
}
fmt.Println("data:", string(data))
}Menggunakan RESTful API
Jika bisnis Anda memerlukan tingkat penyesuaian yang tinggi, Anda dapat langsung memanggil RESTful API. Untuk memanggil API secara langsung, Anda harus menyertakan perhitungan tanda tangan dalam kode Anda. Untuk informasi lebih lanjut, lihat (Disarankan) Sertakan tanda tangan V4.
Anda dapat menambahkan parameter IMG atau parameter gaya gambar ke permintaan GetObject untuk memproses gambar.
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: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218eFAQ
Bagaimana cara saya meminta informasi tentang gambar pribadi?
Untuk meminta informasi tentang gambar pribadi, tambahkan parameter info ke URL yang ditandatangani dengan menggunakan OSS SDK dan kemudian gunakan URL tersebut untuk mengakses gambar.
Hasilkan URL yang ditandatangani.
Kode sampel berikut memberikan contoh cara menggunakan OSS SDK for Java untuk menghasilkan URL yang ditandatangani:
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 { // Dalam contoh ini, endpoint wilayah China (Hangzhou) digunakan. Tentukan endpoint aktual Anda. String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // Tentukan ID wilayah yang sesuai dengan endpoint. Contoh: cn-hangzhou. String region = "cn-hangzhou"; // Untuk alasan keamanan, kami menyarankan agar Anda tidak menyimpan kredensial akses di kode proyek. Dalam contoh ini, kredensial akses diperoleh dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan sudah dikonfigurasi. EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); // Tentukan nama bucket. Contoh: examplebucket. String bucketName = "examplebucket"; // Tentukan jalur lengkap objek. Jangan sertakan nama bucket dalam jalur lengkap. String objectName = "exampleobject.jpg"; // Buat instance OSSClient. // Panggil metode shutdown untuk melepaskan sumber daya ketika OSSClient tidak lagi digunakan. ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration(); // Nyatakan secara eksplisit penggunaan algoritma tanda tangan V4. clientBuilderConfiguration.setSignatureVersion(SignVersion.V4); OSS ossClient = OSSClientBuilder.create() .endpoint(endpoint) .credentialsProvider(credentialsProvider) .clientConfiguration(clientBuilderConfiguration) .region(region) .build(); try { // Minta informasi tentang objek gambar. String style = "image/info"; // Atur periode validitas URL yang ditandatangani menjadi 10 menit. 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("Tangkap OSSException, yang berarti permintaan Anda sampai ke OSS, " + "tetapi ditolak dengan respons kesalahan karena suatu alasan."); System.out.println("Pesan Kesalahan:" + oe.getErrorMessage()); System.out.println("Kode Kesalahan:" + oe.getErrorCode()); System.out.println("ID Permintaan:" + oe.getRequestId()); System.out.println("ID Host:" + oe.getHostId()); } catch (ClientException ce) { System.out.println("Tangkap ClientException, yang berarti klien mengalami " + "masalah internal serius saat mencoba berkomunikasi dengan OSS, " + "seperti tidak dapat mengakses jaringan."); System.out.println("Pesan Kesalahan:" + ce.getMessage()); } finally { if (ossClient != null) { ossClient.shutdown(); } } } }Gunakan URL yang ditandatangani untuk mengakses gambar dari browser untuk meminta informasi gambar.