Вступ

Aspose.Imaging FOSS для .NET — це безкоштовна, MIT-ліцензована, бібліотека з відкритим кодом для розробників .NET, яким потрібно знати, що таке файл зображення is — її формат, розміри, бітова глибина та кількість кадрів — без необхідності розкодування його. Статичний ImageProbe клас є точкою входу: ProbeFile(path) зчитує з диска, Probe(stream) and Probe(data) приймає потік або масив байтів, і DetectFormat(stream) / DetectFormat(data) повертає ImageFormat значення enum без створення повного ImageInfo, для викликів, яким потрібно лише розрізнити формат. Кожен метод перевірки повертає an ImageInfo об’єкт з nullable Width, Height, BitDepth, і FrameCount властивості, заповнюються лише коли заголовок виявленого формату фактично містить це значення.

Це навмисно вузький інструмент, і в цьому його сенс. Він не декодує пікселі, не відтворює зображення та не конвертує формати — для цього комерційний продукт Aspose.Imaging для .NET є правильним вибором (посилання нижче у розділі Відкритий код і ліцензування). Те, що робить Aspose.Imaging FOSS для .NET, — це набагато менша, набагато поширеніша задача відповісти «який це формат і який його розмір?», якомога швидше та безпечніше, для типу проблем, коли повне декодування було б марною тратою: перевірка завантаження, визначення розміру мініатюр, сортування пакету змішаних файлів або читання полів заголовка DICOM для попередньої перевірки.

Бібліотека ліцензована за MIT, не має зовнішніх залежностей і підтримує як netstandard2.0, так і net8.0 — безкоштовна як для відкритого, так і для комерційного використання, без роялті та обмежень на розповсюдження.


Ключові особливості

Три способи дослідити файл

ImageProbe пропонує точки входу у вигляді шляху до файлу, потоку та масиву байтів, тому підходить у будь-якому місці вашого конвеєра, де вже знаходяться дані зображення — на диску, у пам’яті або що надходять по мережі. DetectFormat пропускає створення повного ImageInfo, коли вам потрібне лише розгалуження за форматом.

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

Структуровані, чесні результати

ImageInfo розкриває Format (значення перерахування ImageFormat, завжди встановлюється після розпізнавання заголовка) разом з nullable Width, Height, BitDepth та FrameCount. «Nullable» тут виконує реальну роботу: заповнення полів справді різниться залежно від формату, і ImageInfo ніколи не вигадує значення, якого немає в заголовку формату. Перевірка на null перед використанням — правильний підхід, а не захисна післядумка.

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

11 форматів, включаючи три, які нічого іншого не виявляють у просторі FOSS .NET

PNG, JPEG, GIF, BMP, WebP (з втратами, без втрат і розширений), ICO, TIFF, PSD, EMF, WMF та DICOM. Заповнення полів навмисно відрізняється залежно від формату, а не через пропуск — PNG містить ширину, висоту, глибину кольору, and кількість кадрів (хоча FrameCount є жорстко закодованим 1, не реальне виявлення кадрів animated-PNG); FrameCount є справжньою кількістю вбудованих розмірів іконок у його каталозі, і a 0 байт у полі розмірів запису директорії ICO означає 256px, згідно зі специфікацією формату; TIFF’s FrameCount відображає обмежений обхід ланцюжка IFD файлу, один IFD на сторінку.

Три з цих одинадцяти — PSD, EMF/WMF та DICOM — не мають іншого безкоштовного, відкритого .NET детектора, про який ми знаємо, і це справжня причина існування цієї бібліотеки.

WMF та EMF: два застарілі формати, два різні обмеження

Непереносимий WMF все ще правильно ідентифікується як ImageFormat.Wmf, але лише переносимий WMF заповнює розміри — вони виводяться з меж одиниць на дюйм у заголовку за допомогою жорстко закодованого перетворення 96 DPI, оскільки сам WMF не містить абсолютного розміру в пікселях. EMF взагалі не має явного поля ширини/висоти; його розміри беруться з прямокутника простору пристрою rclBounds у заголовку EMF. Обидва чесно відображені у ImageInfo: коли значення не може бути виведено, властивість залишається null, а не вгадується.

Парсинг заголовка DICOM без переглядача

ImageProbe читає заголовки DICOM у форматах Implicit VR Little Endian та Explicit VR Little/Big Endian, витягуючи Rows у Height, Columns у Width та BitsAllocated у BitDepth — без потреби у DICOM-переглядачі чи зовнішніх залежностях зображень. Парсинг консервативний за задумом: елемент послідовності невизначеної довжини зупиняє обходження замість вгадування його вмісту, тому частково зрозумілий DICOM-файл зводиться до часткового ImageInfo, а не до неправильного.

Ніколи не генерує виключення при пошкоджених або урізаних вхідних даних.

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

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

Швидкий старт

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

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

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

// Format-only detection when dimensions aren't needed
var bytes = File.ReadAllBytes("photo.jpg");
var format = ImageProbe.DetectFormat(bytes);

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

Aspose.Imaging FOSS для .NET detects усі 11 форматів нижче та читає метадані рівня заголовка — не декодує піксельні дані, тому немає можливості «write» для звіту. Заповнення полів варіюється залежно від формату; дивіться докладний розподіл у розділі Ключові особливості вище.

ФорматРозширенняDetectedШирина / ВисотаГлибина бітівКількість кадрів
PNG.png✓✓✓✓
JPEG.jpg / .jpeg✓✓✓—
GIF.gif✓✓—✓
BMP.bmp✓✓✓—
WebP.webp✓✓——
ICO.ico✓✓✓✓
TIFF.tif / .tiff✓✓✓✓
PSD.psd✓✓✓—
EMF.emf✓✓ (з меж)——
WMF.wmf✓✓ (лише розміщуваний, 96 DPI)——
DICOM.dcm✓✓ (Рядки/Стовпці)✓ (BitsAllocated)—

Відкритий код і ліцензування

Aspose.Imaging FOSS для .NET має ліцензію MIT без зовнішніх залежностей. Ліцензія MIT дозволяє використання як у проектах з відкритим кодом, так і у комерційних проектах без роялті та обмежень щодо розповсюдження. Джерельний код доступний на GitHub. Він спеціально обмежений лише виявленням форматів — для декодування, редагування або конвертації цих форматів зображень, дивіться Aspose.Imaging для .NET — Enterprise Product.


Початок роботи

Пов’язані ресурси