aspose.info
VI

Định dạng tệp FLIF

Cập nhật

Tệp FLIF là gì?

FLIF (Định dạng hình ảnh không mất dữ liệu miễn phí) là định dạng hình ảnh không mất dữ liệu sử dụng phần mở rộng .flif cho các tệp của nó. FLIF tuyên bố vượt trội hơn PNG, [WebP]không mất dữ liệu(/vi/image/webp/), BPG không mất dữ liệu và JPEG 2000 không mất dữ liệu về tỷ lệ nén. FLIF sử dụng xen kẽ lũy tiến, do đó bất kỳ tải xuống một phần nào của hình ảnh đều có thể được sử dụng làm mã hóa mất dữ liệu cho toàn bộ hình ảnh.

Lược Sử

FLIF được công bố vào tháng 9 năm 2015 và phiên bản alpha được phát hành vào tháng 10 năm 2015. Vào tháng 9 năm 2016, phiên bản ổn định đầu tiên của FLIF được phát hành.

Thiết kế FLIF

FLIF sử dụng một biến thể của CABAC (Mã hóa số học nhị phân thích ứng theo ngữ cảnh), MANIAC (Mã hóa số học số học gần như không thích ứng siêu dữ liệu) để nén. MANIAC là một thuật toán mã hóa entropy được phát triển bởi Jon Sneyers và Pieter Wuille. Trong MANIAC, ngữ cảnh là các nút của cây quyết định được học một cách linh hoạt tại thời điểm mã hóa. Điều này làm cho mô hình bối cảnh cụ thể hơn về hình ảnh và dẫn đến khả năng nén tốt hơn. FLIF có các tính năng sau:

  • Hỗ trợ nén không mất dữ liệu
  • Hỗ trợ nén mất dữ liệu với tiền xử lý bộ mã hóa
  • Hỗ trợ thang độ xám, RGB và RGBA
  • Hỗ trợ độ sâu màu từ 1 đến 16 bit trên mỗi kênh
  • Hỗ trợ các tệp xen kẽ và không xen kẽ
  • Hỗ trợ giải mã lũy tiến các tệp được tải xuống một phần
  • Hỗ trợ hình ảnh động
  • Hỗ trợ cấu hình màu ICC nhúng, siêu dữ liệu Exif và XMP
  • Có hỗ trợ hạn chế để nén các tệp thô của máy ảnh (RGGB)

Định dạng tệp FLIF

Tệp FLIF có bốn phần sau:

Tiêu đề chính

Tiêu đề chính chứa siêu dữ liệu chính bao gồm chiều rộng, chiều cao, độ sâu màu, số lượng khung hình.

LoạiGiá trịMô tả
4 byte“FLIF”Phép thuật
4 bit3 = ni vẫn; 4 = tôi vẫn; 5 = ni thú; 6 = tôi hoạt hìnhXen kẽ, hoạt hình
4 bit1 = Thang độ xám; 3 = RGB; 4 = RGBASố kênh (nb_channels)
1 byte‘0’,‘1’,‘2’ (‘0’=tùy chỉnh)Số byte trên mỗi kênh (Bpc)
varintchiều rộng-1Chiều rộng
varintheight-1Chiều cao
varintnb_frames-2 (chỉ khi hoạt ảnh)Số khung hình (nb_frames)

Đoạn siêu dữ liệu

Phần này chứa không phải pixel như siêu dữ liệu Exif/XMP, cấu hình màu ICC, v.v. được mã hóa bằng nén DEFLATE. Các khối này được định nghĩa tương tự như các khối PNG với điểm khác biệt là kích thước mâm cặp được mã hóa với số lượng byte thay đổi. Tên của các đoạn có thể là 4 chữ cái (4 byte) hoặc giá trị dưới 32 cho biết một đoạn không bắt buộc.

Sau đây là một ví dụ về mâm cặp tùy chọn:

Tên đoạnMô tảNội dung (sau khi giải nén DEFLATE)
iCCPHồ sơ màu ICCdữ liệu hồ sơ màu ICC thô
eXifExif metadataTiêu đề “Exif\0\0” theo sau là tiêu đề TIFF và dữ liệu EXIF
eXmpSiêu dữ liệu XMPXMP chứa trong xpacket chỉ đọc không có phần đệm

Quy ước đặt tên

  • Chữ cái đầu tiên: Chữ hoa được sử dụng cho các phần quan trọng và chữ thường được sử dụng cho các phần không quan trọng.
  • Second Letter: Chữ hoa được sử dụng cho phần công khai và chữ thường được sử dụng cho phần riêng tư
  • Chữ cái thứ ba: Chữ hoa được sử dụng cho các ký tự cần thiết để hiển thị hình ảnh chính xác và chữ thường không quan trọng để hiển thị hình ảnh.
  • Chữ cái thứ tư: Chữ hoa được sử dụng cho chữ cái có thể được sao chép một cách an toàn. Mâm cặp chữ thường phụ thuộc vào dữ liệu hình ảnh.

Tiêu đề thứ hai

Điều này chứa thông tin liên quan đến mã hóa thực tế của các pixel.

LoạiMô tảĐiều kiệnGiá trị mặc định
1 byteNUL byte (0x00), tên đoạn của dòng bit FLIF16
uni_int(1,16)Số bit trên pixel của các kênhBpc == ‘0’: repeat(nb_channels)8 nếu Bpc == ‘1’, 16 nếu Bpc == ‘2’
uni_int(0,1)Cờ: alpha_zeronb_channels > 30
uni_int(0,100)Số vòng lặpnb_frames > 1
uni_int(0,60_000)Độ trễ khung tính bằng mili giâynb_frames > 1: lặp lại(nb_frames)
uni_int(0,1)Cờ: has_custom_cutoff_and_alpha
uni_int(1,128)cutoffhas_custom_cutoff_and_alpha2
uni_int(2,128)số chia alphahas_custom_cutoff_and_alpha19
uni_int(0,1)Cờ: has_custom_bitchancehas_custom_cutoff_and_alpha0
?Bitchancehas_custom_bitchance
biếnBiến đổi (xem bên dưới)
uni_int(1) = 0Bit chỉ thị: thực hiện xong các phép biến đổi
uni_int(0,2)Dự đoán pixel vô hìnhalpha_zero && phạm vi && alpha xen kẽ bao gồm 0

Kênh truyền hình

Số kênhMô tả
0Đỏ hoặc Xám
1Xanh lục
2Xanh da trời
3Alpha

Chuyển đổi

LoạiMô tả
uni_int(1) = 1Bit chỉ báo: chưa xong
uni_int(0,13)Định danh chuyển đổi
biếnDữ liệu chuyển đổi (phụ thuộc vào chuyển đổi)

Chuyển đổi được sử dụng để sửa đổi dữ liệu pixel để nén tốt hơn và để theo dõi các giá trị pixel thực sự xảy ra.

Dữ liệu pixel

Phần này chứa dữ liệu pixel thực tế được mã hóa bằng cách sử dụng mã hóa entropy MANIAC. Các pixel có thể được mã hóa bằng mã hóa xen kẽ hoặc không xen kẽ.

Phương pháp xen kẽ

Trong phương pháp này, các mức thu phóng được xác định. Mức thu phóng 0 được sử dụng cho hình ảnh đầy đủ, mức thu phóng 1 được sử dụng cho tất cả các hàng được đánh số chẵn, mức thu phóng 2 được sử dụng cho tất cả các cột được đánh số chẵn của mức thu phóng 1. Nói cách khác, mọi mức thu phóng 2k được đánh số chẵn là phiên bản được lấy mẫu xuống của mức thu phóng 2k. hình ảnh, ở tỷ lệ 1:2^k. Mức thu phóng được mã hóa từ cao nhất đến thấp nhất.

Phương pháp không xen kẽ

Trong phương pháp này, việc mã hóa các cây MANIAC bắt đầu ngay sau đó là mã hóa các pixel.

Người giới thiệu

Xem thêm