هسته 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

همچنین ببینید:

 فارسی