Проверьте, является ли файл изображением

Я использую JAI и создаю файл с:

PlanarImage img = JAI.create("fileload", myFilename);

Я проверяю перед той строкой, если файл существует. Но как я мог проверить, является ли файл .bmp или .tiff или файлом изображения?

Кто-либо знает?

9
задан Tim 3 February 2010 в 14:44
поделиться

6 ответов

В проекте Image Magick есть средства для идентификации изображений, и есть Java-оболочка для Image Magick под названием JMagick, которую, я думаю, вы можете рассмотреть вместо того, чтобы изобретать колесо:

http://www.jmagick.org

Я использую Image Magick все время, включая его функцию «идентификации» из командной строки, и она ни разу не смогла идентифицировать изображение.

В те дни, когда мне была абсолютно необходима эта функция, а JMagick еще не существовал, я использовал команду Runtime.exec () ImageMagick identify из Java, и она отлично работала.

В настоящее время, когда существует JMagick, в этом, вероятно, больше нет необходимости (но я еще не пробовал JMagick).

Обратите внимание, что он дает гораздо больше, чем просто формат, например:

$  identify tmp3.jpg 
tmp3.jpg JPEG 1680x1050 1680x1050+0+0 DirectClass 8-bit 293.582kb 

$  identify tmp.png
tmp.png PNG 1012x900 1012x900+0+0 DirectClass 8-bit 475.119kb
8
ответ дан 4 December 2019 в 12:18
поделиться

Другим вариантом является создание приложения Windows и установка этих двух свойств:

        this.WindowState = FormWindowState.Minimized;
        this.ShowInTaskbar = false;
-121--4716426-

Как насчет

stringVar = "Hello, {0}. How are you doing?";
arg1 = "John";    // or args[0]
String.Format(stringVar, arg1)

Можно даже иметь несколько аргументов, просто прирасти {x} и добавить другой параметр в метод Format (). Не уверен, что этот метод используется для разных, но и для «string», и для «String».

-121--3766019-

Попробуйте использовать стандартный JavaBeans Activation Рамки (JAF)

При помощи стандартного расширения JavaBeans Activation Рамки разработчики, использующие технологию Java, могут воспользоваться преимуществами стандартных сервисов для определения типа произвольного фрагмента данных , инкапсуляции доступа к нему, обнаружения доступных на нем операций Например, если браузер получил изображение JPEG, эта структура позволила бы браузеру идентифицировать этот поток данных как изображение JPEG , и из этого типа браузер мог бы найти и создать экземпляр объекта, которым можно было бы манипулировать, или просмотреть это изображение.

0
ответ дан 4 December 2019 в 12:18
поделиться

Единственный (полу)надежный способ определить содержимое файла - открыть его и прочитать первые несколько символов. Затем вы можете использовать набор тестов, например, реализованный в команде Unix-файл, чтобы сделать обоснованное предположение о содержимом файла.

0
ответ дан 4 December 2019 в 12:18
поделиться

В начале файлов имеется последовательность идентификационных символов. Например, файлы JPEG начинаются с FF D8 FF.

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

Информацию об идентификационных символах Вы можете посмотреть на странице http://filext.com

1
ответ дан 4 December 2019 в 12:18
поделиться

Вы можете использовать DROID , инструмент для идентификации формата файлов, который также предлагает Java API, примерно так:

AnalysisController controller = new AnalysisController();
controller.readSigFile(signatureFileLocation);
controller.addFile(fileToIdentify.getAbsolutePath());
controller.runFileFormatAnalysis();
Iterator<IdentificationFile> it = controller.getFileCollection().getIterator();

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

1
ответ дан 4 December 2019 в 12:18
поделиться

Расширяя ответ Биркана, можно увидеть список «магических чисел», доступных здесь:

http: //www.astro .keele.ac.uk / oldusers / rno / Computing / File_magic.html

Я только что проверил файлы BMP и TIFF (оба только что созданы в Windows XP / Paint), и они оказались верными:

First two bytes "42 4d" -> BMP
First four bytes "4d 4d 00 2a" -> TIFF

Я использовал VIM для редактирования файлов, а затем Tools | Преобразуйте в шестнадцатеричный, но вы также можете использовать «od -c» или что-то подобное, чтобы проверить их.

В завершение, меня немного позабавило, когда я обнаружил магические числа, используемые для скомпилированных классов Java: 'ca fe ba be' - 'cafe babe' :)

0
ответ дан 4 December 2019 в 12:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: