יצירת Thumbnail (צלמיות) בקלות

10 בSeptember 2009

תגיות: , ,
2 תגובות

אם רוצים ליצור צלמית של תמונה (גרסא מוקטנת שלה), ניתן כמובן לחתוך אותה באופן ידני. אולם, למי שלא מכיר (והרבה, כנראה, לא מכירים) הפונקציונאליות הזאת כבר מובנת ב BCL במחלקה System.Drawing.Image.

השימוש במתודה הזאת, GetThumbnailImage מאד פשוט. הנה לדוגמא קוד של Console Application שיוצר גרסא מוקטנת לכל התמונות בפורמט jpg שבתיקייה:

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

   1: ...

   2: using System.Drawing;

   3: using System.IO;

   4: ...

   5:  

   6: string dir = @"C:\Users\Public\Pictures\Sample Pictures";

   7: int height = 60;

   8: int width = 60;

   9: string[] Images = Directory.GetFiles(dir, "*.jpg");

  10: foreach (var image in Images)

  11: {

  12:     Image.FromFile(image)

  13:         .GetThumbnailImage(width, height, delegate() { return false; }, IntPtr.Zero)

  14:         .Save(string.Format(@"c:\tmp\{0}",Path.GetFileNameWithoutExtension(image) + "_thumb.jpg"));

  15: }

בשורות 6-8 אני מגדיר hard-coded את המידע שאני רוצה (dir היא תיקיית התמונות המקורית, ו height ו width מעידים על עצמם).

בשורה 9, אני מקבל את כל הקבצים שהסיומת שלהם jpg ונמצאים בתיקייה שציינתי.

לאחר מכן, אני עובד על כל הקבצים כאשר, בשורות 12-14 אני מבצע את הדברים הבאים: עבור כל נתיב, אני מקבל System.Drawing.Image. ובאמצעות המתודה GetThumbnailImage (שמקבלת רוחב, גובה, delegate ואת הערך של IntPtr.Zero שחייב להיות ככה) אני מקבל אובייקט Image נוסף, המכיל את התמונה המוקטנת, שאותו אני שומר לדיסק.

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

בהצלחה.

—————————-

תודה, תודה, תודה לשלומי בן שמואל שהמליץ לי על התוסף הזה לכתיבת קוד. סוף סוף משהו שבאמת עובד!

הוסף תגובה
facebook linkedin twitter email

Leave a Reply

Your email address will not be published. Required fields are marked *

2 תגובות

  1. Shlomo10 בSeptember 2009 ב 20:26

    מגניב,

    לגבי תוסף הקוד, אולי כדאי שתתן לינק אליו – איך משתמשים בו וכו’.

    חוץ מזה אני חושב שכדאי שתגדיל את הפונט של הקוד

    Reply
  2. Shlomo25 בSeptember 2009 ב 16:18

    היי, תוכל לשתף אותנו איך מגיעים לתוסף הזה.
    שלמה

    Reply