
JPEG רגרסיביים: כך מתחבא סרטון שלם בתוך קובץ תמונה אחד
פוסט בבלוג מציג כיצד אפשר לשרשר את הסריקות הפרוגרסיביות של JPEG כך שקובץ תמונה אחד יחליף תמונות או ינגן סרטון קצר בזמן ההורדה שלו. אין לכך שימוש מעשי מלבד השעשוע שבניסוי.
פוסט שפורסם ב-maurycyz.com מציג כיצד המצב הפרוגרסיבי של פורמט JPEG — אותה תכונה שבזכותה תמונה שהורדה חלקית מוצגת כתצוגה מקדימה ברזולוציה נמוכה ולא כגזרה קטועה — יכול להפוך לדרך לאחסן סרטון קצר שלם, או כמה תמונות שונות, בקובץ אחד.
איך עובדות הסריקות הפרוגרסיביות
JPEG פרוגרסיבי מפצל את הנתונים הדחוסים לסדרה של סריקות, שלכל אחת מהן כותרת משלה. הסריקה הראשונה מכילה רק את רכיב פורייה הנמוך ביותר (DC) של שלושת ערוצי הצבע, וזה מספיק כדי לצייר תצוגה מקדימה גסה מאוד של התמונה. שמונה הסריקות שאחריה משלימות את השאר: תחילה פרטי בהירות נוספים, אחר כך נתונים מלאים ברמת דיוק נמוכה, ולבסוף את הביטים האחרונים החסרים. הצבע נשמר במרחב YCbCr ברזולוציה של חצי, ולכן כל נתוני הצבעוניות של תמונה שוקלים בערך כמו נתוני הבהירות בלבד.
דריסת תמונה בזמן ההורדה
מכיוון שכל סריקה מצהירה בעצמה על הטווח הספקטרלי שלה, אפשר לבנות קובץ JPEG שבו סריקות מאוחרות דורסות נתונים שכבר צוירו. השיטה גסה: מחברים כמה קבצי JPEG באותה רזולוציה ומוחקים את סמני תחילת התמונה, תחילת הפריים וסוף התמונה — המחבר עשה זאת בתוכנית C קצרה. בחיבור איטי קובץ כזה משתנה לעין ממש מתמונה אחת לאחרת בזמן ההורדה. עם זאת, רוב המפענחים מפסיקים אחרי מספר מסוים של סריקות, כנראה כהגנה מפני התקפות בסגנון פצצת דחיסה, ולכן הגישה התמימה מוגבלת לתשעה פריימים בערך.
תשעים פריימים בקובץ אחד
כדי להכניס יותר פריימים, כל פריים צריך להיות קטן ככל האפשר. סריקה פרוגרסיבית אינה יכולה להכיל בו-זמנית נתוני AC (רכיבים מעל אפס) ונתוני DC, והמצב הבסיסי מפסיק אחרי הסריקה הראשונה — ולכן קובץ ה-JPEG הפרוגרסיבי הקטן ביותר האפשרי הוא סריקת DC בודדת. מכיוון שהתמרה פועלת על בלוקים של 16×16, פריים כזה אינו צבע אחיד: הוא מוצג ברזולוציה של שישית עשרה מהמקור. כרום מוותר אחרי כתשעים פריימים כאלה, ופיירפוקס סבלני יותר. הפריימים עומדים לחלוטין בתקן ואפשר ליצור אותם בכלי jpegtran על ידי הצהרה על קובץ סריקות.
אין לכך שימוש מעשי: JPEG אינו נושא מידע על תזמון, ולכן קצב הניגון תלוי כולו בהשהיית הרשת. המחבר מציין שהטכניקה טובה בעיקר לריק-רולים לא שגרתיים, ומקשר לניסויים דומים — סרטון HTML הבנוי רק מרכיבי dialog, ויישום אינטראקטיבי בעמוד אחד בלי CSS ובלי JavaScript. תוכנית המיזוג פורסמה לצד הפוסט.
SiTech — פיתוח אתרים בכוח ה-AI
אנחנו בונים אתרים מהירים ומודרניים ומשלבים AI בתהליכי עבודה אמיתיים. יש לכם פרויקט או שאלה? נשמח לעזור.