Як працювати з 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, який ви самі відкрили, ви залишаєтеся відповідальними за його звільнення.