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



в настоящее время я использую PIL.



from PIL import Image
try:
im=Image.open(filename)
# do stuff
except IOError:
# filename not an image file


однако, хотя это достаточно охватывает большинство случаев, некоторые файлы изображений, такие как, xcf, svg и psd не обнаруживаются. Psd файлы создает исключение OverflowError.



есть ли способ, которым я мог бы включить их также?

555   7  

7 ответов:

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

Я только что нашел строение imghdr модуль. Из документации python:

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

вот как это работает:

>>> import imghdr
>>> imghdr.what('/tmp/bass')
'gif'

использование модуля намного лучше, чем переопределение подобной функциональности

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

im.проверить()

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

вы можете использовать привязки Python к libmagic, python-magic а затем проверьте типы mime. Это не скажет вам, если файлы повреждены или нетронуты, но он должен быть в состоянии определить, какой тип изображения это.

Ну, я не знаю о внутренностях psd, но я, конечно, знаю, что, по сути, svg не является файлом изображения как таковым, - он основан на xml, поэтому это, по сути, обычный текстовый файл.

в Linux вы можете использовать python-magic (http://pypi.python.org/pypi/python-magic/0.1), который использует libmagic для идентификации форматов файлов.

AFAIK, libmagic заглядывает в файл и пытается рассказать вам больше, чем просто формат, например, размеры растрового изображения, версия формата и т. д.. Таким образом, вы можете рассматривать это как поверхностный тест на "валидность".

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

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

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

Comments

    Ничего не найдено.