מפת פיקסלים ניידת (.ppm)
תקן תקןPortable Pixmap Format (PPM) הוא תקן צבע ה-RGB המלא של משפחת גרפיקת Netpbm, המספק את הייצוג הפשוט ביותר האפשרי, ללא דחיסה, לתמונות צבע אמיתי.
בדיקה ומטא-נתונים
מערכות הפעלה ומנתחי קבצים מזהים קבצי PPM על ידי בדיקת רצף הבייטים הבינארי הראשוני:
חתימת כותרת ברמת הבייט (Magic Bytes)
מערכות הפעלה ומנתחי קבצים מזהים קבצי PPM על ידי בדיקת רצף הבייטים הבינארי הראשוני:
חתימת HEX (היסט 0):
50 33 / 50 36ייצוג ASCII: P3 / P6
תקינה: תקן ספריית Netpbm
מפרט טכני
| מבנה המכולה | פורמט Netpbm בטקסט ASCII (P3) או בינארי (P6), עם רוחב, גובה, ערך צבע מרבי וזרם של שלשות RGB |
| דחיסה | בייטים בינאריים גולמיים או שלשות מספרים בטקסט ASCII קריא לאדם, ללא דחיסה |
| סדר בתים (Endianness) | Big-Endian (לדגימות של 16 סיביות לערוץ בתמונת 48 סיביות במצב P6) |
| מרחבי צבע | RGB ליניארי או sRGB תקני |
| ערוצים ומבנה | שלושה ערוצי RGB (צבע אמיתי של 24 או 48 סיביות) |
| ממדים מרביים | מגבלות מעשיות כמעט שאינן קיימות (תומך במרחב קואורדינטות שרירותי של 64 סיביות) |
| שקיפות | ללא (PPM תקני הוא RGB אטום לחלוטין) |
| הזרמה ופרוגרסיביות | הפעלה רציפה בהזרמה, שורה אחר שורה |
מטריצת השוואה טכנית: PPM מול מתחרים
| תכונה טכנית | PPM (נוכחי) | BMP | PNG | TIFF |
|---|---|---|---|---|
| עומק צבע | 24-bit / 48-bit RGB Truecolor | 1-bit to 32-bit RGBA | 24-bit / 48-bit RGBA | 8-bit to 64-bit RGBA |
| אח במשפחת Netpbm | PPM (Portable Pixmap) | פורמט שאינו Netpbm | פורמט W3C שאינו Netpbm | פורמט Adobe שאינו Netpbm |
| בייטי זיהוי (Magic Bytes) | P3 (ASCII) / P6 (בינארי) | BM (0x42 0x4D) | ‰PNG.... | II*\0 or MM\0* |
| דחיסה | לא דחוס | לא דחוס / RLE | דחיסת Deflate ללא אובדן; החיסכון בגודל משתנה לפי תוכן התמונה | LZW / Deflate / Zip |
מצבי השחתה נפוצים ומדריך שחזור הקסדצימלי (Hex)
התמונה מוצגת עם היסט אלכסוני בין ערוצי הצבע.
גורם שורש: בית חסר ברצף שלשות ה-RGB גורם לחוסר יישור של בתי האדום, הירוק והכחול הבאים.
שחזור: כוונון מחדש של היסט שלישיות ה-RGB או המרה באמצעות ממיר Netpbm של File2File.app.
ניתוח אבטחה ווקטורי תקיפה נגד מנתחי פורמטים (parsers)
מפענחי PPM חייבים להגן מפני גלישת מספר שלם (integer overflow) בעת חישוב גדלי מאגר שלישיות ה-RGB בגודל 3 בתים.
ווקטורי תקיפה ידועים
- גלישת מספר שלם במהלך הקצאת מאגר בגודל width * height * 3.
- קריאת יתר ממאגר (buffer over-read) בעת קריאת אסימוני ASCII פגומים במצב P3.
- מניעת שירות עקב הקצאות זיכרון מוגזמות המוגדרות בהצהרות.
שיטות מומלצות להגנה: אכוף מגבלות קפדניות על הקצאת זיכרון בהתאם לגודל הקובץ הפיזי לפני הפענוח.
היסטוריה ואבני דרך
יתרונות מרכזיים
- קל לכתוב כותרת ודגימות פיקסלים של PPM מתוכנת גרפיקה. אם נדרש לנתח את שתי הגרסאות, ASCII ובינארית, או לטפל בבטחה בקבצים פגומים, השתמש בספרייה.
- מצב ASCII (P3) מאפשר למתכנתים לצפות, להעתיק ולערוך ערכי צבע RGB גולמיים ישירות בעורך טקסט.
- PPM משמש כפורמט ביניים או פלט פשוט בחלק מקורסי הגרפיקה הממוחשבת ובדוגמאות של תוכנות raytracing.
מגבלות טכניות וחסרונות
- תמונות P6 לא דחוסות של 8 סיביות עשויות להיות גדולות; תמונת RGB בגודל 3840 x 2160 משתמשת בכ-24.9 מיליון בתים לנתוני הפיקסלים, לפני הכותרת.
- לא יעיל להפצה באינטרנט או להעברה ברשת.
- אין תמיכה בשקיפות אלפא או בפרופילי צבע מוטמעים.
עובדות טכניות מעניינות
- בחלק מדוגמאות המבוא לתוכנות raytracing משתמשים ב-PPM כפלט, כי פשוט לכתוב את נתוני הפיקסלים שלו.
- ב-ASCII PPM (המכונה 'P3'), תמונה היא מילולית קובץ טקסט של מספרים: '255 0 0' עבור אדום, '0 255 0' עבור ירוק, ו-'0 0 255' עבור כחול.
- חבילת Netpbm הופצה במקור במהדורות הקלטת של 4.3BSD Unix בסוף שנות ה-80.
שאלות טכניות נפוצות
מדוע קורסים במדעי המחשב משתמשים ב-PPM?
PPM מאחסן דגימות פיקסלים של RGB עם כותרת קצרה, ולכן תוכנת רינדור קרניים יכולה לכתוב תמונה בלי מקודד מורכב. עם זאת, יישומים צריכים לטפל בגרסאות הטקסט P3 והבינארית P6 ובכללי עומק הדגימה שלהן.
מה ההבדל בין PPM מסוג P3 לבין P6?
P3 מאחסן שלשות RGB כמספרי טקסט ASCII רגילים, בעוד ש-P6 מאחסן שלשות RGB כבייטים בינאריים גולמיים.
כיצד אוכל להמיר קובץ PPM ל-JPG או ל-PNG?
תוכל להמיר קובצי PPM ל-PNG או ל-JPG ישירות בדפדפן שלך באמצעות File2File.app, מבלי שנתונים יעזבו את המכשיר שלך.