ผล งาน ที่ แท้ จริง — ตั้ง แต่ แคน วาส เฟรม ไป จน ถึง การ บีบ คั้น ของ แอล ซี ดับเบิล ยู
รูปแบบ GIF มีอายุ 39 ปี และยังคงอยู่ทุกหนทุกแห่ง นี่คือสิ่งที่เกิดขึ้นระหว่างการคลิก 'เอ็กซ์พอดซ์' และได้รับไฟล์ — การจับภาพเฟรม, การปรับสี, การบีบข้อมูลแบบ LZW และเหตุผล GIF ของคุณเป็น 4 MB.
เหตุ ผล ที่ ยัง มี อยู่
The Prographics Intergraphy ได้ถูกสร้างโดย Compu Server ในปี 1987[Compu Server, 1987]. มันรองรับแอนิเมชัน, ความโปร่งใส, และการบีบอัดแบบไร้การสูญเสีย มี การ จํากัด สี เฉพาะ ขนาด 256 สี ต่อ กรอบ. มันไม่มีเสียง มันผลิตไฟล์ขนาดใหญ่ ด้วยทุกมาตรการทางเทคนิค มันควรจะถูกแทนที่เมื่อหลายทศวรรษก่อน.
และยัง: Discord, Slack, iffic, Twitter, Reddiat, และอีเมลทั้งหมดสนับสนุน GIFs พื้นเมือง GIFFY ทําหน้าที่มากกว่า 10 พันล้าน GIFS ต่อวัน [กิตติคุณ 2020]. รูปแบบยังคงเนื่องจากมันใช้ได้ทุกที่ ไม่ต้องใช้รหัสรหัส และเล่นโดยอัตโนมัติ ไม่มีรูปแบบอื่นใด ที่มีการรวมกันของการรองรับสากลและการเล่นเพลงที่เป็นศูนย์.
การเข้าใจวิธีการทํางาน GIFs มีประโยชน์มากเกินกว่าไตรวิลา มันอธิบายว่าทําไม GIF ของคุณถึงเป็น 4 MB ทําไมเกรเดียนจึงดูคล้ายวง และสิ่งที่คุณสามารถทําได้เกี่ยวกับมัน.
ขั้นที่ 1: จับภาพเฟรมภาพ
ภาพเคลื่อนไหว GIF เป็นลําดับของรูปภาพ (กรอบ) ที่แสดงตามลําดับด้วยการหน่วงเวลาระหว่างภาพแต่ละภาพ เพื่อที่จะสร้างแอนิเมชันจากผ้าใบ คุณต้องจับภาพสถานะผ้าใบ ในช่วงปกติ.
ในเว็บเบราว์เซอร์ ซึ่งหมายความว่าการอ่านข้อมูลพิกเซลจากองค์ประกอบ HTMLQ0Q ที่แต่ละเฟรม โดยปกติจะเป็น canvas.toDataURL() หรือ XQ แอนิเมชันจะก้าวหน้าไปจนถึงเวลาเป้าหมาย ผ้าใบจะถูกแปล และพิกเซลจะถูกบันทึก ข้อจํากัดของกุญแจ: คุณต้องรอวงจรสีของเบราว์เซอร์ (requestAnimationFrame) ก่อนในการอ่านค่าพิกเซล มิฉะนั้นคุณจะจับภาพบัฟเฟอร์แบบหยาบๆ ได้.
GIF ทั่ว ๆ ไปที่ 15 FPS สําหรับ 3 วินาที ต้องการการดักจับเฟรม 45 อัน 1080×1080 มติ แต่ละเฟรมมีประมาณ 4.7 ล้านพิกเซล.
ขั้นที่ 2: การปรับความเข้มสี
GIF รองรับค่าสูงสุดของ 256 สีต่อเฟรม โดยเก็บไว้ในตารางสี (พาเลต) โครง ผ้า ทั่ว ไป มี สี หลาก หลาย พัน สี. การนํามายัง 256 โดยไม่ปรากฏความเสื่อมโทรมเป็นส่วนที่ยากที่สุดของรหัส GIF.
วิธีการมาตรฐานคือ "อัลกอริทึมการตัดแบบกลาง" (Heckbert, 1982): จัดเรียงพิกเซลทั้งหมดโดยช่องสีแดงที่สุดของพวกเขา แบ่งรายการที่มัธยฐานซ้ํากับสีเขียวและสีน้ําเงิน แบ่งพื้นที่สีซ้ําเป็น 256 พื้นที่ ค่าเฉลี่ยของแต่ละภูมิภาค กลายเป็นค่าจานสี นี่ คือ สิ่ง ที่ กิฟ.js — ห้อง สมุด PinePaper ใช้ — เครื่อง มือ ใน เว็บไซต์ ผู้ ทํา งาน เพื่อ ความ คล้ายคลึง กัน [Rubaxa, gif.js].
การปรับสีคือสาเหตุที่ GIFs ใช้กราฟฟิกสีแบนๆ ได้ดี แต่ต้องต่อสู้กับภาพถ่ายและเกรเดียน เกรเดียนข้าม 1080 พิกเซลอาจจะใช้ 500 + สีที่แตกต่างกัน การ บีบ จน ถึง 256 ทํา ให้ เกิด วง ที่ เห็น ได้ ด้วย ตา — ขั้น ตอน ต่าง ๆ ที่ ไม่ เกี่ยว ข้อง กัน ซึ่ง ควร ทํา ให้ เกรเดียน เรียบ.
สิ่งที่คุณสามารถทําได้เกี่ยวกับมัน: ใช้ สี น้อย กว่า ใน แบบ ของ คุณ. รูปทรงแบน, เติมเต็มของแข็ง, และอักษรควอนตัมได้ดี ความโปร่งใสและพื้นผิวภาพไม่ ถ้า GIF ของคุณมีแถบ จัดรูปจานสีไม่ได้.
ขั้นที่ 3: การบีบอัดแบบ LZW
พิกเซลของแต่ละเฟรม (ตรงกับ 256 สีจานสี) กําลังบีบอัดโดยใช้ Lampel-Ziv-Welch (LZW) บีบข้อมูล [Wlch, 1984]. LZW สร้างพจนานุกรมของลําดับที่ซ้ําไปซ้ํามา ในขณะที่มันสแกนข้อมูล เมื่อมันพบลําดับที่มันเคยเห็นมาก่อน มันจะแสดงดัชนีของพจนานุกรมแทนข้อมูลดิบ.
นี่ หมาย ความ ว่า การ บีบ คั้น GIF จะ ได้ ผล มาก ที่ สุด เมื่อ มี พื้น ที่ ขนาด ใหญ่ ของ สี ซ้ํา — ภูมิ หลัง ที่ แข็ง แรง, รูป ร่าง แบน, ข้อ ความ บน พื้น ผิว แบบ เดียว กัน. พื้นผิวคอมโพเน็กซ์ที่มีความแปรผันของหน่วยพิกเซล ทําให้เกิดอัตราส่วนการบีบข้อมูลยากจน เพราะพจนานุกรมของ LZW พบลําดับที่ซ้ํากันไม่กี่ลําดับ.
ความหมายเชิงประจักษ์: 1080x1080 GIF ของข้อความสีขาวบนพื้นหลังสีดํา อาจบีบอัดเป็น 200KB. มติเดียวกัน GIF ของภาพถ่ายที่ซับซ้อน อาจเป็น 8 MB ขนาดแฟ้มจะขึ้นอยู่กับความซับซ้อนของภาพ มากกว่าค่าความละเอียดหรือจํานวนเฟรม.
ขั้น ที่ 4: กรอบ ต่าง ๆ และ การ มอง ใน แง่ ดี
เฟรมภาพ GIF สามารถกําหนดวิธี ~ diposial scool *: จะล้างผ้าใบก่อนจะวาดเฟรมถัดไปหรือไม่, ให้เห็นเฟรมภาพก่อนหน้า, หรือเรียกคืนค่าเดิมไปยัง ภูมิหลัง สมาร์ท GIF ตัวเข้ารหัสโดยใช้ ~ เฟรมต่าง ๆ กัน~ — การเข้ารหัสเฉพาะพิกเซลที่เปลี่ยนไประหว่างเฟรม ไม่ใช่ทั้งเฟรม.
หากภาพเคลื่อนไหวของคุณมีพื้นหลังคงที่ที่มีองค์ประกอบการเคลื่อนย้ายขนาดเล็ก, GIF ที่ปรับแต่งให้เข้ารหัสพื้นหลังครั้งเดียวและเพียง แต่การปรับปรุงพื้นที่ที่ธาตุย้าย นี่จะช่วยลดขนาดแฟ้มได้อย่างมาก ตัวเข้ารหัส PinePaper ใช้คําสั่ง gif.js เพื่อปรับใช้ค่าดีที่สุดนี้โดยอัตโนมัติ.
ตัวเลข
สําหรับแอนิเมชัน PinePaper ทั่วไป (1080×1080, 15 FPS, 3 วินาที, พื้นหลังสีดําด้วยข้อความเคลื่อนไหว):
| ส่วนประกอบ | ขนาด |
|---|---|
| เฟรม Raw (45 × 4. 7M พิกเซล x 3 ไบต์) | ~634 MB |
| 256 สี 1 byte/พิกเซล) | ~211 MB |
| หลังการบีบอัด LZW | ~2-4 MB |
| ใช้เฟรมต่างกัน | ~1-2 MB |
อัตราการบีบอัดจากดิบถึงปลายมีประมาณ 300:1 ต่อ 600:1. ส่วนมากมาจากควอนตัมสี (3:1) และ LZW (50:1 ถึง 100:1).
เมื่อใช้รูปแบบอื่น ๆ ของ PPGXX
| รูปแบบ | ดีที่สุด | จํากัด |
|---|---|---|
| GIF | รองรับระบบ, เล่นอัตโนมัติ, แอพพลิเคชันแบบพาเนล | 256 สี, แฟ้มขนาดใหญ่, ไม่มีเสียง |
| WebM (VP9) | คุณภาพสูงสุด, แฟ้มที่น้อยที่สุด, web | การ เกื้อ หนุน ที่ มี จํากัด ใน เมือง ซาฟารี |
| MP4 (H.264) | สื่อสังคม, เครื่องเล่นวิดีโอ | ต้องการ codec, ไม่มีการโปร่งใส |
| ภาษาเอแปงNAME | ภาพเคลื่อนไหวด้วยสีเต็มรูปแบบ | การรองรับแบบจํากัดในเบราว์เซอร์รุ่นเก่า |
GIF เป็นตัวเลือกที่ถูกต้อง เมื่อคุณต้องการความเข้ากันได้ของสากลและการเล่นอัตโนมัติ สําหรับคุณภาพหรือขนาดแฟ้ม WebM หรือ MP4 จะดีกว่า.
ลองสิ
เปิด [PinePaper Studio] (XQ0) สร้างการออกแบบ และส่งออกเป็น GIF. สังเกตว่าขนาดแฟ้มเปลี่ยนไปอย่างไร
- เพิ่มจํานวนเฟรมภาพ (เพิ่มเฟรม =แฟ้มใหญ่, สัดส่วน)
- เพิ่มเกรเดียน (การแทนที่แบบจน=แฟ้มขนาดใหญ่)
- ใช้สีทึบ (ความกว้างดี = แฟ้มที่เล็กกว่า)
- เพิ่มขนาดผ้าใบ (เป็นพิกเซลต่อเฟรม = แฟ้มที่มีขนาดใหญ่)
แต่ละการเปลี่ยนแปลงเป็นการวัด ของท่อบีบอัด คุณไม่ได้แค่สร้าง GIF -- คุณกําลังสังเกตว่าทฤษฎีข้อมูล นํามาใช้กับการออกแบบของคุณอย่างไร.
อ้างอิง
- Compu Server (1987). กราฟิกรูปแบบการเปลี่ยนรูปแบบ, รุ่น 87a.
- Graphy (2020). GIFFY รายงานประจําปี: 10 พันล้านบาทเดลี่ให้บริการ.
- Hookbert, P. (1982). การปรับคุณภาพของภาพสีสําหรับการแสดงผลเฟรมบัฟเฟอร์ (Computer Pictures) *, 16(3), 297-307.
- Rubaxa. gif.js — จาวาสคริปต์ GIF ตัวเข้ารหัสโดยใช้ workers Github.com/Jordberg/gif.js.
- Welch, T.A. (1984). เทคนิกสําหรับบีบอัดข้อมูลระดับสูง.
PinePaper. การส่งออก GIF ของ PPEG1X นั้นฟรี — ไม่มีเครื่องหมายน้ํา, ไม่มีการเซ็น เปิด เอกสาร Pine. studiod/editor และส่งออกแอนิเมชันแรกของคุณ.
Ready to create?
Start making animated GIFs, videos, and graphics — free, no signup.
Open PinePaper Editor