תכונות ופונקציונליות

תכונות ופונקציונליות

תכונות ופונקציונליות

דף זה מכסה את כל תחומי הפונקציונליות של 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
GIFFrameCount משקף את מספר המסגרות כאשר הקובץ מכיל מספר מסגרות; מושמט אם לא ניתן לקבוע את המספר
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
ImageFormatEnum: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom

ראה גם

 עברית