Ядро API

Основной API

Aspose.Imaging FOSS для всей публичной поверхности .NET состоит из трёх классов: ImageProbe (статический фасад), ImageInfo (значение результата), и ImageFormat (перечисление формата). Эта страница объясняет, как они сочетаются в виде контракта, помимо обзора по функциям в Функции и возможности.


Контракт из трёх классов

  • ImageProbe — статический, без состояния. Каждый вызов независим; ничего не нужно настраивать или освобождать.
  • ImageInfo — запечатанный, неизменяемый. Все пять свойств (Format, Width, Height, BitDepth, FrameCount).
  • ImageFormat — перечисление с одним значением для каждого распознанного формата, плюс Unknown.
using Aspose.Imaging.Foss;

var info = ImageProbe.ProbeFile("photo.jpg");
ImageFormat format = info.Format;   // always set
int? width = info.Width;            // set only when the format's header carries it

Создание ImageInfo напрямую

Конструктор ImageInfo публичный — требуется только format, все остальные параметры по умолчанию равны null. Это полезно для модульных тестов, которым нужен подставной результат без обращения к реальному файлу:

using Aspose.Imaging.Foss;

// Fake a PNG result for a test double, with no dimensions
var fakeInfo = new ImageInfo(ImageFormat.Png);

// Fake a fully-populated result
var fullInfo = new ImageInfo(ImageFormat.Gif, width: 64, height: 48, bitDepth: 8, frameCount: 3);

Нет соответствующего способа mutate an ImageInfo после создания — каждое свойство только для чтения, поэтому проверенный или сконструированный экземпляр безопасно передавать и кэшировать без защитного копирования.


Выбор правильной перегрузки

OverloadИспользовать, когда
ImageProbe.ProbeFile(path)У вас есть путь к файлу, и вы хотите получить полный ImageInfo
ImageProbe.Probe(stream)У вас уже открыт Stream (с возможностью перемещения или без неё), и вы хотите получить полный ImageInfo
ImageProbe.Probe(data)У вас уже есть байты в памяти, и вы хотите полный ImageInfo
ImageProbe.DetectFormat(stream) / (data)Вам нужно лишь переключиться на ImageFormat — пропустите разбор заголовка после сигнатуры формата

ProbeFile открывает и читает файл сам — нет необходимости сначала открывать FileStream, лишь бы вызвать Probe(stream).


Пакетное сканирование каталога

Поскольку ImageProbe никогда не бросает исключение, сканирование каталога может вызывать его в плотном цикле без try/catch для каждого файла:

using Aspose.Imaging.Foss;

foreach (var path in Directory.GetFiles("incoming"))
{
    var info = ImageProbe.ProbeFile(path);

    if (info.Format == ImageFormat.Unknown)
    {
        Console.WriteLine($"{path}: not a recognized image format, skipping");
        continue;
    }

    Console.WriteLine($"{path}: {info.Format} {info.Width}x{info.Height}");
}

Любой файл, заголовок которого не соответствует одному из 11 распознаваемых форматов, преобразуется в ImageFormat.Unknown, а не вызывает исключение — приведённый выше цикл никогда не требует блока catch.


Контракт never-throws

Это не случайное поведение — это преднамеренная часть контракта API. Если заголовок распознаваемого формата обрезан или искажен в процессе разбора, ImageProbe всё равно возвращает ImageInfo с установленным Format, указывающим на распознанный формат; он не передаёт исключение парсинга вызывающему коду. Гарантируется только Format — все остальные свойства следует считать опциональными, независимо от того, какой формат был обнаружен.


Общие проблемы

ПроблемаПричинаИсправление
Сконструированный ImageInfo не совпадает с реальным результатом пробаВручную созданные экземпляры не проверяют согласованность между полямиИспользуйте ручное создание тестовых двойников только для этого, а не как замену проверки реальных файлов
Вызов Probe, когда достаточно DetectFormatИзбыточный разбор заголовка, когда нужен только форматИспользуйте DetectFormat, если вы никогда не читаете Width/Height/BitDepth/FrameCount
Формат Unknown для файла, который, как ожидается, поддерживаетсяЗаголовок не совпадает ни с одной из 11 распознанных сигнатур, либо файл полностью другого форматаПодтвердите файл относительно список поддерживаемых форматов

FAQ

Могу ли я создать подкласс ImageInfo или ImageProbe?

Нет. ImageInfo является sealed, а ImageProbe — static — ни то, ни другое не предназначено для наследования или создания экземпляров через наследование.

Является ли ImageProbe потокобезопасным?

У ImageProbe нет изменяемого состояния между вызовами — каждый вызов Probe, ProbeFile или DetectFormat независим, что делает одновременные вызовы из нескольких потоков безопасными.

Нужно ли мне что-нибудь освобождать?

Нет. У ImageProbe нет собственных IDisposable ресурсов. Если вы передаёте Stream, который открыли сами, вы остаётесь ответственными за освобождение этого потока — Probe(stream) его не закрывает.


API Reference Сводка

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

См. также:

 Русский