aspose.info
ID

Format File FLIF

Diperbarui

Apa itu file FLIF?

FLIF (Free Lossless Image Format) adalah format gambar lossless yang menggunakan ekstensi .flif untuk filenya. FLIF mengklaim mengungguli PNG, lossless WebP, lossless BPG, dan lossless JPEG 2000 dalam hal rasio kompresi. FLIF menggunakan interlacing progresif, sehingga setiap unduhan sebagian gambar dapat digunakan sebagai penyandian lossy untuk seluruh gambar.

Sejarah Singkat

FLIF diumumkan pada September 2015, dan versi alfa dirilis pada Oktober 2015. Pada September 2016, versi stabil pertama dari FLIF dirilis.

Desain FLIF

FLIF menggunakan varian CABAC (pengkodean aritmatika biner konteks-adaptif), MANIAC (Meta-Adaptive Near-zero Integer Arithmetic Coding) untuk kompresi. MANIAC adalah algoritma pengkodean entropi yang dikembangkan oleh Jon Sneyers dan Pieter Wuille. Dalam MANIAC, konteksnya adalah node pohon keputusan yang dipelajari pada waktu pengkodean secara dinamis. Ini membuat model konteks lebih spesifik untuk gambar dan menghasilkan kompresi yang lebih baik. FLIF memiliki beberapa fitur berikut:

  • Mendukung kompresi lossless
  • Mendukung kompresi lossy dengan preprocessing encoder
  • Mendukung Skala Abu-abu, RGB, dan RGBA
  • Mendukung kedalaman warna 1 hingga 16 bit per saluran
  • Mendukung file interlaced dan non-interlaced
  • Mendukung decoding progresif dari file yang diunduh sebagian
  • Mendukung animasi
  • Mendukung profil warna ICC tersemat, metadata Exif dan XMP
  • Memiliki dukungan terbatas untuk mengompresi file mentah kamera (RGGB)

Format File FLIF

File FLIF memiliki empat bagian berikut:

Tajuk Utama

Header utama berisi metadata utama termasuk lebar, tinggi, kedalaman warna, jumlah bingkai.

JenisNilaiDeskripsi
4 byte“FLIF”Sihir
4 bit3 = ni diam; 4 = saya masih; 5 = ni anim; 6 = i animInterlacing, animasi
4 bit1 = Skala abu-abu; 3 = RGB; 4 = RGBAJumlah saluran (nb_channels)
1 byte‘0’,‘1’,‘2’ (‘0’=khusus)Byte per saluran (Bpc)
varianlebar-1Lebar
varinttinggi-1Tinggi
varintnb_frames-2 (hanya jika animasi)Jumlah frame (nb_frames)

Potongan metadata

Bagian ini berisi non-piksel seperti metadata Exif/XMP, profil warna ICC, dll. yang dikodekan menggunakan kompresi DEFLATE. Potongan ini didefinisikan mirip dengan potongan PNG dengan perbedaan bahwa ukuran chuck dikodekan dengan sejumlah variabel byte. Nama bongkahan dapat berupa 4 huruf (4 byte) atau nilai di bawah 32 yang menunjukkan bongkahan non-opsional.

Berikut ini adalah contoh chuck opsional:

Nama bongkahanDeskripsiKonten (setelah dekompresi DEFLATE)
iCCPprofil warna ICCdata profil warna ICC mentah
eXifExif metadata“Exif\0\0” header diikuti oleh TIFF header dan data EXIF
eXmpmetadata XMPXMP terkandung dalam xpacket read-only tanpa padding

Konvensi penamaan

  • Huruf Pertama: Huruf besar digunakan untuk bagian penting dan huruf kecil digunakan untuk bagian yang tidak penting.
  • Huruf Kedua: Huruf besar digunakan untuk umum dan huruf kecil digunakan untuk potongan pribadi
  • Huruf Ketiga: Huruf besar digunakan untuk chuck yang diperlukan untuk menampilkan gambar dengan benar dan huruf kecil tidak penting untuk menampilkan gambar.
  • Huruf Keempat: Huruf besar digunakan untuk chuck yang dapat disalin dengan aman secara membabi buta. Chuck huruf kecil bergantung pada data gambar.

Tajuk Kedua

Ini berisi informasi mengenai penyandian sebenarnya dari piksel.

TipeDeskripsiKondisiNilai Default
1 byteNUL byte (0x00), nama potongan dari bitstream FLIF16
uni_int(1,16)Bits per piksel saluranBpc == ‘0’: ulangi(nb_channels)8 jika Bpc == ‘1’, 16 jika Bpc == ‘2’
uni_int(0,1)Bendera: alpha_zeronb_channels > 30
uni_int(0,100)Jumlah loopnb_frame > 1
uni_int(0,60_000)Penundaan bingkai dalam msnb_frames > 1: ulangi(nb_frames)
uni_int(0,1)Bendera: has_custom_cutoff_and_alpha
uni_int(1.128)cutoffhas_custom_cutoff_and_alpha2
uni_int(2,128)pembagi alfahas_custom_cutoff_and_alpha19
uni_int(0,1)Tandai: has_custom_bitchancehas_custom_cutoff_and_alpha0
?Bitchancehas_custom_bitchance
variabelTransformasi (lihat di bawah)
uni_int(1) = 0Bit indikator: selesai dengan transformasi
uni_int(0,2)Prediktor piksel tak terlihatalpha_zero && interlaced && rentang alpha termasuk nol

Saluran

Nomor saluranDeskripsi
0Merah atau Abu-abu
1Hijau
2Biru
3Alfa

Transformasi

JenisDeskripsi
uni_int(1) = 1Bit indikator: belum selesai
uni_int(0,13)Pengidentifikasi transformasi
variabelTransformasi data (tergantung pada transformasi)

Transformasi digunakan untuk memodifikasi data piksel untuk kompresi yang lebih baik dan untuk melacak nilai piksel yang sebenarnya terjadi.

Data Piksel

Bagian ini berisi data piksel aktual yang dikodekan menggunakan pengkodean entropi MANIAC. Piksel dapat dikodekan menggunakan pengkodean interlaced atau non-interlaced.

Metode interlaced

Dalam metode ini, tingkat zoom ditentukan. Zoomlevel 0 digunakan untuk gambar penuh, zoomlevel 1 digunakan untuk semua baris bernomor genap, zoomlevel 2 digunakan untuk semua kolom genap dari zoomlevel 1. Dengan kata lain, setiap zoomlevel 2k bernomor genap adalah versi downsampled dari gambar, pada skala 1:2^k. Zoomlevels dikodekan dari tertinggi ke terendah.

Metode non-interlaced

Dalam metode ini, pengkodean pohon MANIAC dimulai segera diikuti dengan pengkodean piksel.

Referensi

Lihat juga