הקדמה
Aspose.Imaging FOSS עבור .NET היא ספרייה חינמית, ברישיון MIT, וקוד פתוח עבור מפתחים .NET שצריכים לדעת מהו קובץ תמונה is — הפורמט שלו, המימדים, עומק הביטים, ומספר הפריימים — מבלי לשאת את עלות הפענוח שלו. הסטטית ImageProbe המחלקה היא נקודת הכניסה: ProbeFile(path) קוראת מהדיסק, Probe(stream) and Probe(data) מקבלת זרם או מערך בתים, ו DetectFormat(stream) / DetectFormat(data) מחזירה את ImageFormat ערך enum ללא בניית ImageInfo, עבור קוראים שצריכים רק להתבסס על הפורמט. כל שיטת בדיקה מחזירה ImageInfo אובייקט עם nullable Width, Height, BitDepth, ו FrameCount מאפיינים, שמאוכלסים רק כאשר כותרת הפורמט שמזוהה בפועל נושא ערך זה.
זהו כלי מכוון לצורך צר במיוחד, וזה בדיוק המטרה. הוא לא מפענח פיקסלים, אינו מציג תמונות, ולא ממיר בין פורמטים — עבור זאת, המוצר המסחרי Aspose.Imaging עבור .NET הוא הבחירה הנכונה (מקושר למטה תחת קוד פתוח ורישוי). מה שה-Aspose.Imaging FOSS עבור .NET עושה הוא משימה הרבה יותר קטנה והרבה יותר נפוצה של מענה על השאלה “what format is this, and how big is it?” במהירות ובבטחה המרבית, עבור סוג הבעיה שבה פענוח מלא יהיה עבודה מבוזבזת: אימות העלאה, חישוב גודל פריסת תמונות ממוזערות, מיון אצווה של קבצים מעורבים, או קריאת שדות כותרת DICOM לבדיקה מקדימה.
הספרייה ברישיון MIT ללא תלות חיצונית ומיועדת גם ל-netstandard2.0 וגם ל-net8.0 — חינמית לשימוש קוד פתוח וגם מסחרי, ללא תמלוגים או הגבלות על הפצה.
תכונות מרכזיות
שלוש דרכים לחקור קובץ
ImageProbe מציע נקודות כניסה של נתיב קובץ, זרם ומערך בתים, כך שהוא מתאים לכל מקום שבו נתוני התמונה כבר קיימים בצינור העבודה שלכם — על הדיסק, כבר בזיכרון, או מגיעים דרך הרשת. DetectFormat מדלג על בניית ImageInfo מלאה כאשר אתם זקוקים רק לבחירת פורמט.
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
תוצאות מובנות, כנות
ImageInfo מציג Format (ערך enum של ImageFormat, המוגדר תמיד ברגע שהכותרת מזוהה) לצד Width ניתנת לאפס, Height, BitDepth, ו-FrameCount. “Nullable” עושה עבודה אמיתית כאן: האכלת השדות משתנה באמת לפי פורמט, ו-ImageInfo אף פעם לא ממציא ערך שהכותרת של הפורמט לא נושאת. בדיקה של null לפני השימוש היא הדפוס הנכון, ולא מחשבה מגנה אחרי-זה.
var info = ImageProbe.ProbeFile("scan.dcm");
if (info.Width.HasValue && info.Height.HasValue)
{
Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}");
}
11 פורמטים, כולל שלושה שאין להם שום דבר אחר שה-FOSS .NET Space מזהה
PNG, JPEG, GIF, BMP, WebP (lossy, lossless, and extended), ICO, TIFF, PSD, EMF, WMF, and DICOM. האוכלוסייה של השדות שונה לפי פורמט במכוון, ולא עקב השמטה — PNG כולל רוחב, גובה, עומק סיביות, and מספר מסגרות (אם כי FrameCount הוא קודקוד קבוע 1, לא זיהוי מסגרת animated-PNG אמיתי); JPEG ו-BMP כוללים ממדים ועומק סיביות אך לעולם לא מספר מסגרות; WebP כולל רק ממדים; של ICO FrameCount הוא ספירה אמיתית של גדלי האיקונים המוטמעים בתיקייה שלו, ו- 0 בייט בשדה המימד של רשומת ספרייה ב-ICO משמעותו 256px, לפי מפרט הפורמט; של TIFF’s FrameCount משקף הליכה מוגבלת של שרשרת ה-IFD של הקובץ, IFD אחד לכל דף.
שלושה מתוך האחת-עשרה — PSD, EMF/WMF, ו-DICOM — אין להם מגלה .NET חופשי וקוד פתוח אחר שמוכר לנו, וזה חלק אמיתי מהסיבה שהספרייה הזו קיימת.
WMF ו-EMF: שני פורמטים מדור קודם, שני מגבלות שונות
WMF לא-ניתן למיקום עדיין מזוהה נכון כ-ImageFormat.Wmf, אך רק WMF ניתן למיקום ממלא ממדים — נגזרים ממגבלות היחידות-ב-אינץ’ של הכותרת דרך המרה קבועה של 96 DPI, מכיוון שה-WMF עצמו אינו נושא גודל פיקסלים מוחלט. ל-EMF אין כלל שדה רוחב/גובה מפורש; הממדים שלו מגיעים ממרובע מרחב-התקן rclBounds בכותרת ה-EMF במקום זאת. שני המקרים משקפים בכנות ב-ImageInfo: כאשר ערך לא ניתן לגזירה, המאפיין נשאר null במקום לנחש.
פענוח כותרת DICOM ללא מציג
ImageProbe קוראת כותרות DICOM ברמות Implicit VR Little Endian ו-Explicit VR Little/Big Endian, ומחלצת Rows אל Height, Columns אל Width, ו-BitsAllocated אל BitDepth — ללא צורך במציג DICOM או בתלות חיצונית בתמונות. הניתוח שמרני במוּדע: רכיב רצף ללא אורך מוגדר עוצר את ההליכה במקום לנחש את תוכנו, ולכן קובץ DICOM שמובן חלקית מתדרדר ל-ImageInfo חלקי במקום ל-אחד שגוי.
אף פעם אינו זורק על קלט פגום או מקוצר
Probe נבנה לקבצים לא מהימנים, חלקיים או בתעופה. אם קובץ תואם לחתימת פורמט אך הכותרת שלו אינה ניתנת לפענוח במלואה — הורדה מקוצרת, העלאה פגומה — התוצאה מכילה רק את ה-Format שהתגלה במקום יוצא מן הכלל.
byte[] truncated = fullFileBytes[..^3];
var info = ImageProbe.Probe(truncated);
// info.Format is still populated; other fields may be null
התחלה מהירה
התקן את החבילה, ואז סרוק קובץ מהדיסק כדי לקרוא את הפורמט המזוהה, הממדים, עומק הביטים ומספר הפריימים בקריאה אחת, ולאחר מכן בצע בדיקת פורמט בלבד באמצעות הבייטים הגולמיים:
git clone https://github.com/aspose-imaging-foss/Aspose.Imaging-FOSS-for-.NET.git
cd Aspose.Imaging-FOSS-for-.NET
dotnet buildusing Aspose.Imaging.Foss;
var info = ImageProbe.ProbeFile("photo.jpg");
Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}, {info.BitDepth}-bit, " +
$"{info.FrameCount ?? 0} frame(s)");
// Format-only detection when dimensions aren't needed
var bytes = File.ReadAllBytes("photo.jpg");
var format = ImageProbe.DetectFormat(bytes);
פורמטים נתמכים
Aspose.Imaging FOSS עבור .NET detects כל 11 הפורמטים שלמטה וקורא מטא-נתונים ברמת הכותרת — הוא לא מפענח נתוני פיקסלים, ולכן אין יכולת “write” לדווח עליה. מילוי השדות משתנה לפי פורמט; ראה את הפירוט המפורט ב-תכונות מרכזיות למעלה.
| פורמט | הרחבה | Detected | רוחב / גובה | עומק סיביות | מספר מסגרות |
|---|---|---|---|---|---|
| PNG | .png | ✓ | ✓ | ✓ | ✓ |
| JPEG | .jpg / .jpeg | ✓ | ✓ | ✓ | — |
| GIF | .gif | ✓ | ✓ | — | ✓ |
| BMP | .bmp | ✓ | ✓ | ✓ | — |
| WebP | .webp | ✓ | ✓ | — | — |
| ICO | .ico | ✓ | ✓ | ✓ | ✓ |
| TIFF | .tif / .tiff | ✓ | ✓ | ✓ | ✓ |
| PSD | .psd | ✓ | ✓ | ✓ | — |
| EMF | .emf | ✓ | ✓ (מתחום) | — | — |
| WMF | .wmf | ✓ | ✓ (ניתן להצבה בלבד, 96 DPI) | — | — |
| DICOM | .dcm | ✓ | ✓ (שורות/עמודות) | ✓ (BitsAllocated) | — |
קוד פתוח ורישוי
Aspose.Imaging FOSS עבור .NET הוא ברישיון MIT ללא תלות חיצונית. רישיון MIT מאפשר שימוש הן בפרויקטים קוד פתוח והן בפרויקטים מסחריים ללא תמלוגים או מגבלות על הפצה מחדש. הקוד המקור זמין ב-GitHub. הוא מוגדר בכוונה לזיהוי פורמט בלבד — לפענוח, עריכה או המרה של פורמטים אלה של תמונות, ראו Aspose.Imaging עבור .NET — מוצר ארגוני.