Images API untuk layanan paket lama

App Engine memberikan kemampuan untuk memanipulasi data gambar menggunakan layanan Gambar khusus. Layanan Gambar dapat memanipulasi gambar, menggabungkan beberapa gambar menjadi satu gambar, mengubah format gambar, menyediakan metadata gambar seperti format, lebar, tinggi, dan histogram nilai warna.

Java 8 di App Engine mendukung class manipulasi gambar native Java seperti AWT dan Java2D bersamaan Image API App Engine.

Layanan Gambar dapat menerima data gambar langsung dari aplikasi, atau dapat menggunakan nilai Cloud Storage. (Layanan Gambar juga dapat menggunakan nilai Cloud Blobstore, tetapi sebaiknya gunakan Cloud Storage.)

Gambar yang disimpan di Cloud Storage dan Cloud Blobstore dapat mencapai nilai maksimum yang diizinkan untuk masing-masing layanan. Gambar yang ditransformasi akan ditampilkan langsung ke aplikasi, dan ukurannya harus kurang dari 32 megabyte.

Bucket Cloud Storage harus menggunakan Daftar Kontrol Akses yang mendetail agar Images API dapat berfungsi. Untuk bucket yang telah dikonfigurasi untuk akses level bucket yang seragam, Images API tidak akan dapat mengambil gambar di bucket tersebut dan menampilkan pesan error TransformationError. Jika bucket Anda dikonfigurasi dengan cara ini, Anda dapat menonaktifkan akses level bucket yang seragam.

Mentransformasi gambar di Java 8

Image service API memungkinkan Anda menerapkan transformasi ke gambar, menggunakan layanan, bukan melakukan pemrosesan gambar di server aplikasi. Aplikasi menyiapkan objek Image dengan data gambar yang akan diubah, dan objek Transform dengan petunjuk tentang cara mengubah gambar. Aplikasi akan mendapatkan objek ImagesService, lalu memanggil metode applyTransform() dengan objek Image dan Transform. Metode ini akan menampilkan objek Image dari gambar yang diubah.

Aplikasi ini mendapatkan instance ImagesService, Image, dan Transform menggunakan ImagesServiceFactory.

// Get an instance of the imagesService we can use to transform images.
ImagesService imagesService = ImagesServiceFactory.getImagesService();

// Make an image directly from a byte array, and transform it.
Image image = ImagesServiceFactory.makeImage(imageBytes);
Transform resize = ImagesServiceFactory.makeResize(100, 50);
Image resizedImage = imagesService.applyTransform(resize, image);

// Write the transformed image back to a Cloud Storage object.
gcsService.createOrReplace(
    new GcsFilename(bucket, "resizedImage.jpeg"),
    new GcsFileOptions.Builder().mimeType("image/jpeg").build(),
    ByteBuffer.wrap(resizedImage.getImageData()));

Beberapa transformasi dapat digabungkan menjadi satu tindakan menggunakan instance CompositeTransform. Lihat referensi image API.

Transformasi gambar yang tersedia

Layanan Gambar dapat mengubah ukuran, memutar, membalik, dan memangkas gambar, serta meningkatkan kualitas foto. Layanan ini juga dapat menggabungkan beberapa gambar menjadi satu gambar.

Ubah ukuran

Anda dapat mengubah ukuran gambar dengan tetap mempertahankan rasio aspek yang sama. Lebar atau tinggi gambar yang diubah ukurannya tidak boleh melebihi 4.000 piksel.

Rotasi

Anda dapat memutar gambar dalam kelipatan 90 derajat.

Balik secara horizontal

Anda dapat membalik gambar secara horizontal.

Balik secara vertikal

Anda dapat membalik gambar secara vertikal.

Crop

Anda dapat memangkas gambar dengan kotak pembatas yang diberikan.

Saya Lagi Beruntung

Transformasi "Saya Lagi Beruntung" meningkatkan warna gelap dan cerah dalam gambar serta menyesuaikan warna dan mengoptimalkan kontras.

Format gambar

Layanan menerima data gambar dalam format JPEG, PNG, WEBP, GIF (termasuk GIF animasi), BMP, TIFF, dan ICO. Gambar yang diubah dapat ditampilkan dalam format JPEG, WEBP, dan PNG.

Jika format input dan format output berbeda, layanan akan mengonversi data input menjadi format output sebelum melakukan transformasi.

Mentransformasi gambar

Layanan Gambar dapat menggunakan nilai dari Google Cloud Storage atau Blobstore sebagai sumber gambar untuk sebuah transformasi. Ada dua cara untuk mentransformasi gambar:

  1. Dengan menggunakan class ImagesServiceFactory(), Anda dapat melakukan transformasi gambar sederhana, seperti memangkas, membalik, dan memutar.
  2. Dengan menggunakan getServingUrl(), Anda dapat mengubah ukuran dan memangkas gambar secara dinamis, sehingga Anda tidak perlu menyimpan ukuran gambar yang berbeda di server. Metode ini menampilkan URL yang menyajikan gambar, dan transformasi ke gambar dienkode dalam URL ini. Fungsi ini mengasumsikan bahwa gambar tidak berubah; jika dimodifikasi setelah mendapatkan URL, Anda mungkin mendapatkan hasil yang tak terduga dari penggunaan URL.

Menggunakan Class ImagesServiceFactory()

Anda dapat mentransformasi gambar dari Cloud Storage atau Blobstore jika ukuran gambar lebih kecil dari ukuran maksimum yang diizinkan oleh Cloud Storage atau Blobstore. Perhatikan bahwa hasil transformasi ditampilkan langsung ke aplikasi, dan tidak boleh melebihi batas respons API sebesar 32 megabyte.

Untuk mentransformasi gambar dari Cloud Storage atau Blobstore di Java 8, Anda membuat objek Image dengan memanggil metode statis ImagesServiceFactory.makeImageFromBlob() dan meneruskan nilai blobstore.BlobKey. Bagian lainnya dari API berperilaku seperti yang diharapkan. Metode applyTransform() menampilkan hasil transformasi, atau menampilkan ImagesServiceFailureException jika hasilnya lebih besar dari ukuran maksimum 32 megabyte.

// Make an image from a Cloud Storage object, and transform it.
BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
BlobKey blobKey = blobstoreService.createGsBlobKey("/gs/" + bucket + "/image.jpeg");
Image blobImage = ImagesServiceFactory.makeImageFromBlob(blobKey);
Transform rotate = ImagesServiceFactory.makeRotate(90);
Image rotatedImage = imagesService.applyTransform(rotate, blobImage);

// Write the transformed image back to a Cloud Storage object.
gcsService.createOrReplace(
    new GcsFilename(bucket, "rotatedImage.jpeg"),
    new GcsFileOptions.Builder().mimeType("image/jpeg").build(),
    ByteBuffer.wrap(rotatedImage.getImageData()));

Menggunakan getServingUrl()

Metode getServingUrl() memungkinkan Anda membuat URL tetap dan khusus untuk gambar yang disimpan di Cloud Storage atau Blobstore. Contoh:

// Create a fixed dedicated URL that points to the GCS hosted file
ServingUrlOptions options = ServingUrlOptions.Builder
        .withGoogleStorageFileName("/gs/" + bucket + "/image.jpeg")
        .imageSize(150)
        .crop(true)
        .secureUrl(true);
String url = imagesService.getServingUrl(options);

URL yang dihasilkan menggunakan infrastruktur penayangan gambar yang sangat dioptimalkan dan terpisah dari aplikasi Anda. Karena gambar ditayangkan secara terpisah dari aplikasi Anda, gambar tersebut tidak menimbulkan beban dan bisa sangat hemat biaya. URL yang ditampilkan oleh metode ini selalu dapat diakses secara publik, tetapi tidak dapat ditebak.

Jika Anda ingin berhenti menyajikan URL, hapus menggunakan metode deleteServingUrl().

Metode ini menampilkan URL yang dienkode dengan argumen pemangkasan dan ukuran yang ditentukan. Jika Anda tidak menentukan argumen apa pun, metode akan menampilkan URL default untuk gambar, misalnya:

http://lhx.ggpht.com/randomStringImageId

Anda dapat mengubah ukuran dan memangkas gambar secara dinamis dengan menentukan argumen dalam URL. Argumen yang tersedia adalah:

  • =sxx di mana xx adalah bilangan bulat dengan rentang dari 0–2560 yang mewakili panjang sisi terpanjang gambar, dalam piksel. Misalnya, menambahkan =s32 akan mengubah ukuran gambar sehingga dimensi terpanjangnya adalah 32 piksel.
  • =sxx-c di mana xx adalah bilangan bulat dengan rentang dari 0–2560 yang merepresentasikan ukuran gambar yang dipangkas dalam piksel, dan -c akan memberi tahu sistem untuk memangkas gambar.
# Resize the image to 32 pixels (aspect-ratio preserved)
http://lhx.ggpht.com/randomStringImageId=s32

# Crop the image to 32 pixels
http://lhx.ggpht.com/randomStringImageId=s32-c

Gambar dan server pengembangan

Server pengembangan menggunakan komputer lokal Anda untuk menjalankan kemampuan layanan Gambar.

Server pengembangan Java menggunakan framework ImageIO untuk menyimulasikan layanan Gambar. Fitur peningkatan (kualitas) foto "Saya Lagi Beruntung" tidak didukung. Format gambar WEBP hanya didukung jika plugin decoder yang sesuai telah diinstal. Misalnya, plugin dekoder Java VP8 dapat digunakan. Perhatikan bahwa metode getServingUrl tidak tersedia di server pengembangan.

Catatan tentang penghapusan

Untuk berhenti menyajikan gambar yang disimpan di Cloud Storage atau Blobstore, panggil metode deleteServingUrl().

Hindari menghapus gambar secara langsung di Cloud Storage atau Blobstore karena hal ini dapat membuat gambar tetap dapat diakses melalui URL penayangan.

URL penayangan akan berhenti berfungsi jika aplikasi yang membuatnya dinonaktifkan atau dihapus, meskipun gambar yang mendasarinya tetap tersedia.

Kuota, batas, dan harga

Saat ini, tidak ada biaya tambahan yang timbul dari penggunaan Images API. Lihat halaman harga App Engine.

Setiap permintaan Images API diperhitungkan dalam kuota Panggilan API Manipulasi Gambar . Aplikasi dapat melakukan beberapa transformasi gambar dalam satu panggilan API.

Data yang dikirim ke layanan Gambar akan mengurangi kuota Data yang Dikirim ke (Images) API. Data yang diterima dari layanan Gambar akan mengurangi kuota Data yang Diterima dari (Images) API.

Setiap transformasi gambar diperhitungkan dalam kuota Transformasi yang dilaksanakan.

Untuk mengetahui informasi selengkapnya, lihat Kuota. Anda dapat melihat penggunaan kuota aplikasi saat ini dengan membuka tab Detail Kuota konsol Google Cloud.

Selain kuota, batas berikut berlaku untuk penggunaan layanan Gambar:

Batas Jumlah
ukuran data maksimum gambar yang dikirim ke layanan 32 megabyte
ukuran data maksimum gambar yang diterima dari layanan 32 megabyte
ukuran maksimum gambar yang dikirim atau diterima dari layanan 50 megapiksel