将图像下载到磁盘:
image = open permalink_url, "rb", &:read
...
File.binwrite "images/#{hash}", image
有时它会被破坏:
虽然没有异常。
UPD:Imagemagick说identify
"reports if an image is incomplete or corrupt"但不是:
$ identify temp.png
temp.png PNG 1080x1080 1080x1080+0+0 8-bit sRGB 2.126MB 0.000u 0:00.049
以下是两张损坏的图片:
UPD:我重新加载了图像并进行了一些分析 - 这个糟糕的变化在中间的某个地方有300000个额外的字节,在很多部分中被打破。垃圾不仅仅是0x00,而且看起来是随机的。
答案 0 :(得分:1)
使用任何图像处理宝石,例如chunky_png
:
require 'chunky_png'
begin
ChunkyPNG::Datastream.from_file('bad.png')
rescue ChunkyPNG::CRCMismatch
puts "png corrupted!"
end
修改:Datastream
在这种情况下效率高于Image
。
编辑2 :如果您希望能够验证ImageMagick可以处理的任何格式,并且不介意调用外部二进制文件,那么这应该可行:
unless system('identify', '-verbose', 'bad.jpg', out: IO::NULL, err: IO::NULL)
puts "the file can't be opened or is corrupted"
end