هسته API
API اصلی
Aspose.Imaging FOSS برای سطح عمومی کامل .NET شامل سه کلاس است: ImageProbe (واسط ثابت)، ImageInfo (مقدار نتیجه)، و ImageFormat (enum قالب). این صفحه توضیح میدهد که چگونه اینها بهعنوان یک قرارداد با هم ترکیب میشوند، فراتر از تور ویژگی-به-ویژگی در ویژگیها و کارکردها.
قرارداد سه کلاس
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 مناسب
| 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}");
}هر فایلی که هدر آن با یکی از ۱۱ قالب شناختهشده مطابقت نداشته باشد به ImageFormat.Unknown تبدیل میشود بهجای اینکه استثنا بیندازد — حلقهٔ بالا هرگز به بلاک catch نیازی ندارد.
قرارداد عدماستثنا
این رفتار اتفاقی نیست — بخشی عمدی از قرارداد API است. اگر هدر یک قالب شناختهشده در طول تجزیه کوتاه یا خراب شود، ImageProbe همچنان یک ImageInfo باز میگرداند که Format آن به قالبی که شناسایی کرده تنظیم شده است؛ استثنای تجزیه را به فراخواننده منتقل نمیکند. فقط Format تضمین شده است — سایر ویژگیها را بهعنوان اختیاری درنظر بگیرید، بدون توجه به قالب شناساییشده.
مسائل رایج
| مشکل | دلیل | رفع |
|---|---|---|
ImageInfo ساختهشده با نتیجهٔ واقعی بررسی مطابقت ندارد | نمونههای ساختهشده بهصورت دستی سازگاری بین فیلدها را اعتبارسنجی نمیکنند | ساخت دستی را فقط برای دوپلات تست استفاده کنید، نه بهعنوان جایگزینی برای بررسی فایلهای واقعی |
فراخوانی Probe در حالی که DetectFormat کافی است | تجزیهوتحلیل هدر غیرضروری وقتی فقط فرمت مورد نیاز است | اگر هرگز Width/Height/BitDepth/FrameCount را نمیخوانید، از DetectFormat استفاده کنید |
فرمت Unknown برای فایلی که انتظار دارید پشتیبانی شود | هدر با هیچ یک از ۱۱ امضای شناساییشده مطابقت ندارد، یا فایل بهطور کامل فرمت دیگری است | فایل را در مقابل فهرست فرمتهای پشتیبانیشده |
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 | شمارش: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom |