aspose.info
TH

รูปแบบไฟล์ FLIF,

อัปเดตเมื่อ

ไฟล์ FLIF คืออะไร??

FLIF (Free Lossless Image Format) เป็นรูปแบบภาพที่ไม่สูญเสียข้อมูลซึ่งใช้นามสกุล .flif สำหรับไฟล์ FLIF อ้างว่ามีประสิทธิภาพดีกว่า PNG, WebP, BPG ที่ไม่สูญเสียข้อมูล และ JPEG 2000 ที่ไม่สูญเสียข้อมูลในแง่ของอัตราการบีบอัด FLIF ใช้การพัวพันแบบโปรเกรสซีฟ เนื่องจากการดาวน์โหลดภาพบางส่วนสามารถใช้เป็นการเข้ารหัสแบบสูญเสียสำหรับภาพทั้งหมด

ประวัติย่อ

FLIF ได้รับการประกาศในเดือนกันยายน 2015 และเวอร์ชันอัลฟ่าเปิดตัวในเดือนตุลาคม 2015 ในเดือนกันยายน 2016 FLIF เวอร์ชันเสถียรเวอร์ชันแรกได้รับการปล่อยตัว

ฟลิฟ ดีไซน์

FLIF ใช้ตัวแปรของ CABAC (การเข้ารหัสเลขคณิตเลขฐานสองแบบปรับตามบริบท), MANIAC (การเข้ารหัสเลขคณิตจำนวนเต็มใกล้ศูนย์แบบ Meta-Adaptive) สำหรับการบีบอัด MANIAC เป็นอัลกอริธึมการเข้ารหัสเอนโทรปีที่พัฒนาโดย Jon Sneyers และ Pieter Wuille ใน MANIAC บริบทคือโหนดของแผนผังการตัดสินใจซึ่งเรียนรู้ในเวลาเข้ารหัสแบบไดนามิก สิ่งนี้ทำให้โมเดลบริบทมีความเฉพาะเจาะจงมากขึ้นและส่งผลให้มีการบีบอัดที่ดีขึ้น FLIF มีคุณสมบัติดังต่อไปนี้:

  • รองรับการบีบอัดแบบไม่สูญเสียข้อมูล
  • รองรับการบีบอัดแบบสูญเสียด้วยการประมวลผลล่วงหน้าของตัวเข้ารหัส
  • รองรับ Greyscale, RGB และ RGBA
  • รองรับความลึกของสี 1 ถึง 16 บิตต่อช่องสัญญาณ
  • รองรับไฟล์แบบอินเทอร์เลซและไม่อินเทอร์เลซ
  • รองรับการถอดรหัสแบบโปรเกรสซีฟของไฟล์ที่ดาวน์โหลดมาบางส่วน
  • รองรับภาพเคลื่อนไหว
  • รองรับโปรไฟล์สี ICC แบบฝัง, ข้อมูลเมตา Exif และ XMP
  • รองรับการบีบอัดไฟล์ raw ของกล้อง (RGGB) อย่างจำกัด

รูปแบบไฟล์ FLIF

ไฟล์ FLIF มีสี่ส่วนต่อไปนี้:

หัวเรื่องหลัก

ส่วนหัวหลักมีข้อมูลเมตาหลัก ได้แก่ ความกว้าง ความสูง ความลึกของสี จำนวนเฟรม

ประเภทค่ารายละเอียด
4 ไบต์“FLIF”เวทมนตร์
4 บิต3 = พรรณี ยังคง; 4 = ฉันยัง; 5 = พรรณี นิม; 6 = i animอินเทอร์เลซ, แอนิเมชั่น
4 บิต1 = ระดับสีเทา; 3 = RGB; 4 = RGBAจำนวนช่องสัญญาณ (nb_channels)
1 ไบต์‘0’,‘1’,‘2’ (‘0’=กำหนดเอง)ไบต์ต่อช่อง (Bpc)
varintความกว้าง-1ความกว้าง
varintความสูง-1ความสูง
varintnb_frames-2 (เฉพาะภาพเคลื่อนไหว)จำนวนเฟรม (nb_frames)

ชิ้นข้อมูลเมตา

ส่วนนี้ประกอบด้วยข้อมูลที่ไม่ใช่พิกเซล เช่น ข้อมูลเมตาของ Exif/XMP, โปรไฟล์สี ICC และอื่นๆ ที่เข้ารหัสโดยใช้การบีบอัด DEFLATE ชิ้นเหล่านี้ถูกกำหนดคล้ายกับชิ้น PNG โดยมีความแตกต่างตรงที่ขนาดของหัวจับถูกเข้ารหัสด้วยจำนวนตัวแปรของไบต์ ชื่อของก้อนสามารถมีได้ 4 ตัวอักษร (4 ไบต์) หรือค่าต่ำกว่า 32 ซึ่งบ่งชี้ว่าเป็นก้อนที่ไม่บังคับ

ต่อไปนี้เป็นตัวอย่างของหัวจับเสริม:

ชื่อก้อนคำอธิบายเนื้อหา (หลังจาก DEFLATE-คลายการบีบอัด)
iCCPโปรไฟล์สี ICCข้อมูลโปรไฟล์สี ICC ดิบ
eXifข้อมูลเมตาของ Exifส่วนหัว “Exif\0\0” ตามด้วยส่วนหัว TIFF และข้อมูล EXIF
eXmpข้อมูลเมตา XMPXMP อยู่ภายใน xpacket แบบอ่านอย่างเดียวโดยไม่มีการเติม

หลักการตั้งชื่อ

  • อักษรตัวแรก: ตัวพิมพ์ใหญ่ใช้สำหรับส่วนที่สำคัญ และตัวพิมพ์เล็กใช้สำหรับชิ้นที่ไม่สำคัญ
  • Second Letter: ตัวพิมพ์ใหญ่ใช้สำหรับส่วนรวม และตัวพิมพ์เล็กใช้สำหรับส่วนส่วนตัว
  • Third Letter: ตัวพิมพ์ใหญ่ใช้สำหรับจับที่จำเป็นในการแสดงภาพอย่างถูกต้อง และตัวพิมพ์เล็กไม่สำคัญสำหรับการแสดงภาพ
  • ตัวอักษรที่สี่: ตัวพิมพ์ใหญ่ใช้สำหรับหัวจับที่สามารถคัดลอกแบบสุ่มสี่สุ่มห้าได้อย่างปลอดภัย หัวจับตัวพิมพ์เล็กขึ้นอยู่กับข้อมูลรูปภาพ

ส่วนหัวที่สอง

ข้อมูลนี้มีข้อมูลเกี่ยวกับการเข้ารหัสจริงของพิกเซล

ประเภทคำอธิบายเงื่อนไขค่าเริ่มต้น
1 ไบต์NUL ไบต์ (0x00) ชื่อก้อนของบิตสตรีม FLIF16
uni_int(1,16)บิตต่อพิกเซลของช่องBpc == ‘0’: ทำซ้ำ(nb_channels)8 ถ้า Bpc == ‘1’, 16 ถ้า Bpc == ‘2’
uni_int(0,1)ธง: alpha_zeronb_channels > 30
uni_int(0,100)จำนวนลูปnb_frames > 1
uni_int(0,60_000)การหน่วงเวลาของเฟรมเป็น msnb_frames > 1: ทำซ้ำ(nb_frames)
uni_int(0,1)ค่าสถานะ: has_custom_cutoff_and_alpha
uni_int(1,128)ทางลัดhas_custom_cutoff_and_alpha2
uni_int(2,128)ตัวหารอัลฟาhas_custom_cutoff_and_alpha19
uni_int(0,1)ธง: has_custom_bitchancehas_custom_cutoff_and_alpha0
?Bitchancehas_custom_bitchance
ตัวแปรการแปลง (ดูด้านล่าง)
uni_int(1) = 0ตัวบ่งชี้บิต: เสร็จสิ้นด้วยการแปลง
uni_int(0,2)ตัวทำนายพิกเซลที่มองไม่เห็นalpha_zero && interlaced && ช่วงอัลฟ่ารวมศูนย์

ช่องทาง

หมายเลขช่องรายละเอียด
0แดงหรือเทา
1สีเขียว
2สีน้ำเงิน
3อัลฟ่า

** การแปลง **

ประเภทคำอธิบาย
uni_int(1) = 1บิตตัวบ่งชี้: ยังไม่เสร็จ
uni_int(0,13)ตัวระบุการแปลง
ตัวแปรข้อมูลการแปลง (ขึ้นอยู่กับการแปลง)

การแปลงใช้เพื่อแก้ไขข้อมูลพิกเซลเพื่อการบีบอัดที่ดีขึ้นและเพื่อติดตามค่าพิกเซลที่เกิดขึ้นจริง

ข้อมูลพิกเซล

ส่วนนี้ประกอบด้วยข้อมูลพิกเซลจริงที่เข้ารหัสโดยใช้การเข้ารหัสเอนโทรปีของ MANIAC พิกเซลอาจถูกเข้ารหัสโดยใช้การเข้ารหัสแบบอินเทอร์เลซหรือไม่อินเทอร์เลซ

วิธีอินเทอร์เลซ

ในวิธีนี้ จะมีการกำหนดระดับการซูม ซูมระดับ 0 ใช้สำหรับภาพเต็ม ซูมระดับ 1 ใช้สำหรับแถวที่เป็นเลขคู่ทั้งหมด ซูมระดับ 2 ใช้สำหรับคอลัมน์เลขคู่ทั้งหมดของ zoomlevel 1 กล่าวอีกนัยหนึ่งคือ zoomlevel 2k ที่เป็นเลขคู่ทุกคอลัมน์เป็นเวอร์ชันดาวน์แซมเปิลของ ภาพขนาด 1:2^k ระดับการซูมถูกเข้ารหัสจากสูงสุดไปต่ำสุด

วิธีแบบไม่สอดประสาน

ในวิธีนี้ การเข้ารหัสของแผนผัง MANIAC จะเริ่มต้นทันทีตามด้วยการเข้ารหัสพิกเซล

อ้างอิง

ดูเพิ่มเติม