Чтение расширенных свойств изображения на c#
-
20-09-2019 - |
Вопрос
Я хотел бы найти высоту / ширину изображения на диске, не открывая его, если это возможно (по соображениям производительности).
Панель свойств Windows для изображений содержит такую информацию, как ширина, высота, разрядность и т.д., что наводит меня на мысль, что она где-то хранит метаданные в файле.Как я могу получить доступ к этой информации?
Решение
Есть несколько вопросов stackoverflow о том, как считывать информацию EXIF из изображений, таких как: Как получить EXIF-данные из файла с помощью C#
Другие советы
Используйте систему.Рисование.Класс изображения.
Image img = Image.FromFile(fileName);
ImageFormat format = img.RawFormat;
Console.WriteLine("Image Type : "+format.ToString());
Console.WriteLine("Image width : "+img.Width);
Console.WriteLine("Image height : "+img.Height);
Console.WriteLine("Image resolution : "+(img.VerticalResolution*img.HorizontalResolution));
Console.WriteLine("Image Pixel depth : "+Image.GetPixelFormatSize(img.PixelFormat));
Console.WriteLine("Image Creation Date : "+creation.ToString("yyyy-MM-dd"));
Console.WriteLine("Image Creation Time : "+creation.ToString("hh:mm:ss"));
Console.WriteLine("Image Modification Date : "+modify.ToString("yyyy-MM-dd"));
Console.WriteLine("Image Modification Time : "+modify.ToString("hh:mm:ss"));
Самый простой способ добиться этого, предполагая, что изображение квадратное, - это взять размер файла в байтах и извлечь квадратный корень.Это будет ваша ширина и высота.
256 bytes = 16px x 16px
Или вы можете попробовать прочитать информацию EXIF изображения, используя это библиотека codeplex
Windows не хранит (эти) метаданные в каком-либо специальном месте файловой системы;окно свойств просто считывает их из самого файла изображения.
Я не думаю.NET предлагает какие-либо функции для чтения только метаданных из изображения без загрузки всего изображения.Если вы имеете дело только с ограниченным количеством различных форматов изображений (например,только JPEG, PNG и GIF), не должно быть слишком сложно самостоятельно определить размер из заголовка изображения.
Если, с другой стороны, вам приходится иметь дело со многими форматами изображений, возможно, вы сможете взглянуть на исходный код Unix file
полезность.Ему удается определять размер множества различных форматов изображений, и он невероятно быстро загружается.
Чтобы получить ширину и высоту изображения (по сути, как вы выразились, метаданные), вам нужно должны откройте файл, проанализируйте какую-то информацию заголовка и получите то, что вы хотите таким образом.
Вам не нужно было бы читать всю информацию о цвете / растровом изображении, только заголовок.
Это тот же самый способ, которым Windows может загружать значки из файлов приложений, фактически не выполняя их.
Проверьте этот вопрос:
Чтобы ознакомиться со свойствами, отображаемыми проводником Windows, вы можете воспользоваться Средства управления и автоматизации Microsoft Shell компонент.Преимущество этого заключается в том, что вам не нужна никакая сторонняя библиотека (COM-объект уже есть) или дополнительный код для синтаксического анализа заголовка изображения, и что он будет работать с различными форматами.
Пример кода можно найти в ответе на связанный с этим вопрос.