Як працювати з Aspose.Imaging FOSS Core API у .NET

Як працювати з Aspose.Imaging FOSS Core API у .NET

Aspose.Imaging FOSS для публічної поверхні .NET складається з трьох класів: ImageProbe, ImageInfo і ImageFormat. У цьому посібнику розглядається встановлення пакету та використання всіх трьох разом для визначення формату та читання метаданих заголовка з файлу, потоку та масиву байтів.

Покроковий посібник

Крок 1: Встановити пакет

git clone https://github.com/aspose-imaging-foss/Aspose.Imaging-FOSS-for-.NET.git
cd Aspose.Imaging-FOSS-for-.NET
dotnet build

Пакет орієнтований на net8.0 та netstandard2.0 і має нуль зовнішніх залежностей під час виконання.


Крок 2: Імпортувати простір імен

Додайте одну директиву using — вона розкриває ImageProbe, ImageInfo і ImageFormat, всю поверхню API, тому більше нічого імпортувати не потрібно:

using Aspose.Imaging.Foss;

Крок 3: Перевірити файл за шляхом

ImageProbe.ProbeFile читає лише достатньо заголовка файлу, щоб заповнити результат ImageInfo — він ніколи не декодує піксельні дані:

var info = ImageProbe.ProbeFile("photo.jpg");
Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}, {info.BitDepth}-bit");

Крок 4: Перевірити потік або масив байтів

Коли зображення вже знаходиться в пам’яті або прийшло з потоку (завантаження, мережевий відповідь), використовуйте перевантаження, які приймають їх безпосередньо, замість спочатку записувати у тимчасовий файл:

byte[] bytes = File.ReadAllBytes("photo.jpg");
var infoFromBytes = ImageProbe.Probe(bytes);

using var stream = File.OpenRead("photo.jpg");
var infoFromStream = ImageProbe.Probe(stream);

Probe(stream) працює як з потоками, які підтримують пошук, так і без підтримки пошуку.


Крок 5: Використовуйте DetectFormat, коли вам потрібен лише формат

Якщо вам потрібно лише розрізнити за форматом і не потрібні розміри, глибина кольору чи кількість кадрів, DetectFormat пропускає решту розбору заголовка:

var format = ImageProbe.DetectFormat(bytes);
if (format == ImageFormat.Dicom)
{
    // route to DICOM-specific handling
}

Крок 6: Безпечно зчитувати Nullable ImageInfo поля

Width, Height, BitDepth і FrameCount є nullable — вони заповнюються лише тоді, коли заголовок виявленого формату дійсно містить це значення. Format — це єдине поле, яке завжди встановлюється після розпізнавання заголовка:

var info = ImageProbe.ProbeFile("scan.dcm");
if (info.Width.HasValue && info.Height.HasValue)
{
    Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}");
}
else
{
    Console.WriteLine($"{info.Format}: dimensions not available in this header");
}

Поширені проблеми та виправлення

Формат показується як ImageFormat.Unknown. Заголовок файлу не відповідає жодному з 11 розпізнаних форматів (PNG, JPEG, GIF, BMP, WebP, ICO, TIFF, PSD, EMF, WMF, DICOM). Переконайтеся, що файл дійсно належить до одного з цих форматів — ImageProbe ніколи не викликає виключення для нерозпізнаного заголовка, воно повідомляє Unknown замість цього.

Width/Height are null хоча Format встановлено. Не кожен заголовок формату містить усі поля, і скорочений файл може закінчитися до того, як будуть прочитані байти поля. Перевірте Format спочатку, а решту вважайте необов’язковим.

Calling Probe when DetectFormat працюватиме. Probe and ProbeFile розбирати повний заголовок; DetectFormat читає лише достатньо, щоб визначити формат. Використовуйте DetectFormat якщо ви ніколи не читаєте Width/Height/BitDepth/FrameCount.

Очікуються декодовані піксельні дані. ImageProbe ніколи не декодує, не рендерить і не конвертує вміст зображення — він лише читає метадані заголовка. Декодування та операції на рівні пікселів вимагають комерційного Aspose.Imaging SDK.

Поширені питання

Що станеться, якщо я перевірю скорочений або пошкоджений файл?

ImageProbe ніколи не генерує виключення при неправильному або скороченому вводу. Він повертає частковий ImageInfo — Format встановлюється, коли маркер формату заголовка розпізнано, навіть якщо решта файлу обрізана.

Чи є ImageProbe потокобезпечним?

Так. ImageProbe статичний і не зберігає змінний стан між викликами, тому одночасні виклики з кількох потоків безпечні.

Чи можу я створити ImageInfo безпосередньо, без перевірки реального файлу?

Так. Конструктор ImageInfo публічний і вимагає лише format — це корисно для створення тестових дублерів: new ImageInfo(ImageFormat.Png, width: 64, height: 48).

Чи потрібно щось звільняти?

Ні. ImageProbe не містить жодних IDisposable ресурсів власного. Якщо ви передаєте Stream, який ви самі відкрили, ви залишаєтеся відповідальними за його звільнення.

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

 Українська