תכונות ופונקציונליות
תכונות ופונקציונליות
דף זה מכסה את כל תחומי הפונקציונליות של Aspose.Imaging FOSS עבור .NET לזיהוי פורמט ולחיפוש בכותרות API, עם דוגמאות C# עובדות. הספרייה אף פעם אינה מפענחת נתוני פיקסלים — כל שיטה קוראת רק את כותרת הקובץ.
זיהוי פורמט
ImageProbe הוא נקודת הכניסה הסטטית. שלושה overloads מכסים נתיב קובץ, זרם, ומערך בתים גולמי:
using Aspose.Imaging.Foss;
var fromPath = ImageProbe.ProbeFile("photo.jpg");
var fromBytes = ImageProbe.Probe(byteArray);
var fromStream = ImageProbe.Probe(stream);
var formatOnly = ImageProbe.DetectFormat(byteArray); // ImageFormat only, no header parseהשתמש ב-DetectFormat כאשר אתה צריך רק לבחור על פי הפורמט; השתמש ב-Probe/ProbeFile כאשר אתה צריך גם ממדים, עומק ביטים, או ספירת פריימים.
קריאת מטא-נתוני הכותרת
ProbeFile/Probe מחזירים ImageInfo עם Width ניתנת לאפס, Height, BitDepth, ו-FrameCount — כל אחד ממולא רק כאשר כותרת הפורמט המוזוהה בפועל מכילה ערך זה:
var info = ImageProbe.ProbeFile("scan.dcm");
if (info.Width.HasValue && info.Height.HasValue)
{
Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}");
}Format (ערך enum של ImageFormat) תמיד מוגדר ברגע שהכותרת מזוהה — זהו השדה היחיד המובטח שמאוכלס.
הערות לפי פורמט
כמה פורמטים כוללים מוזרויות בכותרת ImageInfo מנרמל או מציג ישירות:
| פורמט | Behavior |
|---|---|
| GIF | FrameCount משקף את מספר המסגרות כאשר הקובץ מכיל מספר מסגרות; מושמט אם לא ניתן לקבוע את המספר |
| BMP | גובה שלילי בכותרת (סדר שורות מלמעלה למטה) מנורמל — Height מחזיר את הערך החיובי |
| DICOM | פענוח הכותרת מתמודד עם תחבירי העברה Implicit VR Little Endian ו-Explicit VR Little/Big Endian, ומחלץ שורות, עמודות וביטים שהוקצו |
// DICOM: rows -> Height, columns -> Width, bitsAllocated -> BitDepth,
// across any of the three common transfer syntaxes
var dicomInfo = ImageProbe.Probe(dicomBytes);
Console.WriteLine($"{dicomInfo.Width}x{dicomInfo.Height}, {dicomInfo.BitDepth}-bit");פורמטים נתמכים
כל 11 הפורמטים מזוהים באותה הצורה — ImageProbe מזהה את הפורמט וקורא מטא-נתוני כותרת; הוא לעולם לא מפענח או מקודד מחדש נתוני פיקסלים עבור אף אחד מהם. עם זאת, האכלוס של השדות באמת משתנה לפי פורמט — כל פורמט מגדיר Format, אך רק חלקם כוללים עומק ביטים או ספירת פריימים בכותרת שלהם:
| פורמט | רוחב / גובה | עומק ביט | מספר מסגרות |
|---|---|---|---|
| PNG | ✓ | ✓ | ✓ |
| JPEG | ✓ | ✓ | — |
| GIF | ✓ | — | ✓ |
| BMP | ✓ | ✓ | — |
| WebP | ✓ | — | — |
| ICO | ✓ | ✓ | ✓ |
| TIFF | ✓ | ✓ | ✓ |
| PSD | ✓ | ✓ | — |
| EMF | ✓ (מתוך גבולות) | — | — |
| WMF (ניתן להצבה) | ✓ (מתבסס על 96 DPI) | — | — |
| DICOM | ✓ (שורות/עמודות) | ✓ (BitsAllocated) | — |
כותרת שלא מזוהה מתורגמת ל-ImageFormat.Unknown במקום ליזום שגיאה. כמה פרטי אכלוס שדות בולטים: FrameCount של PNG הוא תמיד 1 (קבוע, לא זיהוי פריימים אמיתי של PNG מונפש); FrameCount של ICO הוא ספירה אמיתית של גדלי האייקון המוטמעים במדריך, וביט מימד 0 ברשומת מדריך ICO משמעותו 256 פיקסלים לפי המפרט של הפורמט; FrameCount של TIFF משקף הליכה מוגבלת של שרשרת ה-IFD של הקובץ (כל IFD הוא דף אחד); WMF שאינו נייד עדיין מזוהה כ-ImageFormat.Wmf אך מחזיר רק Format — המימדים מתמלאים רק עבור WMF נייד, דרך המרה קבועה של 96 DPI מגבולות היחידות-ל-אינץ’ של הכותרת; ל-EMF אין כלל שדה רוחב/גובה מפורש, ולכן ממדיו נגזרים ממרובע מרחב-המכשיר rclBounds במקום זאת.
עמיד בתכנון
ImageProbe לעולם לא מזריק שגיאה על קלט פגום או מקוצץ. במקום להרים יוצא מן הכלל, הוא מחזיר ImageInfo חלקי — Format מוגדר בכל פעם שמסמן פורמט הכותרת זוהה, אפילו כאשר שאר הקובץ נחתך או פגום:
byte[] truncated = fullFileBytes[..^3];
var info = ImageProbe.Probe(truncated);
// info.Format is still populated; other fields may be nullזה עושה זאת בטוח להריץ נגד הורדות לא מהימנות, חלקיות, או בתהליך, ללא try/catch סביב כל קריאה.
טיפים ושיטות מומלצות
- השתמש ב-
DetectFormatבמקוםProbeכאשר אתה צריך רק את הפורמט, ולא את המימדים - בדוק את
Width/Height/BitDepth/FrameCountעבורnullלפני השימוש בהם — הם אינם ממולאים עבור כל פורמט - העדף את
Probe(stream)על פני קריאת קובץ שלם למערך בתים ראשית כשעובדים עם קבצים גדולים ImageProbeהוא לחלוטין סטטי — ללא מופע, ללאIDisposable, ללא אובייקט קונפיגורציה
בעיות נפוצות
| בעיה | סיבה | תיקון |
|---|---|---|
Format הוא ImageFormat.Unknown | הכותרת אינה תואמת לאף אחד מ-11 הפורמטים המוכרים | אשר שהקובץ הוא אחד מ- PNG, JPEG, GIF, BMP, WebP, ICO, TIFF, PSD, EMF, WMF, או DICOM |
Width/Height הם null | הכותרת של הפורמט אינה מכילה את השדה הזה, או שהכותרת נחתכה לפני השדה הזה | בדוק תחילה את Format; לא כל שדה מתמלא עבור כל פורמט |
| גובה ה-BMP נראה חיובי באופן בלתי צפוי | קובץ המקור השתמש בגובה שלילי (מלמעלה למטה) בכותרתו | צפוי — ImageInfo.Height תמיד מנרמל לגודל החיובי |
FAQ
האם ImageProbe מפענח נתוני פיקסלים?
לא. כל שיטה קוראת רק את כותרת הקובץ — המימדים, עומק הביטים, וספירת הפריימים — ולא את תוכן הפיקסלים. פענוח והצגה הם מחוץ לתחום הספרייה הזו.
מה קורה אם אני מבצע בדיקה על קובץ פגום או מקוצץ?
ImageProbe אף פעם לא זורק חריגה עבור קלט פגום או מקוצץ. הוא מחזיר ImageInfo עם כל השדות שהוא הצליח לקבוע מהבתים הזמינים של הכותרת — Format מוגדר בכל פעם שסמן הפורמט עצמו זוהה.
האם אוכל לבדוק זרם שאינו ניתן לחיפוש?
כן. Probe(stream) מקבל גם זרמים ניתנים לחיפוש וגם זרמים שאינם ניתנים לחיפוש.
API Reference סיכום
| מחלקה / מתודה | תיאור |
|---|---|
ImageProbe.ProbeFile(path) | בדיקת קובץ לפי נתיב, מחזיר ImageInfo |
ImageProbe.Probe(stream) | בדיקת Stream (ניתן לחיפוש או לא) |
ImageProbe.Probe(data) | בדיקת byte[] גולמי |
ImageProbe.DetectFormat(stream) | החזר רק את ImageFormat עבור זרם |
ImageProbe.DetectFormat(data) | החזר רק את ImageFormat עבור byte[] |
ImageInfo | סוג תוצאה: Format, Width, Height, BitDepth, FrameCount |
ImageFormat | Enum: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom |