2010-05-07 55 views
2

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

RMagick.rb:1635:在'读':不正确的图像头(Magick :: ImageMagickError)

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

任何想法? 谢谢。

回答

0

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

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

+1

是的,这是有效的。我用这一个班轮检查PNG图像: File.new(文件路径,“R”)获得[0,4]条.include(“PNG‰”) 如果有人知道一个图书馆吗?可以让我知道。 谢谢。 – 2010-05-07 19:29:26

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 

这不是基于文件扩展名。它会让你知道文件的实际格式。