Если имя файла содержит расширение bmp или bmp, то этот файл содержит

Обновлено: 21.11.2024

A = imread(имя_файла) считывает изображение из файла, заданного параметром имя_файла, определяя формат файла по его содержимому. Если имя файла является файлом с несколькими изображениями, то imread читает первое изображение в файле.

A = imread( имя файла , fmt ) дополнительно указывает формат файла со стандартным расширением файла, указанным fmt . Если imread не может найти файл с именем, указанным в параметре filename , он ищет файл с именем filename.fmt .

A = imread(___, idx) считывает указанное изображение или изображения из файла с несколькими изображениями. Этот синтаксис применяется только к файлам GIF, PGM, PBM, PPM, CUR, ICO, TIF, SVS и HDF4. Вы должны указать имя файла, и вы можете дополнительно указать fmt .

A = imread( ___ , Name,Value ) указывает параметры, специфичные для формата, с использованием одного или нескольких аргументов пары "имя-значение" в дополнение к любому из входных аргументов в предыдущих синтаксисе.

[ A , map ] = imread( ___ ) считывает проиндексированное изображение из имени файла в A и считывает связанную с ним цветовую палитру в map . Значения цветовой карты в файле изображения автоматически масштабируются в диапазоне [0,1].

[ A , map , прозрачность ] = imread( ___ ) дополнительно возвращает прозрачность изображения. Этот синтаксис применяется только к файлам PNG, CUR и ICO. Для файлов PNG прозрачность — это альфа-канал, если он присутствует. Для файлов CUR и ICO это маска AND (непрозрачность).

Примеры

Чтение и отображение изображения

Прочитайте образец изображения.

imread возвращает массив размером 650 x 600 x 3, A .

Показать изображение.

Преобразовать индексированное изображение в RGB

Прочитайте первое изображение в образце индексированного файла изображения, corn.tif .

Индексированное изображение X представляет собой массив 415 x 312 типа uint8 . Цветовая карта cmap представляет собой матрицу 256 на 3 типа double , поэтому в проиндексированном изображении 256 цветов. Показать изображение.

Преобразование индексированного изображения в изображение RGB. Результатом является массив размером 415 х 312 х 3 типа double .

Убедитесь, что значения изображения RGB находятся в диапазоне [0, 1].

Чтение определенного изображения в многостраничном файле TIFF

Прочитайте третье изображение в образце файла, corn.tif .

Возврат альфа-канала изображения PNG

Возвращает альфа-канал образца изображения, перец.jpg .

Альфа-канал отсутствует, поэтому альфа-канал пуст.

Чтение указанной области изображения TIFF

Чтение определенной области пикселей образца изображения, corn.tif .

Укажите параметр PixelRegion с массивом ячеек векторов, указывающим границы области для чтения. Первый вектор указывает диапазон строк для чтения, а второй вектор указывает диапазон столбцов для чтения.

imread считывает данные изображения в строках 1–2 и столбцах 2–5 из corn.tif и возвращает массив 2 на 4, A .

Входные аргументы

filename — Имя графического файла
вектор символов | строковый скаляр

Имя графического файла в виде вектора символов или строкового скаляра.

В зависимости от расположения файла имя файла может принимать одну из следующих форм.

Укажите имя файла в имени файла .

Пример: 'myImage.jpg'

Файл в папке

Если файл не находится в текущей папке или в папке на пути к MATLAB, укажите полное или относительное имя пути.

Пример: 'C:\myFolder\myImage.ext'

Пример: '\imgDir\myImage.ext'

Если файл хранится в удаленном месте, то имя файла должно содержать полный путь к файлу, указанному в виде универсального указателя ресурса (URL) в следующем формате:

имя_схемы :// путь_к_файлу / мой_файл.ext

В зависимости от удаленного местоположения имя_схемы может быть одним из значений в этой таблице.

Удаленное расположение имя_схемы
Amazon S3™ s3
Хранилище больших двоичных объектов Windows Azure® wasb , wasbs
HDFS™ hdfs

Дополнительную информацию см. в разделе Работа с удаленными данными.

Пример: 's3://bucketname/path_to_file/my_image.jpg'

Информацию о разрядности, схемах сжатия и цветовых пространствах, поддерживаемых для каждого типа файлов, см. в разделе Алгоритмы.

Типы данных: char | строка

fmt — Формат изображения
вектор символов | строковый скаляр

Формат изображения в виде вектора символов или строкового скаляра, указывающего стандартное расширение файла. Вызовите imformats, чтобы увидеть список поддерживаемых форматов и их файловых расширений.

Пример: 'png'

Типы данных: char | строка

idx — Изображение для чтения
integer scalar | вектор целых чисел

Изображение для чтения в виде целочисленного скаляра или, для файлов GIF, вектора целых чисел. Например, если idx равно 3, imread возвращает третье изображение в файле. Для файла GIF, если idx равен 1:5, imread возвращает только первые пять кадров. Аргумент idx поддерживается только для файлов GIF, CUR, ICO и HDF4 с несколькими изображениями.

При чтении нескольких кадров из одного файла GIF укажите idx в качестве вектора кадров или используйте аргумент пары "Кадры", "все" имя-значение. Из-за структуры файлов GIF этот синтаксис обеспечивает более высокую производительность по сравнению с вызовом imread в цикле.

Для файлов HDF4 idx соответствует номеру изображения для чтения. Номера ссылок не обязательно соответствуют порядку изображений в файле. Вы можете использовать imfinfo, чтобы сопоставить порядок изображений со ссылочным номером.

Пример: 3

Типы данных: двойной

Аргументы "имя-значение"

Укажите необязательные пары аргументов в виде Name1=Value1. NameN=ValueN , где Name — это имя аргумента, а Value — соответствующее значение. Аргументы "имя-значение" должны стоять после других аргументов, но порядок пар не имеет значения.

До R2021a используйте запятые для разделения каждого имени и значения и заключайте имя в кавычки.

Пример: 'Index'5 считывает пятое изображение файла TIFF.

Кадры — Кадр для чтения
1 (по умолчанию) | положительное целое | вектор целых чисел | 'все'

Кадры для чтения в виде разделенной запятой пары, состоящей из 'Кадров' и положительного целого числа, вектора целых чисел или 'все' . Например, если вы укажете значение 3, imread прочитает третий кадр в файле. Если вы укажете all, imread прочитает все кадры и вернет их в том порядке, в котором они появляются в файле.

Пример: "кадры",5

PixelRegion — Subimage для чтения
массива ячеек в форме

Подизображение для чтения в виде разделенной запятой пары, состоящей из 'PixelRegion' и массива ячеек формы . Ввод rows указывает диапазон строк для чтения. Ввод cols указывает диапазон столбцов для чтения. И строки, и столбцы должны быть двухэлементными векторами, содержащими индексы с отсчетом от 1. Например, 'PixelRegion', <[1 2],[3 4]> считывает фрагмент изображения, ограниченный строками 1 и 2 и столбцами 3 и 4 в данных изображения. Если значение ReductionLevel больше 0, то строки и столбцы являются координатами фрагмента изображения.

Пример: "PixelRegion",

ReductionLevel — уменьшение разрешения изображения
0 (по умолчанию) | неотрицательное целое

Уменьшение разрешения изображения в виде разделенной запятой пары, состоящей из 'ReductionLevel' и неотрицательного целого числа. При уровне уменьшения L разрешение изображения уменьшается в 2^L. Уровень сокращения ограничен общим количеством уровней декомпозиции, как указано в поле «WaveletDecompositionLevels» в выходных данных функции imfinfo.

Пример: "ReductionLevel",5

Типы данных: одиночные | двойной

V79Compatible — Совместимость с MATLAB 7.9 (R2009b) и более ранними версиями
false (по умолчанию) | правда

Совместимость с MATLAB 7.9 (R2009b) и более ранними версиями в виде разделенной запятой пары, состоящей из 'V79Compatible' и либо true, либо false . Если указать true , возвращаемое изображение в градациях серого или RGB будет соответствовать предыдущим версиям imread (MATLAB 7.9 (R2009b) и более ранним версиям).

Пример: "V79Compatible", true

Типы данных: логические

BackgroundColor — Цвет фона
'none' | целое число | 3-элементный вектор целых чисел

Цвет фона в виде 'none' , целое число или трехэлементный вектор целых чисел. Если BackgroundColor равен 'none', то imread не выполняет композицию. В противном случае imread смешивает прозрачные пиксели с цветом фона.

Если входное изображение проиндексировано, значение BackgroundColor должно быть целым числом в диапазоне [1,P] , где P — длина цветовой карты.

Если входное изображение имеет оттенки серого, значение BackgroundColor должно быть целым числом в диапазоне [0,1] .

Если входное изображение — RGB, то значение BackgroundColor должно быть трехэлементным вектором со значениями в диапазоне [0,1] .

Значение по умолчанию для BackgroundColor зависит от наличия выходного аргумента прозрачности и типа изображения:

Если вы запрашиваете выходной аргумент прозрачности, значение по умолчанию для BackgroundColor равно 'none' .

Если вы не запрашиваете вывод прозрачности, а файл PNG содержит фрагмент цвета фона, тогда этот цвет является значением по умолчанию для BackgroundColor .

Если вы не запрашиваете вывод прозрачности и файл не содержит фрагмента фонового цвета, значение по умолчанию для BackgroundColor равно 1 для индексированных изображений, 0 для изображений в градациях серого и [0 0 0] для истинного цвета (RGB). изображения.

Индекс — изображение для чтения
1 (по умолчанию) | положительное целое число

Изображение для чтения в виде разделенной запятой пары, состоящей из 'Index' и положительного целого числа. Например, если значение Index равно 3, imread считывает третье изображение в файле.

Типы данных: одиночные | двойной

Info — информация об изображении
массив структур

Информация об изображении в виде разделенной запятой пары, состоящей из 'Info' и массива структур, возвращаемого функцией imfinfo. Используйте аргумент пары "имя-значение" Info, чтобы помочь imread быстрее находить изображения в файле TIFF, состоящем из нескольких изображений.

Типы данных: структура

PixelRegion — граница области
массив ячеек

Граница области в виде разделенной запятой пары, состоящей из 'PixelRegion' и массива ячеек в форме . Ввод rows указывает диапазон строк для чтения. Ввод cols указывает диапазон столбцов для чтения. строки и столбцы должны быть либо двухэлементными, либо трехэлементными векторами индексов, основанных на 1. Двухэлементный вектор указывает первую и последнюю строки или столбцы для чтения. Например, 'PixelRegion', <[1 2],[3 4]>считывает область, ограниченную строками 1 и 2 и столбцами 3 и 4 в данных изображения.

Трехэлементный вектор должен иметь форму [start increment stop] , где start – это первая строка или столбец для чтения, increment – значение приращения, а stop – последняя строка или столбец для чтения. Этот синтаксис позволяет понижать дискретизацию изображения. Например, 'PixelRegion', <[1 2 10],[4 3 12]> считывает область, ограниченную строками 1 и 10 и столбцами 4 и 12, и производит выборку данных из каждых 2 пикселей по вертикали и каждых 3 пикселей в горизонтальном направлении.

Имена файлов Windows состоят из двух частей. имя файла, затем точка, за которой следует расширение (суффикс). Расширение представляет собой трех- или четырехбуквенную аббревиатуру, обозначающую тип файла. Например, в файле letter.docx имя файла — буква, а расширение — docx. Расширения важны, потому что они сообщают вашему компьютеру, какой значок использовать для файла и какое приложение может открыть файл. Например, расширение doc сообщает вашему компьютеру, что файл является файлом Microsoft Word.

Если вы хотите открыть файл MAC OS X в Windows, вам может потребоваться добавить расширение к имени файла MAC OS X, чтобы Windows могла его распознать. Например, если у вас есть документ Word 6 MAC OS X с именем letter, который вы хотите открыть в Windows, вам нужно переименовать файл letter.docx, чтобы Word в Windows распознал и открыл этот файл.

Примечание. Этот список ни в коем случае не является полным и исчерпывающим списком расширений файлов. Если используемое вами расширение файла отсутствует в списке ниже, вы можете найти информацию в руководстве по программному обеспечению или на веб-сайте программного обеспечения.

Примечание. Если ни у одного из ваших имен файлов нет расширений, расширения файлов будут скрыты. См. Отображение расширений файлов

Отображение расширений файлов

Если ни одно из ваших имен файлов не имеет расширений, расширения файлов скрыты. Чтобы показать расширения файлов:

<р>1. В Проводнике откройте вкладку "Вид" и установите флажок рядом с "Расширения имен файлов".

<р>1. Нажмите на меню "Пуск" и введите "Показать скрытые файлы и папки", затем нажмите клавишу ввода или выберите этот параметр в списке результатов.

Поиск расширений файлов

Иногда может потребоваться выполнить поиск всех файлов определенного типа. Например, вы можете найти файл .pst или файл .mp3 на своем компьютере. Выполните следующие действия, чтобы найти расширение файла.

<р>1. Щелкните меню «Пуск» или строку поиска и введите «*», а затем расширение файла, который вы хотите найти (например, *.jpg), и нажмите клавишу «Ввод».

Я просматриваю каталог и копирую все файлы. Прямо сейчас я выполняю string.EndsWith проверки ".jpg" или ".jpg" и т.д. .

Есть ли более элегантный способ определить, является ли файл изображением (изображением любого типа) без хакерской проверки, как описано выше?

13 ответов 13

Проверьте файл на наличие известного заголовка. (Информация по ссылке также упоминается в этом ответе)

Первые восемь байтов файла PNG всегда содержат следующие (десятичные) значения: 137 80 78 71 13 10 26 10

Вот пример.

Есть две возможные интерпретации вопроса; либо «EndsWith» является хакерским (в этом случае этот ответ — это то, что хочет ОП), либо «использование имени файла» является хакерским, и в этом случае ответ @MitchWheat — это то, что хочет ОП. Я предпочитаю Митча, но проголосовал за обоих.

Если вы используете это расширение, обязательно преобразуйте его в нижний регистр, прежде чем выполнять сравнение. (Например, многие цифровые камеры создают файлы .JPG.)

MimeMapping.GetMimeMapping дает следующие результаты:

  • файл.jpg: изображение/jpeg
  • файл.jpg: изображение/gif
  • файл.jpg: изображение/jpeg
  • файл.jpg: изображение/png
  • файл.bmp: изображение/bmp
  • файл.tiff: изображение/tiff
  • file.svg: приложение/октет-поток

file.svg, не возвращающий тип изображения/MIME, работает в большинстве случаев, потому что вы, вероятно, не собираетесь обрабатывать векторное изображение, как скалярное изображение. При проверке MIME-типа помните, что SVG имеет стандартный MIME-тип image/svg+xml, даже если GetMimeMapping не возвращает его.

если расширение файла намеренно изменено, например. из .jpg в .txt это не удастся, т.е. вывод System.Web.MimeMapping.GetMimeMapping(filename) будет текстовым/обычным

При этом будут просмотрены первые несколько байтов файла и определено, является ли он изображением.

Я внес несколько изменений в приведенное выше, чтобы вы могли добавлять свои собственные изображения, если это необходимо, а также удалил коллекции, в которых изначально не было необходимости. Я также добавил перегрузку, принимающую параметр out типа string , задающий значение типа изображения, из которого состоит поток.

Несколько опечаток: должно быть return IsImage(stream, out imageType); вместо возврата stream.IsImage(out imageType); Должен быть int самый большойByteHeader = ImageTypes.Max(img => img.Key.Length) вместо int самый большойByteHeader = ImageTypes.Max(img => img.Value.Length)

В вашем редактировании обнаружена незначительная ошибка в intlargeByteHeader = ImageTypes.Max(img => img.Value.Length); строка - длина должна быть разделена на 2, так как каждый символ в шестнадцатеричной строке стоит только 4 бита, а не 8, и вы используете результат этого оператора, как если бы это было количество байтов в заголовке. Возьмем, к примеру, PNG, размер заголовка составляет 8 байтов, но ваш код ошибочно вычисляет его как 16 байтов. Он по-прежнему работает, поскольку сканирует больше, чем необходимо, в случаях, не связанных с изображениями, но это делает код запутанным.

Кроме того, @an-phu был прав в том, что img.Value.Length должен быть img.Key.Length (хотя вы были правы в том, что метод расширения не нужно менять).

Мы можем использовать классы изображений и графики из пространства имен System.Drawing; делать нашу работу. Если код работает без ошибок, то это изображение, иначе — нет. То есть пусть платформа DotNet сделает всю работу за нас. Код -

Добавьте этот код в раздел try: imgInput.Dispose(); gInput.Dispose(); . Если только дескриптор файла не будет открыт и другие процессы не смогут его использовать.

Если вам нужен быстрый способ проверки файла изображения до того, как он будет полностью прочитан из файла, помимо сравнения расширения файла, вы можете просто проверить его заголовок на наличие подписи файла (следующий код IsValidImageFile() проверяет наличие BMP, GIF87a, GIF89a, PNG, TIFF, JPEG)

Проверка подписи заголовка может быть быстрой, поскольку при этом не загружается весь файл и не создаются большие объекты, особенно при обработке нескольких файлов. Но он не проверяет правильность формирования остальных данных. Для этого можно сделать второй шаг, чтобы попытаться загрузить файл в объект изображения (и таким образом убедиться, что файл может отображаться и обрабатываться вашей программой).

Что такое "bufferEnd"? Кажется, он читает с конца файла? Это не всегда возможно, если файл не из файловой системы (требуется много пропусков), не так ли? Кроме того, как насчет WEBP? А новый HEIC?

Я использую следующий метод. Он использует встроенный декодер изображений для получения списка расширений, которые система распознает как файлы изображений, а затем сравнивает эти расширения с расширением имени файла, которое вы передаете. Возвращает простое значение TRUE/FALSE.

EDIT: также может помочь Image.FromFile(. ).RawFormat. Это может вызвать исключение, если файл не является изображением.

Не совсем тот ответ, который вам нужен. Но если это Интернет, то тип MIME.

Я не уверен, каков будет недостаток производительности для этого решения, но не могли бы вы выполнить какую-нибудь функцию изображения для файла в блоке try, которая потерпит неудачу и попадет в блок catch, если это не изображение?< /p>

Эта стратегия может быть не лучшим решением во всех ситуациях, но в случае, когда я сейчас работаю с ней, у нее есть одно важное преимущество: вы можете использовать любую функцию, которую планируете использовать для обработки изображения (если это изображение ) для тестовой функции. Таким образом, вы можете тестировать все текущие типы изображений, но это также будет распространяться на будущие типы изображений без добавления этого нового расширения изображения в список поддерживаемых типов изображений.

Кто-нибудь видит недостатки этой стратегии?

Преднамеренное использование try/catch нежелательно, так как исключения / могут быть дорогими (с точки зрения накладных расходов) и имеют легкий запах кода. Это не элегантное решение. Пожалуйста, смотрите dylmcc для лучшего решения. Я использовал его, и он работает. Я не вижу недостатков в этом решении..

Это сложный вопрос. Если файл не является изображением, будет выдано исключение. Из этого мы можем проверить, является ли файл изображением или нет.

Это то, что я использую - это просто настройка ответа @dylmcc, чтобы сделать его немного более читабельным.

<р>-1. Вопрос в том, как проверить файл, а не имя файла. У вас могут быть текстовые файлы, сохраненные как .jpg, или действительно поврежденные файлы изображений, которые не будут открываться как изображения.

Это один из способов интерпретировать вопрос — конечно, есть компромисс между доверием к расширению как прокси для реальности и фактическими попытками работать с изображением, используя любые подручные средства.

Поддерживаемые символы для имени файла: буквы, цифры, пробелы и ( ) _ - , .

*Обратите внимание, что длина имени файла не должна превышать 100 символов.

Если вы попытаетесь загрузить файл с недопустимым именем или типом файла, вы получите следующее сообщение об ошибке вместе с индикатором справа от вашего файла.

Если вы получили сообщение об ошибке, вам потребуется удалить все неподдерживаемые типы файлов и/или переименовать файл в допустимое имя файла (удалив все неподдерживаемые специальные символы), а затем загрузить переименованный документ. Если вам нужно сохранить соглашение об именах для хранения, вы можете временно переименовать файл для загрузки, а затем изменить его обратно после отправки факса.

Поддерживаемые типы файлов

Sfax поддерживает загрузку большинства основных форматов документов при составлении факса для отправки или загрузки в библиотеку документов. Допустимые типы файлов см. ниже.

Формат Тип файла
TIF .tif< /td>
Adobe PDF .pdf

Форматы приложений:

< td>.xlsx
Формат Тип файла
Формат расширенного текста .rtf
Microsoft Word .doc
Microsoft Word 2007 или выше . docx
Microsoft Excel .xls
Microsoft Excel 2007 или новее
Microsoft Powerpoint .ppt
Microsoft Powerpoint 2007 или более поздней версии .pptx
Open Office Document .odt
Open Office Spreadsheet .ods
Презентация Open Office .odp

Форматы растровых изображений

Формат Тип файла
BMP .bmp
GIF .jpg
JPG .jpg
PNG .jpg
TIF .tif

Форматы текстовых файлов

*Файл должен содержать одно из указанных выше расширений. Файлы, загруженные без расширения, не принимаются.

Читайте также: