مقدمه
Aspose.Imaging FOSS برای .NET یک کتابخانه رایگان، تحت مجوز MIT، متنباز برای توسعهدهندگان .NET است که نیاز دارند بدانند یک فایل تصویر is — قالب آن، ابعاد، عمق بیت و تعداد فریم — بدون پرداخت هزینهٔ رمزگشایی آن. کلاس استاتیک ImageProbe نقطهٔ ورود است: ProbeFile(path) از دیسک میخواند، Probe(stream) and Probe(data) یک استریم یا آرایه بایت میپذیرد و DetectFormat(stream) / DetectFormat(data) باز میگرداند ImageFormat مقدار enum بدون ساختن یک ImageInfo، برای فراخوانندگانی که فقط نیاز به تصمیمگیری بر اساس قالب دارند. هر روش probe یک ImageInfo شیء با nullable Width, Height, BitDepth، و FrameCount ویژگیها، تنها زمانی پر میشوند که هدر فرمت شناساییشده واقعاً آن مقدار را داشته باشد.
این ابزار بهطور عمدی محدود است و همین هدف است. این ابزار پیکسلها را رمزگشایی نمیکند، تصویرها را رندر نمیکند یا بین فرمتها تبدیل نمیکند — برای این کار، محصول تجاری Aspose.Imaging برای .NET گزینهٔ مناسب است (در زیر تحت بخش منبع باز و مجوزدهی لینک شده). کاری که Aspose.Imaging FOSS برای .NET انجام میدهد، کاری بسیار کوچکتر و رایجتر است: پاسخ دادن به سؤال «این چه فرمتیه و چقدر بزرگه؟» با سرعت و ایمنی حداکثری، برای مسائلی که رمزگشایی کامل صرفنظر از کار است: اعتبارسنجی یک بارگذاری، اندازهگیری طرح بندانگشتی، بررسی دستهای از فایلهای مخلوط، یا خواندن فیلدهای هدر 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 قابلnull نشان میدهد. «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 فرمت، شامل سه مورد که در فضای .NET متن باز هیچ چیز دیگری تشخیص نمیدهد
PNG، JPEG، GIF، BMP، WebP (lossy، lossless، و extended)، ICO، TIFF، PSD، EMF، WMF، و DICOM. پر شدن فیلدها عمداً بر حسب فرمت متفاوت است، نه بهدلیل حذف — PNG شامل عرض، ارتفاع، عمق بیت است، and تعداد فریم (اگرچه FrameCount یک مقدار سختکد شده 1، نه تشخیص واقعی فریمهای animated-PNG)؛ FrameCount یک شمارش واقعی از اندازههای آیکونهای جاسازیشده در فهرست آن است، و یک 0 بایت در فیلد ابعاد یک ورودی دایرکتوری ICO به معنای ۲۵۶px است، طبق مشخصات فرمت؛ TIFF’s FrameCount بازتابدهنده یک مسیر محدود در زنجیره IFD فایل است، یک IFD برای هر صفحه.
سه تا از این یازده — PSD، EMF/WMF و DICOM — هیچ تشخیصگر دیگر رایگان و متن باز .NET که ما از آن آگاه باشیم ندارند، که بخشی واقعی از دلیل وجود این کتابخانه است.
WMF و EMF: دو فرمت قدیمی، دو محدودیت متفاوت
WMF غیرقابلقابلیت-جابجایی همچنان بهدرستی به عنوان ImageFormat.Wmf شناسایی میشود، اما فقط WMF قابلقابلیت-جابجایی ابعاد را پر میکند — که از حدود واحد-پرو-اینچ هدر با استفاده از تبدیل ثابت ۹۶ DPI استخراج میشود، زیرا خود WMF هیچ اندازهٔ پیکسل مطلقی را حمل نمیکند. EMF اصلاً فیلد واضح عرض/ارتفاع ندارد؛ ابعاد آن بهجای آن از مستطیل فضایدستگاه rclBounds در هدر EMF میآید. هر دو بهراستی در ImageInfo منعکس میشوند: وقتی مقداری قابل استخراج نیست، ویژگی بهجای حدس زدن به وضعیت null باقی میماند.
تحلیل هدر DICOM بدون Viewer
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 تمام ۱۱ فرمت زیر را شامل میشود و متادادههای سطح سرصفحه را میخواند — دادههای پیکسل را رمزگشایی نمیکند، بنابراین قابلیت “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 — محصول سازمانی مراجعه کنید.