我正在使用rmagick来操作图像文件。我在每个文件上使用ImageList.new来开始。当我将此方法应用于无效的图像文件时,我得到以下错误,该错误会中断脚本的执行:
RMagick.rb:1635:在`read'中:不正确的图像标题(Magick :: ImageMagickError)
因此,我希望能够在使用此方法之前检查文件是否是有效的图像文件。
有什么想法吗? 感谢。
答案 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)
这可能更优雅