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.

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 Python 2

Contoh berikut memuat data gambar dari Cloud Datastore, lalu menggunakan layanan Gambar untuk mengubah ukuran dan menampilkannya ke browser sebagai gambar JPEG.

from google.appengine.api import images
from google.appengine.ext import ndb

import webapp2


class Photo(ndb.Model):
    title = ndb.StringProperty()
    full_size_image = ndb.BlobProperty()


class Thumbnailer(webapp2.RequestHandler):
    def get(self):
        if self.request.get("id"):
            photo = Photo.get_by_id(int(self.request.get("id")))

            if photo:
                img = images.Image(photo.full_size_image)
                img.resize(width=80, height=100)
                img.im_feeling_lucky()
                thumbnail = img.execute_transforms(output_encoding=images.JPEG)

                self.response.headers['Content-Type'] = 'image/jpeg'
                self.response.out.write(thumbnail)
                return

        # Either "id" wasn't provided, or there was no image with that ID
        # in the datastore.
        self.error(404)

Selain Images API, Anda juga dapat menggunakan transformasi yang disediakan di Python Imaging Library (PIL) di aplikasi Python 2.7. Anda cukup mendeklarasikan library di bagian library file app.yaml. Namun, jika ingin menggunakan PIL di lingkungan lokal Anda (menggunakan server pengembangan), Anda juga harus mendownload dan menginstal PIL atau pillow secara lokal.

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 Image(), Anda dapat melakukan transformasi gambar sederhana, seperti memangkas, membalik, dan memutar.
  2. Dengan get_serving_url(), 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 menayangkan 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 Image()

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

Untuk mengubah gambar dari Cloud Storage atau Blobstore di Python 2, tetapkan argumen blob_key ke kunci Blobstore yang nilainya adalah gambar, daripada menyetel argumen image_data dari konstruktor Gambar dengan data gambar. Bagian lainnya dari API berperilaku seperti yang diharapkan. Metode execute_transforms() menampilkan hasil transformasi, atau menampilkan LargeImageError jika hasilnya lebih besar dari ukuran maksimum 32 megabyte.

from google.appengine.api import images
from google.appengine.ext import blobstore

import webapp2


class Thumbnailer(webapp2.RequestHandler):
    def get(self):
        blob_key = self.request.get("blob_key")
        if blob_key:
            blob_info = blobstore.get(blob_key)

            if blob_info:
                img = images.Image(blob_key=blob_key)
                img.resize(width=80, height=100)
                img.im_feeling_lucky()
                thumbnail = img.execute_transforms(output_encoding=images.JPEG)

                self.response.headers['Content-Type'] = 'image/jpeg'
                self.response.out.write(thumbnail)
                return

        # Either "blob_key" wasn't provided, or there was no value with that ID
        # in the Blobstore.
        self.error(404)

Menggunakan get_serving_url()

Selain Images API, Anda juga dapat menggunakan transformasi yang disediakan di Python Imaging Library (PIL) di aplikasi Python 2.7. Untuk melakukannya, deklarasikan library di bagian library file app.yaml.

Untuk menggunakan PIL di server pengembangan, download dan instal PIL atau pillow secara lokal.

Metode get_serving_url() dapat Anda gunakan untuk membuat URL tetap dn khusus untuk gambar yang disimpan di Cloud Storage atau Blobstore. Contoh:

url = images.get_serving_url(
    blob_key, size=150, crop=True, secure_url=True)

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 menayangkan URL, hapus URL menggunakan fungsi delete_serving_url().

Metode ini menampilkan URL yang dienkode dengan argumen pangkas 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 Python menggunakan Python Imaging Library (PIL) untuk menyimulasikan layanan Gambar. Library ini tidak disertakan dengan library standar Python atau SDK, dan harus diinstal secara terpisah. Fork pillow juga bisa digunakan. Format gambar WEBP hanya didukung jika plugin dekoder PIL yang sesuai telah diinstal.

Catatan tentang penghapusan

Untuk berhenti menayangkan gambar yang disimpan di Cloud Storage atau Blobstore, panggil fungsi delete_serving_url().

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