Особливості та функціональні можливості

Особливості та функціональні можливості

Функції та можливості

Ця сторінка охоплює всі області функціональності Aspose.Imaging FOSS для .NET ʼs виявлення формату та дослідження заголовка API, з робочими прикладами C#. Бібліотека ніколи не декодує піксельні дані — кожен метод читає лише заголовок файлу.


Виявлення формату

ImageProbe є статичною точкою входу. Три перевантаження охоплюють шлях до файлу, потік і масив необроблених байтів:

using Aspose.Imaging.Foss;

var fromPath   = ImageProbe.ProbeFile("photo.jpg");
var fromBytes  = ImageProbe.Probe(byteArray);
var fromStream = ImageProbe.Probe(stream);

var formatOnly = ImageProbe.DetectFormat(byteArray); // ImageFormat only, no header parse

Використовуйте DetectFormat, коли вам потрібно лише розгалужуватись за форматом; використовуйте Probe/ProbeFile, коли також потрібні розміри, глибина кольору або кількість кадрів.


Читання метаданих заголовка

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

var info = ImageProbe.ProbeFile("scan.dcm");
if (info.Width.HasValue && info.Height.HasValue)
{
    Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}");
}

Format (значення перерахування ImageFormat) завжди встановлюється, як тільки заголовок розпізнано — це єдине поле, гарантує заповнення.


Примітки по форматах

Деякі формати мають особливості заголовка, які ImageInfo нормалізує або безпосередньо розкриває:

ФорматBehavior
GIFFrameCount відображає кількість кадрів, коли файл містить кілька кадрів; пропускається, якщо кількість неможливо визначити
BMPВід’ємна висота в заголовку (порядок рядків зверху вниз) нормалізується — Height повертає позитивне значення
DICOMПарсинг заголовка підтримує синтакси передачі Implicit VR Little Endian та Explicit VR Little/Big Endian, витягуючи рядки, стовпці та виділені біти
// DICOM: rows -> Height, columns -> Width, bitsAllocated -> BitDepth,
// across any of the three common transfer syntaxes
var dicomInfo = ImageProbe.Probe(dicomBytes);
Console.WriteLine($"{dicomInfo.Width}x{dicomInfo.Height}, {dicomInfo.BitDepth}-bit");

Підтримувані формати

Усі 11 форматів виявляються однаковим способом — ImageProbe визначає формат і читає метадані заголовка; він ніколи не декодує і не перекодує піксельні дані жодного з них. Заповнення полів дійсно різниться залежно від формату, хоча — кожен формат встановлює Format, але лише деякі містять глибину кольору або кількість кадрів у своєму заголовку:

ФорматШирина / ВисотаБітова глибинаКількість кадрів
PNG✓✓✓
JPEG✓✓—
GIF✓—✓
BMP✓✓—
WebP✓——
ICO✓✓✓
TIFF✓✓✓
PSD✓✓—
EMF✓ (з меж)——
WMF (розташовуваний)✓ (припускає 96 DPI)——
DICOM✓ (рядки/стовпці)✓ (BitsAllocated)—

Нерозпізнаний заголовок розв’язується в ImageFormat.Unknown, а не викликає виняток. Декілька помітних деталей заповнення полів: FrameCount у PNG завжди 1 (константа, а не реальне виявлення анімованих PNG-кадрів); FrameCount у ICO — це справжня кількість вбудованих розмірів іконок у каталозі, а байт розмірності 0 у записі каталогу ICO означає 256px згідно специфікації формату; FrameCount у TIFF відображає обмежений прохід ланцюжка IFD файлу (кожен IFD — це одна сторінка); не-placeable WMF все ще правильно ідентифікується як ImageFormat.Wmf, але повертає лише Format — розміри заповнюються лише для placeable WMF через жорстко закодоване перетворення 96DPI з меж одиниць-на-дюйм заголовка; у EMF взагалі немає явного поля ширини/висоти, тому його розміри виводяться з прямокутника rclBounds у просторі пристрою.


Стійкість за дизайном

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

byte[] truncated = fullFileBytes[..^3];
var info = ImageProbe.Probe(truncated);
// info.Format is still populated; other fields may be null

Це робить безпечним запуск проти недовірених, часткових або перебігаючих завантажень без try/catch навколо кожного виклику.


Поради та кращі практики

  • Використовуйте DetectFormat замість Probe, коли потрібен лише формат, а не розміри
  • Перевірте Width/Height/BitDepth/FrameCount на null перед їх використанням — вони не заповнюються для кожного формату
  • Віддавайте перевагу Probe(stream) замість читання цілого файлу у масив байтів спочатку, коли працюєте з великими файлами
  • ImageProbe повністю статичний — немає інстанції, немає IDisposable, немає об’єкта конфігурації

Типові проблеми

ПроблемаПричинаВиправлення
Format є ImageFormat.UnknownЗаголовок не відповідає жодному з 11 розпізнаних форматівПереконайтеся, що файл є одним із PNG, JPEG, GIF, BMP, WebP, ICO, TIFF, PSD, EMF, WMF або DICOM
Width/Height є nullЗаголовок формату не містить цього поля, або заголовок був скорочений до цього поляСпочатку перевірте Format; не кожне поле заповнене для кожного формату
Висота BMP виглядає несподівано позитивноюВихідний файл використав від’ємну (зверху вниз) висоту у своєму заголовкуОчікується — ImageInfo.Height завжди нормалізується до позитивної величини

FAQ

Чи ImageProbe декодує піксельні дані?

Ні. Кожен метод читає лише заголовок файлу — розміри, глибину кольору та кількість кадрів — ніколи не вміст пікселів. Декодування та рендеринг виходять за межі цієї бібліотеки.

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

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

Чи можу я дослідити потік, який не підтримує перемотування?

Так. Probe(stream) приймає як потоки з можливістю перемотування, так і без неї.


API Reference Підсумок

Клас / МетодОпис
ImageProbe.ProbeFile(path)Перевірити файл за шляхом, повертаючи ImageInfo
ImageProbe.Probe(stream)Перевірити Stream (з можливістю перемотування або без)
ImageProbe.Probe(data)Перевірити необроблений byte[]
ImageProbe.DetectFormat(stream)Повернути лише ImageFormat для потоку
ImageProbe.DetectFormat(data)Повернути лише ImageFormat для byte[]
ImageInfoТип результату: Format, Width, Height, BitDepth, FrameCount
ImageFormatПерелічення: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom

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

 Українська