مقدمة
Aspose.Imaging FOSS لـ .NET هي مكتبة مجانية، مرخصة بموجب MIT، ومفتوحة المصدر للمطورين .NET الذين يحتاجون إلى معرفة ما هو ملف صورة is — تنسيقها، أبعادها، عمق البت، وعدد الإطارات — دون دفع تكلفة فك ترميزها. الثابت ImageProbe الفئة هي نقطة الدخول: ProbeFile(path) يقرأ من القرص، Probe(stream) and Probe(data) يقبل تدفقًا أو مصفوفة بايت، و DetectFormat(stream) / DetectFormat(data) يرجع الـ ImageFormat قيمة التعداد دون بناء كامل ImageInfo، للمتصلين الذين يحتاجون فقط إلى التفرّع بناءً على التنسيق. كل طريقة فحص تُعيد الـ 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 (قيمة تعداد 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 صيغ، بما في ذلك ثلاثة لا يكتشفها أي شيء آخر في مساحة .NET المفتوحة المصدر
PNG، JPEG، GIF، BMP، WebP (lossy, lossless, and extended)، ICO، TIFF، PSD، EMF، WMF، و DICOM. تعبئة الحقول تختلف حسب التنسيق عن قصد، وليس بسبب الإهمال — PNG يحمل العرض، الارتفاع، وعمق البت، and عدد الإطارات (مع أنه FrameCount هو مُبرمج ثابتًا 1، ليس اكتشافًا حقيقيًا لإطارات PNG المتحركة); JPEG و BMP يحملان الأبعاد وعمق البت لكنهما لا يحملان عدد الإطارات؛ WebP يحمل فقط الأبعاد؛ ICO’s FrameCount هو عدد حقيقي لأحجام الأيقونات المضمنة في دليلها، و a 0 البايت في حقل الأبعاد لمدخل دليل ICO يعني 256 بكسل، وفقًا لمواصفات التنسيق؛ 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 — منتج المؤسسة.