libjpeg-turbo เดิมใช้ libjpeg/SIMD ซึ่งเป็นอนุพันธ์ MMX ที่เร่งความเร็วของ libjpeg v6b
ใน Linux เมื่อพูดถึงตัวแปลงสัญญาณ ผู้ใช้ส่วนใหญ่มักไม่กังวลเกี่ยวกับเรื่องนี้ เนื่องจากในหลาย ๆ การกระจาย ปัญหานี้มักจะได้รับการแก้ไขแล้วโดยรวมอยู่ในเป้าหมายตามค่าเริ่มต้น นอกเหนือจากการดูและแก้ไขแอปพลิเคชัน พวกเขายังสนับสนุนเมล็ดพืชของพวกเขาด้วย ทรายรวมทั้งสิ่งพิเศษบางอย่าง
แต่จะเกิดอะไรขึ้นเมื่อผู้ใช้ต้องการปรับปรุงประสิทธิภาพในบางแง่มุม เช่น เพื่อแก้ไขงานหรือเพื่อการพักผ่อนง่ายๆ ในส่วนนี้ผู้ใช้บางส่วนไม่ได้มีส่วนร่วม แต่สำหรับผู้ที่สนใจพวกเขามักจะตรวจสอบข้อดีและข้อเสียที่แต่ละรูปแบบมีให้
และนี่คือที่มาของตัวแปลงสัญญาณที่เราจะพูดถึงในวันนี้ และนั่นคือรูปแบบภาพ JPEG ที่ได้รับความนิยมมากที่สุดรูปแบบหนึ่ง แต่ก็ไม่ได้หมายความว่าดีที่สุด เนื่องจากยังมีรูปแบบอื่นๆ ที่ ให้ข้อดีมากมายกว่านี้
libjpeg-turbo เป็นโซลูชันที่ช่วยแก้ไขข้อบกพร่องบางประการของ JPEGเมื่อเทียบกับรูปแบบอื่นๆ ดังที่ระบุไว้ในที่เก็บ GitHub ของมัน:
libjpeg-turbo เป็นตัวแปลงสัญญาณภาพ JPEG ที่ใช้คำสั่ง SIMD เพื่อเร่งการบีบอัดและคลายการบีบอัด JPEG มาตรฐานบน x86, x86-64, Arm, PowerPC และ MIPS รวมถึงการบีบอัด JPEG แบบโปรเกรสซีฟบน x86, x86-64 และ arm ในระบบดังกล่าว โดยทั่วไป libjpeg-turbo จะเร็วกว่า libjpeg 2-6 เท่า อย่างอื่นเท่ากัน ในระบบประเภทอื่นๆ libjpeg-turbo ยังคงมีประสิทธิภาพดีกว่า libjpeg ในปริมาณที่มีนัยสำคัญ โดยอาศัยรูทีนการเข้ารหัส Huffman ที่ได้รับการปรับปรุงให้ดีที่สุด ในหลายกรณี ประสิทธิภาพของ libjpeg-turbo เทียบได้กับตัวแปลงสัญญาณ JPEG ความเร็วสูงที่เป็นกรรมสิทธิ์
libjpeg-turbo ใช้ทั้ง libjpeg API แบบดั้งเดิมและ TurboJPEG API ที่ทรงพลังน้อยกว่าแต่เรียบง่ายกว่า libjpeg-turbo ยังมีส่วนขยายพื้นที่สีที่ช่วยให้สามารถบีบอัด/คลายการบีบอัดเป็นบัฟเฟอร์พิกเซลแบบ 32 บิตและแบบ big-endian (RGBX, XBGR ฯลฯ) รวมถึงอินเทอร์เฟซ Java ที่มีคุณสมบัติครบถ้วน
Libjpeg-turbo เป็นไลบรารีที่พัฒนาต่อยอดจากไลบรารี libjpeg แบบคลาสสิก โดยสอดคล้องกับ API/ABIออกแบบมาเพื่อมอบความเร็วในการเข้ารหัสและถอดรหัสที่เร็วที่สุด นอกเหนือจาก API มาตรฐานของ libjpeg แล้ว ไลบรารีนี้ยังมี API TurboJPEG ของตัวเอง และส่วนขยายจำนวนมากที่มีโมเดลการแสดงผลสีที่ช่วยให้สามารถบีบอัดภาพเป็นบัฟเฟอร์พิกเซล 32 บิต (RGBX, XBGR) หรือถอดรหัสได้
ในสถาปัตยกรรมอื่นๆ การเร่งความเร็วอาจไม่มากเท่า แต่เนื่องจากการใช้ฟังก์ชันการเข้ารหัส Huffman ที่ได้รับการปรับให้เหมาะสม ไลบรารีนี้จึงยังคงเร็วกว่า libjpeg อย่างเห็นได้ชัด และมีประสิทธิภาพใกล้เคียงกับตัวแปลงสัญญาณ JPEG คุณภาพสูงจากผู้ผลิตรายต่างๆ
เป็นที่น่ากล่าวถึงว่า ibjpeg-turbo เพิ่งได้รับการอัปเดตเป็นเวอร์ชัน 3.0และนวัตกรรมหลักที่โดดเด่นในเวอร์ชันใหม่นี้มีดังต่อไปนี้:
- เพิ่มการรองรับการสุ่มตัวอย่างสี 4:1:1 ช่วยให้คุณสามารถแปลง ครอบตัด และหมุนภาพ JPEG ที่สุ่มตัวอย่างย่อย 4:1:1 โดยไม่สูญเสียคุณภาพ ตลอดจนขยายขนาดและแปลงเป็นโมเดลสี YUV
- เร่งการคำนวณตาราง Huffman ที่ดีที่สุดอย่างเห็นได้ชัด สำหรับภาพขนาดเล็ก (256×256) การเปลี่ยนแปลงทำให้เวลาในการบีบอัดลดลงได้ถึงสองเท่า
- เพิ่มความสามารถในการใช้การเข้ารหัสเอนโทรปีเลขคณิตสำหรับภาพ JPEG ด้วยการแสดงสี 12 บิตต่อช่องสัญญาณ
- TurboJPEG API ได้รับการออกแบบใหม่อย่างมากเพื่อขจัดข้อจำกัดที่มีอยู่และเพิ่มความสามารถในการขยาย ตัวอย่างเช่น ขณะนี้ฟังก์ชัน C ทั้งหมดขึ้นต้นด้วย "tj3"
- แฟล็กและโหมดจำนวนมากถูกแปลงจากอาร์กิวเมนต์ของฟังก์ชันเป็นพารามิเตอร์ API ทั่วไป
- รองรับภาพที่มีสี 12 และ 16 บิตต่อแชนเนลในโหมด Lossy และ Lossless
- เพิ่มโหมดไฟล์ JPEG แบบไม่สูญเสียข้อมูล ซึ่งใช้ได้กับภาพที่มีสี 8, 12 และ 16 บิตต่อช่องสัญญาณ เพิ่มฟังก์ชั่นใหม่ jpeg_enable_lossless() และตัวเลือกบรรทัดคำสั่ง “-lossless”
- ลบฟิลด์ ตัวสร้าง และวิธีการที่เลิกใช้แล้วใน Java TurboJPEG API
สุดท้ายนี้ ควรกล่าวว่าในอนาคต ผู้เขียน libjpeg-turbo ตั้งใจที่จะจำกัดการทำงานในโครงการให้ปล่อยอัปเดตที่มีการแก้ไขจุดบกพร่องเท่านั้น การพัฒนาเวอร์ชันใหม่ 3.1 จะไม่เริ่มต้นจนกว่าจะได้รับเงินทุนสำหรับโครงการ
สำหรับผู้ที่สนใจโค้ด โค้ดนี้เผยแพร่ภายใต้ใบอนุญาตแบบ BSD สามแบบ ได้แก่ IJG, BSD ที่ได้รับการดัดแปลง และ zlib มีไฟล์ไบนารีให้ใช้งานสำหรับ Linux, macOS และ Windows คุณสามารถดูรายละเอียดเพิ่มเติมและดาวน์โหลดไฟล์ไบนารีได้จากลิงก์ต่อไปนี้