检查文件是否是有效图像

时间:2010-05-07 19:06:50

标签: ruby

我正在使用rmagick来操作图像文件。我在每个文件上使用ImageList.new来开始。当我将此方法应用于无效的图像文件时,我得到以下错误,该错误会中断脚本的执行:

RMagick.rb:1635:在`read'中:不正确的图像标题(Magick :: ImageMagickError)

因此,我希望能够在使用此方法之前检查文件是否是有效的图像文件。

有什么想法吗? 感谢。

4 个答案:

答案 0 :(得分:3)

异常似乎是图像无效的完美信号......为什么不简单地拯救它呢?

如果您确实想要应用其他一些测试,可以使用FastImage并请求类型或大小,如果标头已损坏,您将获得nil

答案 1 :(得分: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

这不是基于文件扩展名。它会嘲笑文件的实际格式。

答案 2 :(得分:0)

如果您正在处理某种格式的图像,您可以分析它们的标题以确定它们是否真的是有效的图像文件。

例如,根据此GIF spec,GIF文件标头的前3个字节为“GIF” - 因此,如果您收到扩展名为.gif的文件,则可以对其进行分析以验证它的标题符合规范。

答案 3 :(得分:0)

安装 mimemagic gem

gem 'mimemagic'

打开流(目标图像的字节数)

url="https://i.ebayimg.com/images/g/rbIAAOSwojpgyQz1/s-l500.jpg"
result = URI.parse(url).open

然后检查数据流的文件类型

例如:

MimeMagic.by_magic(result).type == "image/jpeg"

尽管如上所述

%w(JPEG GIF TIFF PNG).include?(MimeMagic.by_magic(result).type)

这可能更优雅