איך המרת תמונות בדפדפן באמת עובדת (ולמה בניתי אותה ככה)
Dov Azencot
@DovAzencotהסיבה שכל האתר הזה קיים היא רגע קטן וטיפשי של אי-נוחות שהיה לי לפני שנים. הייתי צריך להמיר תמונת HEIC אחת ל-JPG, הקלדתי את הדבר המובן מאליו בשורת חיפוש, ונחתתי על ממיר שרצה שאעלה את התמונה שלי לשרת שלו. אז עשיתי את זה. זה עבד. ואז ישבתי שם וחשבתי: התמונה הזאת יושבת עכשיו על איזו מכונה שאני לא יודע עליה כלום, מופעלת בידי אנשים שלעולם לא אפגוש, נשמרת למשך זמן שאף אחד לא אמר לי. לצילום מסך אקראי, בסדר. אבל זה לא היה צילום מסך. זו הייתה תמונה אישית, וזה עתה מסרתי אותה לזרים כדי לחסוך לעצמי שלושים שניות.
זו הבעיה שיצאתי לא לחוות יותר. התשובה התבררה כך שההעלאה מעולם לא הייתה נחוצה מלכתחילה.
הדרך הישנה: לשכור את המחשב של זר
ממיר מקוון מסורתי עובד כמו שירות בהזמנה בדואר. אתם שולחים את הקובץ שלכם למעלה לשרת. השרת מריץ את ההמרה בעזרת תוכנה שמותקנת על המכונה שלו. הוא שולח את התוצאה בחזרה למטה. התמונה שלכם עשתה נסיעה הלוך ושוב דרך חומרה שאתם לא שולטים בה, ואי-שם באמצע היא ישבה, במלואה, על דיסק שהוא לא שלכם.
כל הבטחת פרטיות שמוברגת על המודל הזה היא הבטחה לגבי התנהגות — הקובץ נמחק אחרי שעה, אף אחד לא מסתכל. אולי זה מתקיים. אולי כן. אין לכם דרך לבדוק, ואתם סומכים על זה עם הבייטים האמיתיים של הקובץ שלכם. האמון הוא כל הארכיטקטורה, ואמון הוא בדיוק הדבר שלא רציתי לבזבז.
הדרך החדשה: לדפדפן שלכם כבר יש את המחשב
הנה מה שהשתנה. דפדפנים מודרניים יכולים להריץ תוכנות מהודרות אמיתיות במהירות קרובה לטבעית, דרך משהו שנקרא WebAssembly — WASM בקיצור. קודקי התמונה שפעם חיו על שרת — הקוד שקורא PNG, שמקודד WebP, שמפענח HEIC — יכולים להיות מהודרים ל-WASM ולרוץ בתוך טאב הדפדפן שכבר פתוח לכם.
אז כשאתם זורקים קובץ על דף שבנוי ככה, תוכנת ההמרה יורדת למכונה שלכם, פעם אחת, כמו כל חלק אחר של דף האינטרנט. מכאן והלאה העבודה עצמה — קריאת התמונה שלכם, המרתה, כתיבת הקובץ החדש — קורית על המעבד שלכם עצמכם, בזיכרון שלכם עצמכם. התוצאה נמסרת ישר בחזרה אליכם כהורדה. הקובץ שלכם לעולם לא נשלח לשום מקום, כי אין לאן לשלוח אותו. אין שרת במעגל בכלל.
לכן אני יכול לומר שהקבצים שלכם לעולם לא עוזבים את המכשיר ולהתכוון לזה כעובדה ולא כמדיניות. זה לא שאני מבטיח לא להסתכל. זה שאין שום מסלול שבו התמונה שלכם מגיעה אליי. לא הייתי יכול לאחזר את התמונה שלכם גם אם בית משפט היה מצווה עליי, כי היא מעולם לא הייתה בצד שלי של החוט. הפרטיות היא לא תכונה שהוספתי מעל. היא תוצאה של המקום שבו הקוד רץ.
איך אתם יכולים לדעת שזה נכון
אתם לא צריכים להאמין לי, וזה החלק שאני הכי אוהב. תפתחו את כלי המפתחים בדפדפן, תעקבו אחרי לשונית הרשת, ותמירו קובץ. תראו את הדף ואת קודק ה-WASM יורדים פעם אחת. לא תראו את התמונה שלכם עולה. עוד יותר טוב: תטענו את הדף, תכבו את ה-Wi-Fi, ותמירו משהו בכל זאת. זה עדיין עובד, כי כל מה שצריך כבר על המכונה שלכם. כלי שמעלה את הקבצים שלכם לא יכול לעשות את זה. זה כן.
המגבלה האמיתית האחת
הבטחתי כנות, אז הנה היא. הרצת ההמרה על המכשיר שלכם עצמכם אומרת שהיא משתמשת בזיכרון שלכם עצמכם, ולטאב דפדפן אין זיכרון אינסופי לשחק איתו.
לקבצים רגילים — תצלומים, צילומי מסך, לוגואים, החומר שאנשים ממירים כל היום — זה לא עניין. אבל אם תזרקו עליו משהו ענק באמת, תמונה בודדת ברזולוציית קיצון, או אצווה עצומה בבת אחת, אתם יכולים להגיע לתקרה. פענוח תמונה אומר להחזיק את הפיקסלים הלא-דחוסים שלה בזיכרון, שהם הרבה יותר גדולים מהקובץ על הדיסק, ותמונה ענקית יכולה למצות את מה שמותר לטאב. כשזה קורה ההמרה מאטה עד זחילה או שהטאב מוותר.
לשרת עם 64 GB של RAM אין את הבעיה הזאת אף פעם. אז הנה העסקה, מוצהרת בפשטות: ממיר בצד השרת יכול ללעוס קבצים גדולים ממה שהמכשיר שלכם יכול אי-פעם לעמוד בו. הגישה הזו לא יכולה. מה שהיא נותנת לכם בתמורה הוא שהקובץ שלכם לעולם לא עוזב את הידיים שלכם. לרוב המוחלט של מה שאנשים באמת ממירים, זו עסקה ששווה לעשות בלי מחשבה שנייה. לקובץ מפלצתי נדיר, זו מגבלה אמיתית, ואני מעדיף לספר לכם מלהעמיד פנים שהיא לא קיימת.
למה אני עדיין חושב שזו ברירת המחדל הנכונה
רוב ההמרות הן קבצים רגילים שמעולם לא היו צריכים לגעת בשרת מלכתחילה. ההעלאה תמיד הייתה שריד מעידן שבו דפדפנים לא ידעו לעשות את העבודה הזו בעצמם. עכשיו הם יודעים. אז ברירת המחדל השפויה התהפכה: תשאירו את הקובץ על המכונה שלכם, תעשו את העבודה מקומית, ותפנו לשרת רק בהזדמנות הנדירה שבה החומרה שלכם באמת לא עומדת בזה.
זה כל הרעיון מאחורי כל מה שכאן. זה אותו אתר שבניתי לעצמי אחרי אותו אחר צהריים לא-נוח אחד, כדי שלעולם לא אצטרך שוב למסור תמונה אישית לזר רק כדי לשנות את סיומת הקובץ. מתברר שמעולם לא הייתי צריך. גם אתם לא.
כתבות קשורות
למה אני ממיר PNG ל-WebP (ומתי דווקא לא)
PNG הוא פורמט מצוין לעריכה ובזבזני להחריד להפצה. הנה מה ש-WebP באמת חוסך לכם, איפה הוא לא חוסך כלום, והכלל האחד שאני אף פעם לא שובר.
PNG או JPG? כלל האצבע בן עשר השנים שבו אני מחליט
Lossless מול lossy, קצוות מול תצלומים, שקיפות מול כלום. שאלה פשוטה אחת אומרת לכם איזה פורמט הקובץ צריך להיות — עם טבלת גדלים אמיתית שמוכיחה זאת.
למה התמונות באייפון שלכם הן HEIC (ומתי פשוט להפוך אותן ל-JPG)
HEIC הוא פורמט טוב יותר שחצי מהרשת עדיין לא יודעת לפתוח. הנה למה Apple בחרה בו, מה באמת מוותרים בהמרה ל-JPG, ומתי אני לא טורח.
כל הפוסטים