Ядро 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 | Властивості результату лише для читання |
ImageFormat | Enum: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom |