2010-05-07 4 views
2

Я использую rmagick для управления файлами изображений. Для начала я использую ImageList.new для каждого файла. Когда я применить этот метод к инвалидному файлу изображения я получаю ошибку ниже, которая прерывает выполнение сценария:Проверьте, является ли файл допустимым.

RMagick.rb: 1635: в `чтения ': заголовок Неправильное изображение (Magick :: ImageMagickError)

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

Любые идеи? Спасибо.

ответ

0

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

Например, первые 3 байта заголовка файла GIF являются «GIF», в соответствии с этим GIF spec - поэтому, если вы получаете файл с расширением .gif, вы можете его проанализировать, чтобы проверить его соответствие заголовку спецификации.

+1

Да, это работает. Я использую этот однострочный фильтр для проверки изображений PNG: File.new (путь к файлу, «r»). Получает [0,4] .include? («‰ PNG») Если кто-то знает о библиотеке I может использовать, дайте мне знать. Чинги. –

3

Исключение похоже на идеальный сигнал о том, что изображение недействительно ... Почему бы просто не спасти его?

Если вы действительно хотите применить некоторые другие тесты, вы можете использовать FastImage и запросить тип или размер, например, и вы получите nil, если заголовок поврежден.

2

Вы можете проверить формат изображения. Например:

image = Magick::Image::read(file_path).first 
image.format 

Таким образом, вы можете проверить, если формат является одним из форматов, которые вы ожидаете:

image = Magick::Image::read(file_path).first 
%w(JPEG GIF TIFF PNG).include? image.format 

Это не основано на расширение имени файла. Это дает вам фактический формат файла.

Смежные вопросы