Header MIFF • Data biner MIFF
Magick Image File Format (MIFF) adalah format lintas platform milik ImageMagick sendiri untuk menyimpan gambar bitmap. Format ini memiliki keunggulan dibanding format gambar lain karena menyimpan semua metadata yang dikenal oleh ImageMagick (misalnya profil warna gambar, komentar, penulis, hak cipta, dll.), sedangkan format lain mungkin hanya mendukung sebagian kecil metadata yang tersedia atau bahkan tidak sama sekali. File gambar MIFF terdiri dari dua bagian. Bagian pertama adalah header yang tersusun dari kunci-kunci yang mendeskripsikan gambar dalam bentuk teks. Bagian berikutnya adalah data gambar biner. Kedua bagian ini dibahas secara rinci di bawah.
Header MIFF
Header MIFF disusun sepenuhnya dari karakter ISO-8859-1. Field-field dalam header berupa kombinasi kunci dan nilai dalam format key = value, dengan setiap kunci dan nilai dipisahkan oleh tanda sama dengan (=). Setiap kombinasi key = value dibatasi oleh minimal satu karakter kontrol atau whitespace. Komentar dapat muncul di bagian header dan selalu dibatasi oleh kurung kurawal. Header MIFF selalu diakhiri dengan karakter titik dua (:), diikuti oleh karakter ctrl-Z. Umum juga untuk mendahului titik dua tersebut dengan karakter formfeed dan karakter baris baru. Formfeed mencegah data biner ditampilkan saat menggunakan program more di Linux, sedangkan ctrl-Z memiliki efek yang sama dengan perintah type pada baris perintah Windows.
Berikut adalah daftar sebagian kombinasi key = value yang biasanya ditemukan pada sebuah file MIFF:
| Kunci | Deskripsi |
|---|---|
| background-color = color | |
| border-color = color | |
| matte-color = color | ketiga kunci opsional ini masing-masing mencerminkan warna latar belakang, border, dan matte gambar. Sebuah warna dapat berupa nama (misalnya white) atau nilai heksadesimal (misalnya #ccc). |
| class = | jenis data piksel biner yang disimpan dalam file MIFF. Jika kunci ini tidak ada, data piksel DirectClass diasumsikan digunakan. |
| colors = value | jumlah warna pada gambar DirectClass. Untuk gambar PseudoClass, kunci ini menentukan jumlah entri pada colormap. Jika kunci ini tidak ada di header dan gambar bertipe PseudoClass, colormap grayscale linear 256 warna diasumsikan digunakan. Jumlah maksimum entri colormap adalah 65536. |
| colorspace = | ruang warna data piksel. Defaultnya adalah RGB. |
| columns = value | lebar gambar dalam piksel. Ini adalah kunci wajib dan tidak memiliki nilai default. |
| compression = | jenis algoritma yang digunakan untuk mengompres data gambar. Jika kunci ini tidak ada, data piksel diasumsikan tidak terkompresi. |
| delay = microseconds | jeda antar-frame pada suatu urutan gambar, dalam mikrodetik. |
| depth = | kedalaman satu nilai warna yang merepresentasikan nilai dari 0 hingga 255 (kedalaman 8), 0 - 65535 (kedalaman 16), atau 0 - 4294967295 (kedalaman 32). Jika kunci ini tidak ada, kedalaman 8 diasumsikan digunakan. |
| dispose = value | metode disposal layer. Berikut adalah nilai-nilai yang valid: 0 = Tidak ada disposal yang ditentukan. 1 = Tidak melakukan disposal antar-frame. 2 = Menimpa frame dengan warna latar belakang dari header. 3 = Menimpa dengan frame sebelumnya. |
| gamma = value | gamma gambar. Jika tidak ditentukan, gamma 1.0 (respons kecerahan linear) diasumsikan digunakan. |
| id=ImageMagick | mengidentifikasi file sebagai file gambar berformat MIFF. Kunci ini wajib, harus menjadi pasangan kunci-nilai pertama, hanya boleh muncul satu kali, dan tidak memiliki nilai default. Meskipun kunci ini dapat muncul di mana saja dalam header, sebaiknya diletakkan sebagai kunci pertama header pada kolom 1. Hal ini memungkinkan program seperti file(1) mengidentifikasi file tersebut sebagai MIFF dengan mudah. |
| iterations = value | jumlah pengulangan urutan gambar sebelum berhenti. |
| label = { string ] | menentukan judul singkat atau keterangan untuk gambar. Jika ada whitespace pada label, label tersebut harus diapit oleh kurung kurawal. |
| matte = | menentukan apakah gambar memiliki data matte. Data matte umumnya berguna untuk image compositing. |
| montage = |
ukuran dan lokasi masing-masing tile pada gambar komposit. Gunakan kunci ini saat gambar merupakan komposit dari beberapa tile yang berbeda. Sebuah tile terdiri dari sebuah gambar dan, secara opsional, border serta label. Width adalah ukuran dalam piksel setiap tile individual pada arah horizontal, dan height adalah ukurannya pada arah vertikal. Setiap tile harus memiliki jumlah piksel yang sama pada lebar dan sama pada tinggi. Namun, width dapat berbeda dari height. X offset adalah offset dalam jumlah piksel dari tepi vertikal gambar komposit tempat tile pertama pada suatu baris dimulai, dan y offset adalah offset dari tepi horizontal tempat tile pertama pada suatu kolom dimulai. Jika kunci ini ditentukan, sebuah direktori nama tile harus mengikuti header gambar. Format direktori dijelaskan di bawah. |
| page = value | ukuran dan lokasi kanvas gambar yang diinginkan. |
| profile-icc = value | jumlah byte pada profil warna International Color Consortium. Profil ini ditentukan oleh spesifikasi profil ICC yang terletak di http://www.color.org/icc_specs2.html. |
| red-primary = x,y | |
| green-primary = x,y | |
| blue-primary = x,y | |
| white-point = x,y | kunci opsional ini mencerminkan primer kromatisitas dan titik putih. |
| rendering-intent = | Rendering intent adalah properti CSS-1 yang telah ditentukan oleh International Color Consortium (http://www.color.org). |
| resolution = |
resolusi vertikal dan horizontal gambar. Lihat units untuk mengetahui satuan resolusi spesifik (misalnya piksel per inci). |
| rows = value | tinggi gambar dalam piksel. Ini adalah kunci wajib dan tidak memiliki nilai default. |
| scene = value | nomor urut untuk file gambar MIFF ini. Kunci opsional ini berguna ketika sebuah file gambar MIFF merupakan salah satu dari serangkaian file yang digunakan dalam animasi. |
| signature = value | kunci opsional ini berisi string yang secara unik mengidentifikasi konten piksel gambar. Algoritme message digest SHA-256 dari NIST direkomendasikan. |
| units = | satuan resolusi gambar. |
Pasangan key value lain juga diizinkan. Jika sebuah nilai mengandung whitespace, nilai tersebut harus diapit oleh kurung kurawal, seperti diilustrasikan di sini:
id=ImageMagick
class=PseudoClass colors=256 matte=False
columns=1280 rows=1024 depth=8
compression=RLE
colorspace=RGB
copyright={© 1999-2017 ImageMagick Studio LLC}
⋮
Perhatikan bahwa kombinasi key = value dapat dipisahkan oleh baris baru atau spasi, dan dapat muncul dalam urutan apa pun di dalam header. Komentar (di dalam kurung kurawal) dapat muncul di mana saja sebelum titik dua.
Jika Anda menentukan kunci montage di header, ikuti header tersebut dengan sebuah direktori tile gambar. Direktori ini terdiri dari nama setiap tile pada gambar komposit, dipisahkan oleh karakter baris baru. Daftar ini diakhiri dengan karakter NULL.
Jika Anda menentukan kunci color-profile di header, ikuti header tersebut (atau direktori montage jika kunci montage ada di header) dengan profil warna biner.
Header dipisahkan dari data gambar oleh karakter : yang langsung diikuti oleh baris baru.
Data biner MIFF
Selanjutnya adalah data gambar biner itu sendiri. Bagaimana data gambar diformat bergantung pada class gambar sebagaimana ditentukan (atau tidak ditentukan) oleh nilai kunci class di header.
Gambar DirectClass adalah gambar bernada kontinu (continuous-tone) yang disimpan sebagai nilai intensitas RGB (merah, hijau, biru), RGBA (merah, hijau, biru, alfa), CMYK (cyan, kuning, magenta, hitam), atau CMYKA (cyan, kuning, magenta, hitam, alfa) sebagaimana ditentukan oleh kunci colorspace. Setiap nilai intensitas memiliki panjang satu byte untuk gambar berkedalaman 8 (0..255), dua byte untuk kedalaman 16 (0..65535), dan gambar berkedalaman 32 (0..4294967295) memerlukan empat byte dalam urutan byte paling signifikan lebih dulu.
Gambar PseudoClass adalah gambar RGB dengan colormap. Colormap disimpan sebagai serangkaian nilai piksel merah, hijau, dan biru, masing-masing nilai berukuran satu byte. Jika kedalaman gambar adalah 16, setiap entri colormap menggunakan dua byte dengan byte paling signifikan lebih dulu. Jumlah entri colormap ditentukan oleh kunci colors. Data colormap muncul tepat setelah header (atau direktori gambar jika kunci montage ada di header). Data gambar PseudoClass merupakan array nilai indeks ke dalam color map. Jika gambar memiliki 256 warna atau kurang, setiap byte data gambar berisi sebuah nilai indeks. Jika gambar memiliki lebih dari 256 warna atau kedalaman gambar adalah 16, nilai indeks disimpan sebagai dua byte berurutan dengan byte paling signifikan lebih dulu. Jika matte bernilai true, setiap indeks colormap diikuti oleh nilai alfa 1 atau 2 byte.
Data piksel gambar dalam file MIFF dapat berupa tidak terkompresi, dikodekan dengan runlength, dikompresi dengan Zip, atau dikompresi dengan BZip. Kunci compression di header menentukan bagaimana data gambar dikompresi. Piksel yang tidak terkompresi disimpan satu scanline pada satu waktu, dalam urutan baris. Kompresi runlength-encoded menghitung rangkaian piksel bersebelahan yang identik dan menyimpan piksel tersebut diikuti oleh sebuah byte panjang (jumlah piksel identik dikurangi 1). Kompresi Zip dan BZip mengompresi setiap baris gambar dan mendahului baris terkompresi tersebut dengan panjang byte piksel terkompresi sebagai sebuah word dalam urutan byte paling signifikan lebih dulu.
File MIFF dapat berisi lebih dari satu gambar. Cukup gabungkan setiap gambar individual (yang terdiri dari header dan data gambar) menjadi satu file.