ליבה API
ליבה API
Aspose.Imaging FOSS עבור כל השטח הציבורי של .NET הוא שלוש מחלקות: ImageProbe (המחזית הסטטית), ImageInfo (ערך התוצאה), ו ImageFormat (ה-enum של הפורמט). עמוד זה מכסה כיצד הם מתאימים יחד כחוזה, מעבר לסיור לפי תכונה ב תכונות ופונקציונליות.
החוזה בעל שלוש המחלקות
ImageProbe— סטטי, חסר מצב. כל קריאה היא עצמאית; אין דבר להגדרה או להסרה.ImageInfo— סגור, בלתי ניתן לשינוי. כל חמשת המאפיינים (Format,Width,Height,BitDepth,FrameCount) הם קריאה בלבד לאחר הבנייה.ImageFormat— enum עם ערך אחד לכל פורמט מוכר, ועודUnknown.
using Aspose.Imaging.Foss;
var info = ImageProbe.ProbeFile("photo.jpg");
ImageFormat format = info.Format; // always set
int? width = info.Width; // set only when the format's header carries itבניית ImageInfo ישירות
הקונסטרוקטור של ImageInfo ציבורי — נדרש רק format, וכל פרמטר אחר מקבל ערך ברירת מחדל של null. זה מועיל לבדיקות יחידה שצריכות תוצאה מחליפה מבלי לחקור קובץ אמיתי:
using Aspose.Imaging.Foss;
// Fake a PNG result for a test double, with no dimensions
var fakeInfo = new ImageInfo(ImageFormat.Png);
// Fake a fully-populated result
var fullInfo = new ImageInfo(ImageFormat.Gif, width: 64, height: 48, bitDepth: 8, frameCount: 3);אין דרך מתאימה ל mutate an ImageInfo לאחר בנייה — כל מאפיין הוא קריאה בלבד, ולכן מופע שנבדק או נבנה הוא בטוח להעברה ולשמירה במטמון ללא צורך בהעתקה מגנה.
בחירת העומס הנכון
| Overload | השתמש כאשר |
|---|---|
ImageProbe.ProbeFile(path) | יש לך נתיב קובץ ואתה רוצה את ה-ImageInfo המלא |
ImageProbe.Probe(stream) | כבר יש לך Stream פתוח (ניתן לחיפוש או לא) ואתה רוצה את ה-ImageInfo המלא |
ImageProbe.Probe(data) | כבר יש לך את הבייטים בזיכרון ואתה רוצה את ה-ImageInfo המלא |
ImageProbe.DetectFormat(stream) / (data) | אתה רק צריך לבצע סניף על ImageFormat — לדלג על ניתוח הכותרת מעבר לחותמת הפורמט |
ProbeFile פותח וקורא את הקובץ בעצמו — אין צורך לפתוח FileStream קודם רק כדי לקרוא ל-Probe(stream).
סריקה קבוצתית של תיקייה
מאחר ש-ImageProbe לעולם לא זורק חריגה, סריקת תיקייה יכולה לקרוא לו בלולאה צפופה ללא try/catch לכל קובץ:
using Aspose.Imaging.Foss;
foreach (var path in Directory.GetFiles("incoming"))
{
var info = ImageProbe.ProbeFile(path);
if (info.Format == ImageFormat.Unknown)
{
Console.WriteLine($"{path}: not a recognized image format, skipping");
continue;
}
Console.WriteLine($"{path}: {info.Format} {info.Width}x{info.Height}");
}כל קובץ שהכותרת שלו אינה תואמת לאחד מ-11 הפורמטים המוכרים יוחלף ב-ImageFormat.Unknown במקום לזרוק חריגה — הלולאה שלמעלה לעולם אינה זקוקה לחסימת catch.
החוזה של “לעולם לא זורק”
זה לא התנהגות מקרית — זה חלק מכוון של חוזה API. אם כותרת של פורמט מוכר נחתכת או פגומה בחלק מהפרסינג, ImageProbe עדיין מחזירה ImageInfo עם Format מוגדר לפורמט שהיא זיהתה; היא לא מעבירה חריגת ניתוח למזמין. רק Format מובטחת — יש להתייחס לכל שאר המאפיינים כאופציונליים ללא קשר לאיזה פורמט זוהה.
בעיות נפוצות
| בעיה | סיבה | תיקון |
|---|---|---|
ה-ImageInfo שנוצר אינו תואם תוצאה אמיתית של מדד | מופעים שנבנו ידנית אינם מאמתים עקביות בין השדות | השתמשו בבנייה ידנית רק עבור תחליפי מבחן, ולא כתחליף לבדיקת קבצים אמיתיים |
קריאה ל-Probe כאשר DetectFormat היה מספיק | פענוח כותרת מיותר כאשר רק הפורמט נדרש | השתמש ב-DetectFormat אם לעולם לא קוראים Width/Height/BitDepth/FrameCount |
פורמט Unknown עבור קובץ שאתה מצפה שהוא נתמך | הכותרת אינה תואמת לאף אחת מ-11 החתימות המזוהות, או שהקובץ הוא פורמט שונה לחלוטין | אמת את הקובץ מול ה רשימת הפורמטים הנתמכים |
FAQ
האם ניתן ליצור מחלקה נגזרת מ-ImageInfo או מ-ImageProbe?
לא. ImageInfo הוא sealed ו-ImageProbe הוא static — אף אחד מהם אינו מיועד לירושה או ליצירת מופע באמצעות ירושה.
האם ImageProbe בטוח בתהליכים מרובים?
ImageProbe לא מחזיק במצב ניתן לשינוי בין קריאות — כל קריאה ל-Probe, ProbeFile או DetectFormat היא בלתי תלויה, מה שהופך קריאות מקבילות ממספר ת׳רדים לבטוחות.
האם אני צריך לשחרר משהו?
לא. ImageProbe אין לו משאבי IDisposable משלו. אם אתה מעביר Stream שפתחת בעצמך, אתה נשאר אחראי לפינוי הזרם — Probe(stream) אינו סוגר אותו.
API Reference סיכום
| מחלקה / מתודה | תיאור |
|---|---|
ImageProbe.ProbeFile(path) | בדוק קובץ לפי נתיב |
ImageProbe.Probe(stream) | בדוק Stream |
ImageProbe.Probe(data) | בדוק byte[] |
ImageProbe.DetectFormat(stream) | פורמט בלבד, מ-Stream |
ImageProbe.DetectFormat(data) | פורמט בלבד, מ-byte[] |
ImageInfo(format, width, height, bitDepth, frameCount) | בונה ציבורי — רק format נדרש |
ImageInfo.Format / .Width / .Height / .BitDepth / .FrameCount | מאפייני תוצאה לקריאה בלבד |
ImageFormat | Enum: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom |