النواة API
النواة API
Aspose.Imaging FOSS للواجهة العامة الكاملة لـ .NET هي ثلاث فئات: ImageProbe (الواجهة الثابتة)، ImageInfo (قيمة النتيجة)، و ImageFormat (تعداد الصيغة). تغطي هذه الصفحة كيفية تجميعها كعقد، بما يتجاوز جولة كل ميزة في الميزات والوظائف.
عقد الفئات الثلاث
ImageProbe— ثابت، بدون حالة. كل استدعاء مستقل؛ لا شيء لتكوينه أو التخلص منه.ImageInfo— مختوم، غير قابل للتغيير. جميع الخصائص الخمس (Format,Width,Height,BitDepth,FrameCount) للقراءة فقط بمجرد إنشائها.ImageFormat— تعداد (enum) يحتوي على قيمة واحدة لكل تنسيق معترف به، بالإضافة إلىUnknown.
using Aspose.Imaging.Foss;
var info = ImageProbe.ProbeFile("photo.jpg");
ImageFormat format = info.Format; // always set
int? width = info.Width; // set only when the format's header carries itإنشاء ImageInfo مباشرةً
منشئ ImageInfo عام — يلزم فقط format، وكل معلمة أخرى تُفترض قيمتها null. هذا مفيد لاختبارات الوحدة التي تحتاج نتيجة بديلة دون فحص ملف حقيقي:
using Aspose.Imaging.Foss;
// Fake a PNG result for a test double, with no dimensions
var fakeInfo = new ImageInfo(ImageFormat.Png);
// Fake a fully-populated result
var fullInfo = new ImageInfo(ImageFormat.Gif, width: 64, height: 48, bitDepth: 8, frameCount: 3);لا توجد طريقة مقابلة لـ mutate an ImageInfo بعد الإنشاء — كل خاصية للقراءة فقط، لذا فإن النسخة المستكشفة أو المُنشأة آمنة للتداول وتخزينها مؤقتًا دون نسخ دفاعي.
اختيار التحميل الزائد المناسب
| Overload | استخدم عندما |
|---|---|
ImageProbe.ProbeFile(path) | لديك مسار ملف وتريد الـ ImageInfo الكامل |
ImageProbe.Probe(stream) | لديك بالفعل Stream مفتوح (قابل للتمرير أو لا) وتريد الـ ImageInfo الكامل |
ImageProbe.Probe(data) | لديك البايتات بالفعل في الذاكرة وتريد الـ ImageInfo الكامل |
ImageProbe.DetectFormat(stream) / (data) | أنت بحاجة فقط إلى التفرع بناءً على ImageFormat — تخطى تحليل الترويسة ما بعد توقيع الصيغة |
ProbeFile يفتح ويقرأ الملف نفسه — لا حاجة لفتح FileStream أولاً فقط لاستدعاء Probe(stream).
فحص الدليل دفعيًا
نظرًا لأن ImageProbe لا يرمي استثناءً أبدًا، يمكن لعملية مسح الدليل استدعاؤه في حلقة ضيقة دون try/catch لكل ملف:
using Aspose.Imaging.Foss;
foreach (var path in Directory.GetFiles("incoming"))
{
var info = ImageProbe.ProbeFile(path);
if (info.Format == ImageFormat.Unknown)
{
Console.WriteLine($"{path}: not a recognized image format, skipping");
continue;
}
Console.WriteLine($"{path}: {info.Format} {info.Width}x{info.Height}");
}أي ملف لا يتطابق رأسه مع أحد الصيغ الـ11 المعروفة يُحوَّل إلى ImageFormat.Unknown بدلاً من الرمي — الحلقة أعلاه لا تحتاج أبدًا إلى كتلة catch.
عقد عدم الرمي
هذا ليس سلوكًا عَرَضيًا — إنه جزء متعمد من عقد API. إذا تم قطع رأس تنسيق معترف به أو كان مشوهًا خلال عملية التحليل، فإن ImageProbe لا يزال يُعيد ImageInfo مع ضبط Format على التنسيق الذي تم التعرف عليه؛ لا يمرر استثناء تحليل إلى المستدعي. فقط Format مضمونة — عُد باقي الخصائص كاختيارية بغض النظر عن التنسيق المكتشف.
المشكلات الشائعة
| المشكلة | السبب | الإصلاح |
|---|---|---|
المكوّن ImageInfo لا يتطابق مع نتيجة فحص حقيقية | الكائنات المُنشأة يدويًا لا تتحقق من اتساق الحقول | استخدم الإنشاء اليدوي فقط للنسخ المزدوجة للاختبار، وليس كبديل عن فحص الملفات الحقيقية |
استدعاء Probe عندما يكفي DetectFormat | تحليل رؤوس غير ضروري عندما يلزم فقط التنسيق | استخدم DetectFormat إذا لم تقرأ أبداً Width/Height/BitDepth/FrameCount |
تنسيق Unknown لملف تتوقع أن يكون مدعومًا | الرأس لا يطابق أيًا من الـ 11 توقيعًا المعروفة، أو أن الملف بصيغة مختلفة تمامًا | تحقق من الملف مقابل قائمة الصيغ المدعومة |
FAQ
هل يمكنني إنشاء فئة فرعية من ImageInfo أو ImageProbe؟
لا. ImageInfo هو sealed وImageProbe هو static — لا أحد منهما مصمم لإنشاء فئات فرعية أو للتنفيذ عبر الوراثة.
هل ImageProbe آمن للخيوط؟
ImageProbe لا يحتفظ بحالة قابلة للتغيير بين الاستدعاءات — كل استدعاء إلى Probe أو ProbeFile أو DetectFormat يكون مستقلاً، مما يجعل الاستدعاءات المتزامنة من عدة خيوط آمنة.
هل أحتاج إلى التخلص من أي شيء؟
لا. ImageProbe لا يمتلك موارد IDisposable خاصة به. إذا قمت بتمرير Stream التي فتحتها بنفسك، فإنك تظل مسؤولاً عن التخلص من ذلك التدفق — Probe(stream) لا يغلقه.
API Reference ملخص
| الفئة / الطريقة | وصف |
|---|---|
ImageProbe.ProbeFile(path) | فحص ملف بالمسار |
ImageProbe.Probe(stream) | تحقق من Stream |
ImageProbe.Probe(data) | تحقق من byte[] |
ImageProbe.DetectFormat(stream) | تنسيق فقط، من Stream |
ImageProbe.DetectFormat(data) | تنسيق فقط، من byte[] |
ImageInfo(format, width, height, bitDepth, frameCount) | منشئ عام — مطلوب فقط format |
ImageInfo.Format / .Width / .Height / .BitDepth / .FrameCount | خصائص النتيجة للقراءة فقط |
ImageFormat | Enum: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom |