3.7 Gigapixel (v2)

Tulisan ini merupakan kelanjutan dari tulisan saya sebelumnya mengenai Kasuari, sebuah skrip untuk menampilkan gambar super besar dg teknik multi-scale pada halaman web dengan bantuan Javascript dan Canvas.

Saya baru saja menulis ulang skrip tersebut. Kali ini saya mematikan dulu fungsi pergerakan halus karena kok rasanya ngga terlalu menunjang sisi interaktivitas. Fungsi ini sebenarnya menunda pergerakan layar sehingga terlihat tidak menempel dengan pointer mouse. Karena penundaan ini, pergerakan terlihat “terlambat” dan tidak mengikuti pergerakan pointer mouse secara langsung. Penundaan ini mungkin bisa membuat pergerakan menjadi lebih “dinamis” dan tidak kaku tapi di lain pihak, pengguna bisa salah mengira kalau keterlambatan ini disebabkan oleh komputer yg lambat. Mungkin saya masih perlu bereksperimen dengan parameter2 yg ada.

Selain itu, saya juga menambahkan satu buah fitur baru, yaitu pembesaran halus. Saat mendekatkan atau menjauhkan gambar yg membuat gambar terlihat lebih besar dan kecil, transisi dilakukan secara bertahap. Dengan demikian, pengguna bisa mengikuti proses yang terjadi (yaitu pembesaran/pengecilan gambar) sehingga diharapkan pengguna tidak kehilangan konteks.

Saya juga menulis ulang aplikasi untuk mempersiapkan gambar yang akan dipakai oleh Kasuari. Awalnya aplikasi (yg saya tulis dg Python) ini hanya bisa menggunakan satu buah sumber gambar yang dijadikan gambar asli dalam resolusi penuh. Aplikasi akan memotong-motong gambar menjadi banyak gambar dengan ukuran lebih kecil (yaitu 256 × 256 piksel) dan lalu membuat gambar dalam skala (ukuran) yg lain dari gambar-gambar ini.

Kekurangan dari aplikasi ini adalah jika gambar berukuran sangat besar, bisa saja gambar disediakan dalam beberapa potongan gambar yang lebih kecil. Oleh karena itu, aplikasi harus dapat memproses beberapa gambar ini dalam menyusun gambar yang dibutuhkan oleh Kasuari.

Saya menggunakan pustaka Python Imaging Library (PIL) untuk membantu mengolah gambar. Namun ternyata PIL ini memiliki masalah jika gambar yang ditangani memiliki ukuran yang besar. PIL bekerja sangat lambat dan butuh memori sangat besar. Mungkin karena gambar yang ada perlu dimasukkan ke memori terlebih dahulu secara keseluruhan sebelum dapat diproses lebih lanjut. Berhubung proses pemotongan gambar dilakukan perbaris, seharusnya ada cara yang lebih cerdas untuk mengatasi masalah ini.

Akhirnya saya mencoba untuk menggunakan libjpeg untuk membuat aplikasi pemotong gambar. Walaupun akhirnya saya harus menulis kode dalam bahasa C, namun hasil akhirnya cukup memuaskan. Aplikasi yang saya tulis ini dapat bekerja dengan cepat dan menggunakan memori secukupnya.

Sebagai bahan uji coba, saya telah melanjutkan usaha gagal yang saya lakukan sebelumnya, yaitu mencoba menyediakan gambar berukuran 3.7 gigapixel dalam Kasuari. Gambar ini adalah peta dunia dari NASA yang memiliki resolusi 500m untuk setiap piksel yang ada. Ukuran gambar adalah 3.7 gigapixel (86400 × 43200) yang awalnya tersusun dari 8 buah gambar berukuran 21600 × 21600 piksel.

Hasil akhir dapat dilihat di http://labs.fajran.web.id/p/kasuari/bluemarble500m/ 🙂

Kode sumber Kasuari dan aplikasi pemotong gambar dapat dilihat di http://github.com/fajran/kasuari

Leave a Reply