כיצד לעבוד עם Aspose.Imaging FOSS Core API ב-.NET
Aspose.Imaging FOSS עבור המשטח הציבורי של .NET מורכב משלוש מחלקות: ImageProbe, ImageInfo, ו-ImageFormat. מדריך זה מלווה את תהליך התקנת החבילה והשימוש בשלוש יחד כדי לזהות פורמט ולקרוא מטא-נתוני כותרת מקובץ, זרם, וממערך בתים.
מדריך שלב אחר שלב
שלב 1: התקנת החבילה
git clone https://github.com/aspose-imaging-foss/Aspose.Imaging-FOSS-for-.NET.git
cd Aspose.Imaging-FOSS-for-.NET
dotnet buildהחבילה מכוונת ל-net8.0 ול-netstandard2.0 ואין לה תלות חיצונית בזמן ריצה.
שלב 2: ייבא את המרחב השם
הוסף הוראת using אחת — היא חושפת את ImageProbe, ImageInfo ו-ImageFormat, את כל משטח API, ולכן אין צורך לייבא דבר נוסף:
using Aspose.Imaging.Foss;שלב 3: בדיקת קובץ לפי נתיב
ImageProbe.ProbeFile קורא רק את הכמות המינימלית של כותרת הקובץ כדי למלא תוצאה של ImageInfo — הוא אף פעם אינו מפענח נתוני פיקסלים:
var info = ImageProbe.ProbeFile("photo.jpg");
Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}, {info.BitDepth}-bit");שלב 4: בדיקת זרם או מערך בתים
כאשר התמונה כבר בזיכרון או הגיעה מזרם (העלאה, תגובת רשת), השתמש במעולות שמקבלות אותם ישירות במקום לכתוב קובץ זמני תחילה:
byte[] bytes = File.ReadAllBytes("photo.jpg");
var infoFromBytes = ImageProbe.Probe(bytes);
using var stream = File.OpenRead("photo.jpg");
var infoFromStream = ImageProbe.Probe(stream);Probe(stream) עובד עם זרמים שניתנים לחיפוש וגם עם זרמים שלא ניתנים לחיפוש.
שלב 5: השתמש ב-DetectFormat כאשר אתה צריך רק את הפורמט
אם אתה רק צריך לבצע סניף על פי הפורמט ואינך צריך ממדים, עומק ביטים או ספירת פריימים, DetectFormat מדלג על שאר ניתוח הכותרת:
var format = ImageProbe.DetectFormat(bytes);
if (format == ImageFormat.Dicom)
{
// route to DICOM-specific handling
}שלב 6: קרא את השדות הניתנים לאפס ImageInfo בצורה בטוחה
Width, Height, BitDepth ו-FrameCount ניתנים לאפס — הם מתמלאים רק כאשר כותרת הפורמט שהתגלה אכן מכילה את הערך הזה. Format הוא השדה היחיד שתמיד מוגדר ברגע שהכותרת מזוהה:
var info = ImageProbe.ProbeFile("scan.dcm");
if (info.Width.HasValue && info.Height.HasValue)
{
Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}");
}
else
{
Console.WriteLine($"{info.Format}: dimensions not available in this header");
}בעיות נפוצות ופתרונות
הפורמט מוצג כ ImageFormat.Unknown. כותרת הקובץ אינה תואמת לאף אחד מ-11 הפורמטים המוכרים (PNG, JPEG, GIF, BMP, WebP, ICO, TIFF, PSD, EMF, WMF, DICOM). ודא שהקובץ הוא באמת אחד מהפורמטים הללו — ImageProbe לעולם לא זורק עבור כותרת לא מוכרת, הוא מדווח Unknown במקום זאת.
Width/Height are null למרות Format מוגדר. לא כל כותרת של פורמט מכילה כל שדה, וקובץ מקוצץ עשוי לחתוך לפני בתים של שדה. בדוק Format קודם, ואז התייחס לשאר כלא חובה.
Calling Probe when DetectFormat היה עושה. Probe and ProbeFile לנתח את הכותרת המלאה; DetectFormat קורא רק מספיק כדי לזהות את הפורמט. השתמש DetectFormat אם אתה אף פעם לא קורא Width/Height/BitDepth/FrameCount.
מצפה לנתוני פיקסלים מפוענחים. ImageProbe אף פעם לא מפענח, מציג, או ממיר תוכן תמונה — הוא קורא רק מטא-נתוני כותרת. פענוח ופעולות ברמת פיקסלים דורשים את ערכת הפיתוח המסחרית Aspose.Imaging SDK.
שאלות נפוצות
מה קורה אם אני בוחן קובץ מקוצץ או פגום?
ImageProbe לעולם לא זורק שגיאה על קלט פגום או מקוצץ. הוא מחזיר ImageInfo חלקי — Format מוגדר בכל פעם שסימן הפורמט של הכותרת זוהה, אפילו אם שאר הקובץ נחתך בקיצור.
האם ImageProbe בטוח לשימוש מרובה חוטים?
כן. ImageProbe הוא סטטי ואינו מחזיק מצב ניתן לשינוי בין קריאות, ולכן קריאות מקבילות ממספר חוטים הן בטוחות.
האם אני יכול לבנות ImageInfo ישירות, ללא בדיקת קובץ אמיתי?
כן. הבונה של ImageInfo הוא ציבורי ודורש רק format — שימושי לבניית כפילויות בדיקה: new ImageInfo(ImageFormat.Png, width: 64, height: 48).
האם אני צריך לשחרר משהו?
לא. ImageProbe אינו מחזיק שום משאבי IDisposable משלו. אם אתה מעביר Stream שפתחת בעצמך, אתה נשאר אחראי לפינוי שלו.