ویژگیها و قابلیتها
ویژگیها و عملکردها
این صفحه تمام حوزههای ویژگی Aspose.Imaging FOSS برای .NET را که مربوط به تشخیص قالب و بررسی سرآیند API است، همراه با مثالهای کاری C# پوشش میدهد. این کتابخانه هرگز دادههای پیکسل را رمزگشایی نمیکند — هر متد فقط سرآیند فایل را میخواند.
تشخیص قالب
ImageProbe نقطه ورودی ایستا است. سه overload مسیر فایل، یک جریان، و یک آرایه بایت خام را پوشش میدهند:
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");قالبهای پشتیبانیشده
تمام ۱۱ قالب بهیکروش شناسایی میشوند — 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 به معنای ۲۵۶ پیکسل طبق مشخصات قالب است؛ FrameCount در TIFF بازتاب یک پیمایش محدود زنجیره IFDهای فایل است (هر IFD یک صفحه است)؛ WMF غیرقابل قرارگیری همچنان بهدرستی به عنوان ImageFormat.Wmf شناسایی میشود اما فقط Format را برمیگرداند — ابعاد فقط برای WMF قابل قرارگیری پر میشوند، از طریق تبدیل ثابت ۹۶ 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 |