מאי 292011
 

בסך הכל רציתי לשמור תמונה. ערכתי אותה (בעזרת הצייר של Windows או תוכנה אחרת), ואז שאלה אותי התוכנה בתמימות מעושה: איך אתה רוצה לשמור את התמונה שלך?

היא דווקא הציעה לי מגוון אפשרויות, מ-BMP ו-TIFF ועד ל-JPEG, ואפילו אמרה משהו על GIF ו-PNG. רק דבר אחד היא לא אמרה לי: באיזו אפשרות כדאי לבחור.

שמירה בשם... אבל באיזה סוג?

שמירה בשם... אבל באיזה סוג?

למה יש כל-כך הרבה סוגים?

ניתן לשמור תמונות, ציורים וקבצים גרפיים אחרים באופנים שונים. סוגים אלה נקראים פורמטים, והם קובעים את מספר הצבעים שיישמרו, את איכות התמונה וגם את גודל הקובץ שייווצר.

ניקח לדוגמה פורמט בשם ביטמאפ (Bitmap): אפשר לשמור תמונה כביטמאפ שחור-לבן, ואז הצבעים שבתמונה יוחלפו בשחור או בלבן. לדוגמה, אם ניקח את התמונה הבאה:

תמונה צבעונית

ונשמור אותה כתמונה בשחור-לבן, היא תיראה כך:

תמונה בשחור-לבן

בתמונה המקורית יש המון צבעים – למרות שהעכבר עצמו צבוע באדום-לבן, כל נקודה בתמונה היא בצבע מעט שונה, בגלל התאורה, צל הנופל על חלקים מסוימים ועוד. אם ניקח את התמונה המקורית ונשמור אותה בפורמט ביטמאפ של 16 צבעים, נאבד את כל הגוונים הללו ונישאר רק עם ששה-עשר:

תמונה בששה-עשר צבעים

ויש גם ביטמאפ שיכול לשמור 256 צבעים. כך תיראה התמונה שלנו אם נשמור אותה בפורמט הזה:

תמונה ב-256 צבעים

כפי שניתן לראות, יש יותר גוונים מאשר בתמונה בת ששה-עשר הצבעים, אבל עדיין פחות מאשר בתמונה המקורית. הנה תזכורת:

התמונה המקורית

למה לי להגביל את מספר הצבעים?

כל נקודת צבע בתמונה נקראת פיקסל. כל המידע על התמונה שמור בקובץ, משהו בסגנון "הפיקסל השמאלי-העליון של התמונה צבוע באדום, הפיקסל שמימינו צבוע באדום בהיר יותר, הפיקסל שאחריו לבן" וכו'. בתמונה בשחור-לבן, כל פיקסל יכול להיות אחד משני צבעים – שחור או לבן. אם יש לנו ששה-עשר צבעים, הפיקסל יכול להיות צבוע בצבע מס' 1, או צבע 2, וכן הלאה עד 16. לכן, כל פיקסל מכיל שתי ספרות של צבע – בין 00 ל-16 (הפיקסלים נשמרים למעשה בפורמט קצת שונה, אבל הרעיון זהה). בתמונה בצבע מלא, יש יותר מ-16 מיליון צבעים (16,777,216, ליתר דיוק), ולכן כל פיקסל תופס שמונה ספרות (ושוב – לא בדיוק, אבל זה הרעיון). כלומר, ככל שמספר הצבעים שיש בתמונה גדול יותר, יש יותר מידע לשמור, ולכן קובץ התמונה יהיה גדול יותר.

לפעמים גם אין צורך בכל-כך הרבה צבעים: פקס, לדוגמה, נשלח ממילא בשחור-לבן, ולכן שמירה בצבע תהיה סתם בזבזנית – שמירה של תמונת הפקס בפורמט שחור-לבן תהיה יותר חסכונית, בלי לאבד שבריר מידע מהתמונה המקורית. באופן דומה, ציור שהילד יצר בעזרת תוכנת הצייר של Windows עם לוח הצבעים המוגבל שהיא מציעה, ניתן לשמור בפורמט של 16 צבעים. תמונה שצולמה במצלמה נרצה לשמור במלוא הדרה – בפורמט ביטמאפ, לדוגמה, נשתמש ב-24 ביט (המאפשרים, כפי שאמרנו, 16,777,216 צבעים וגוונים שונים).

דחיסה

אם נשמור תמונות כרשימה של נקודות וצבעים, נקבל קובץ ענקי – לכל פיקסל בתמונה יש צבע משלו, ולכן כל שורת פיקסלים שתתווסף לתמונה תגדיל אותה באופן משמעותי. הפתרון הוא לכווץ. סוג אחד של כיווץ הוא שמירה של המידע בצורה קצרה יותר, לדוגמה – שמירת המידע של רצף: אם יש לי מספר פיקסלים ירוקים, במקום לשמור "הפיקסל הראשון ירוק, הפיקסל השני ירוק, הפיקסל השלישי ירוק" אפשר לשמור את המידע כ-"מפיקסל 1,  יש שלושה ירוקים".

סוג אחר של כיווץ מרשה לעצמו "לאבד" מידע מדי פעם – אם יש פתאום פיקסל שמפריע לדחיסה, פורמט כזה יכול להתעלם ממנו. לדוגמה, אם יש שני פיקסלים כחולים, אחריהם אחד בגוון כחול מעט יותר בהיר ושוב פיקסל כחול, שמירת התמונה בפורמט "מאבד" יכולה לשנות מעט את התמונה כך שארבעת הפיקסלים יהיו באותו הצבע, וכך לשמור את התמונה כ-"4 פיקסלים כחולים" – חסכון משמעותי במחיר של "זיוף" בתמונה.

הנה דוגמה:

 

תמונה ללא אובדן מידע

תמונה ללא אובדן מידע

אם נשמור את התמונה הזאת בפורמט שמאבד מידע (אבל שומר על קובץ קטן יותר), כמו JPEG, נקבל את התמונה הבאה:

 

תמונה עם אובדן מידע

תמונה עם אובדן מידע

רואים את הכתמים, ה"מריחות" והפסים הכתומים? אם לא, הקליקו על התמונה כדי לקבל גרסה מוגדלת שלה. האלגוריתם (אופן הפעולה) ששימש לדחיסה החליט שאם הוא יעוות קצת את התמונה, ייקח לו פחות מקום לשמור אותה. זה עובד טוב בחלק מהתמונות, אבל לפעמים אנחנו רוצים לשמור על דמיון מקסימלי למקור, גם במחיר של קובץ גדול יותר.

אז מה עושים?

אנשים מאוד חכמים יושבים וחושבים על דרכים לדחוס את המידע, והרעיונות שלהם מוצאים את דרכם לפורמטים. כך, בין הפורמטים השומרים את כל המידע, יש את פורמט ביטמאפ, פורמט בשם GIF, עוד אחד בשם PNG, ועוד ועוד – כל אחד דוחס את המידע באופן אחר. בין הפורמטים המאבדים, בולט אחד בשם JPEG, המוכר גם כ-JPG.

הפורמט המוביל כיום הוא JPEG – ההוא שמאבד צבעים מדי פעם. על האובדן הוא מפצה בדחיסה טובה, שגורמת לתמונה של 10 מיליון פיקסלים בצבע מלא, שאמורה היה לתפוס קובץ בגודל 30 מגה, לתפוס בערך עשירית מזה. כל המצלמות הדיגיטליות תומכות בפורמט JPEG (ועכשיו אתם גם יודעים למה). ואם אתם עדיין מודאגים מהעיוותים בתמונה, אתם יכולים להירגע – JPEG מאבד בדרך-כלל מעט מאוד מידע, והסטיקר למעלה הוא דוגמה מאוד קיצונית (עבדתי קשה כדי לגרום לאלגוריתם לעבוד גרוע, רק בשביל ההדגמה).

לפעמים עדיף להשתמש בפורמט שומר-מידע, גם אם הקובץ יצא גדול יותר. לדוגמה – אם יש לכם קווים דקים בתמונה (כמו אותיות), פורמט מאבד עלול לעוות אותם מספיק כך שהיא "תיראה רע". PNG הוא פורמט שומר-מידע שמצליח לדחוס תמונות לא רע. בקבצים קטנים, הוא אפילו גיע לדחיסה טובה יותר מזו של JPEG:

PNG מנצח את JPEG בקבצים קטנים

PNG מנצח את JPEG בקבצים קטנים

תמונות בשחור-לבן בלבד, כמו פקסים, עדיף לשמור בפורמט בשם TIFF, שיודע גם לשמור בשני צבעים בלבד (ובכך לחסוך במקום), גם לדחוס אותן כך שהן יהיו מאוד קטנות, ואפילו לשמור מספר עמודי פקס בקובץ יחיד, כך שנוכל לשלוח את כולו בלי לשכוח עמודים.

במאמר הבא, נלמד על תוכנות נוחות לעבודה עם קבצים.

 יש לך מה לומר?

ניתן להשתמש בתגי HTML הבאים: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(חובה)

(חובה)