Ядро 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);

Немає відповідного способу to 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Властивості результату лише для читання
ImageFormatEnum: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom

Дивіться також

 Українська