Вступ
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 buildusing 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.