עבודה עם תמונות ב PHP בקלות
כל מי שאי פעם נדרש לעבוד עם תמונות יודע שזה פשוט עבודה מעצבנת , לזהות את סוג הקובץ (jpg , gif,png וכד) לזהות רוחב גובה לחשב יחס בניהם ולהקטין ולהגדיל
ולעשות crop ועוד מלא דברים שפשוט מעצבן לעשות אותם , נמאס לכם מעבודה עם תמונות ? הנה הפתרון בשבילכם…….
לא ממזמן בניתי אפליקצייה של פייסבוק , והייתי צריך לעבוד עם התמונות להגדיל ולהקטין כל תמונה ל 3 סוגים שונים ופשוט לא היה לי עצבים לזה , אז לקחתי יוזמה והחלטתי לא להמציא את הגלגל
ולחפש מחלקה שתומכת ב OOP כמו שצריך ושעושה עבודה טובה ובכיף, אפשר לומר שהייתי מופתע.
אני שמח להציג מחלקה מעניינת ששוה מאד לעקוב אחריה שפשוט עושה חיים קלים ונקראת
PHPTHUMB
המחלקה פשוט פותרת כל כאב ראש שקשור בתמונות ועושה את זה בקלות לדוגמא :
1 2 3 4 | require_once '/path/to/ThumbLib.inc.php'; $thumb = PhpThumbFactory::create('test.jpg'); $thumb->resize(100, 100); $thumb->show(); |
ואם אתם רוצים להוריד תמונה מ URL ואז להקטין ולהציג , אין בעיה :
1 2 3 4 | require_once '/path/to/ThumbLib.inc.php'; $thumb = PhpThumbFactory::create('http://www.websupport.co.il/test.jpg'); $thumb->resize(100, 100); $thumb->show(); |
רוצים לשמור ולא להציג ? תשתמשו ב save במקום show ותוכלו לשמור
אחד הדברים שיותר אהבתי במחלקה הזאת זה שהיא תומכת במחלקות משורשרות (למי שלא יודע מה זה -הנה תזכרות קטנה איך לכתוב מחלקות משורשרות ב PHP )
כלומר שנוכל בקלות לשרשר פונקציות לדוגמא :
1 2 3 4 | require_once '/path/to/ThumbLib.inc.php'; $thumb = PhpThumbFactory::create('http://www.websupport.co.il/test.jpg') ->resize(100, 100) ->show(); |
אז בואו נעשה סקירה קלה של המחלקה ולצורך העניין נשתמש בתמונה הבאה :
![]()
בשביל להקטין אותה לגודל של 100X100 נשתמש בקוד הבא :
1 2 3 4 | require_once '/path/to/ThumbLib.inc.php'; $thumb = PhpThumbFactory::create('http://www.websupport.co.il/test.jpg') ->resize(100, 100) ->show(); |
אבל שימו לב התמונה תצא ככה :
![]()
אם שמתם לב התמונה היא לא בגודל של 100 על 100 אלא בעצם בגודל של 100 על 75, מה קרה כאן ?
הספרייה שמרה על הפרופורציות המקוריות של התמונה (על היחס בין הרוחב לגובה) והמשיכה את היחס בין הרוחב לגובה המקוריים וככה התמונה הקטנה לא מתעוותת , אם בכל זאת אתם רוצים תמונה בגודל של 100 על 100 הספרייה יודעת להקטין לגודל הקרוב ביותר ל 100 על 100 ואז מבצעת crop מהאמצע של התמונה, נשמע מסובך לא ? כל מה שתצטרכו לעשות זה רק להשתמש בפונקציה adaptiveResize והעבודה נעשתה לדומא :
1 2 3 4 | require_once '/path/to/ThumbLib.inc.php'; $thumb = PhpThumbFactory::create('http://www.websupport.co.il/test.jpg') ->adaptiveResize(175, 175) ->show(); |
והתוצאה שתתקבל היא :
![]()
שימו לב כמה אפשר לעשות עם שורת קוד אחת !.
המחלקה גם תומכת ב CROP ונותנת לנו שתי אפשרויות :
crop from center חותכת את התמונה מהמרכז החוצה לדוגמא :
1 2 3 4 | require_once '/path/to/ThumbLib.inc.php'; $thumb = PhpThumbFactory::create('http://www.websupport.co.il/test.jpg') ->cropFromCenter(200, 100) ->show(); |
ועבור הקטע קוד הזה נקבל את :
![]()
וגם נוכל להגדיר X ו Y לחתוך חלק מסויים (מצויין אם אתם בונים מנוע ב JS לעשות CROP לתמונות – כמו שיש בפייסבוק)
1 2 3 4 | require_once '/path/to/ThumbLib.inc.php'; $thumb = PhpThumbFactory::create('http://www.websupport.co.il/test.jpg') ->crop(100, 100, 300, 200) ->show(); |
והתמונה שתתקבל תהיה :
![]()
עוד אפשרוית שבאות מובנות הם סיבוב של תמונות לדוגמא :
סיבוב עבור 90 מעלות :
1 2 3 4 | require_once '/path/to/ThumbLib.inc.php'; $thumb = PhpThumbFactory::create('http://www.websupport.co.il/test.jpg') ->rotateImage('CW') ->show(); |
ייתן את התמונה הבאה :
![]()
רוצים להפוך את התמונה 180 מעלות ?
1 2 3 4 | require_once '/path/to/ThumbLib.inc.php'; $thumb = PhpThumbFactory::create('http://www.websupport.co.il/test.jpg') ->rotateImageNDegrees(180) ->show(); |
והתוצאה :
![]()
המחלקה יודעת להשתמש גם ב php-gd וגם ב imagemagic ככה שאתם לא צריכם ממש לדאוג מה יש לכם בשרת
המחלקה גם תומכת בפלאגינים וכרגע יש פלאגין רשמי אחד ליצירת השתקפות (אם תחכו קצת אני חושב שבקרוב יהיה גם פלאגין של להוסיף watermark לתמונות , וגם לבנות פלאגינים בעצמכם זה לא כזה סיפור)
בקיצור באמת עשו במחלקה הזאת עבודה טובה , כמו שאמרתי אני משתמש בה באפליקצייה שבניתי לפייסבוק והיא מתפקדת מצויין , ממליץ בחום.
לינק למחלקה , API של המחלקה , ושאר שטויות :
http://github.com/masterexploder/PHPThumb
מקווה שתהנו , אני נהנתי מאד , לקח לי 4 דקות ללמוד איך להשתמש בה וזה חסך לי בכיף כמה שעות של עבודה
ולכל הספקנים למיניהם זה מזכיר לי משפט שראיתי לפני כמה ימים :
"Reinventing the wheel is so 1999"
תהנו
האם ישנו צורך להתקין משהו?
אני מקבל הודעת שגיאה:
Bud1‡eflectgd_reflection.inc.phpinfoblob0ַמp�������������������������������� @€ @€ @€ @E‡DSDB ` @€ @€ @
Fatal error: Uncaught exception 'RuntimeException' with message 'Cannot show image, headers have already been sent' in /home/moti22/domains/meytar.net/public_html/newSite/gallery/phpthumb-latest/GdThumb.inc.php:569 Stack trace: #0 /home/moti22/domains/meytar.net/public_html/newSite/gallery/phpthumb-latest/examples/remote_image_resize.php(30): GdThumb->show() #1 {main} thrown in /home/moti22/domains/meytar.net/public_html/newSite/gallery/phpthumb-latest/GdThumb.inc.php on line 569
שים לב שאתה מקבל שגיאה של Cannot show image, headers have already been sent'
זה אומר שהדפסת משהו למסך לפני ההדפסה של התמונה
או שיש לך רווח בהתחלת הקובת לפני טאג הפתיחה של PHP
או שאם אתה עובד עם UTF8 כנראה שיש לך בקובץ BOM (שזה גם רווח שלא מוצג בעורך שלך )
לשאלתך אין צורך להתקין כלום המחלקה עובדת עם GD ועם IMAGEMAGIC שאלה סיפריות שבד"כ מותקנות כברירת מחדל עם ה PHP
תודה אבל זה קצת מוזר כי אני פותח את ה-examples שקיבלתי עם הורדת הקבצים – לא ערכתי כלום בקבצים:
http://www.meytar.net/newSite/gallery/phpthumb-latest/examples/crop_basic.php
תודה
נשמע לי ממש ממש מוזר, אולי השרת שלך שולח איזה משהו לפני ?
ד"א אם תחליף את ה SHOW ב SAVE זה ישמור את התמונה המבוקשת לשרת
אני לא נתקלתי בבעיה כזאת באמת שעבדתי בקלות ,
המלצה שלי
תקח את הקוד הבסיסי שמופיע בדוגמא הראשונה , כ INPUT תכניס לו איזה תמונה מהפייסבוק ותראה מה קורה
(יכול להיות פשוט שאחד הקבצים ב EXAMPLES דפוק וזה עושה את הבלגן = אבל הספרייה עובדת מצויין באחריות.)
יפה, מחלקה ממש טובה.. האמת אני יצרתי קוד כבר שמקטין את התמונה ושומר על הפורפורציות, לקח לי איזה חצי שעה-שעה בערך, ואם הייתי יודע על המחלקה הזו אז זה היה עוזר (:
תודה, פעם הבאה שאני אצטרך אני בטח אשתמש בה
אולי שאלה קצת היפוטטית ותשמע טיפשית
אני מתכנת ב PHP מספר שנים ובניתי כל מיני מערכת ניהול תוכן וכו' אבל מעולם לא למדתי מחלקות
עצלות כזאת? זה תמיד הפחיד אותי
בפוסט הזה אני רואה ש זה חשוב, אשמח לדעת למה עוד זה חשוב? נגיד אני בונה אתר ניהול תוכן בנוני
ואשמח לקבל לינקים ללמידה של מחלקות בעיברית
תודה
וואלה מגניב, תודה.
אני בדיוק בונה לי ספריה שתשרת אותי בהמשך ואני מאמין שחסכת לי גם קצת עבודה, או לפחות מחלקה אחת שאפשר לדלג עליה