Heroku上的RMagick图像类型检测失败

时间:2014-07-10 20:34:41

标签: ruby-on-rails ruby heroku imagemagick rmagick

我们正在使用RMagick在文件扩展名不可用或错误的情况下识别图像类型。 format属性适用于我的本地Mac开发框,但在Heroku上它返回nil ...

irb> require 'RMagick'
irb> image = Magick::Image::read('https://s3.amazonaws.com/com.appgrinders.test/images/dog.gif')[0]
irb> image.format
=> nil

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

如果您查看ImageMagick页面,您可以看到负责这些图像文件信息的命令。

http://www.imagemagick.org/script/identify.php

您是否尝试在Heroku控制台中运行命令识别?

查找

$  identify image.jpg
=> image.jpg JPEG 960x960 960x960+0+0 8-bit sRGB 89KB 0.010u 0:00.009

或:

$ identify -verbose image.jpg 

Image: image.jpg
Format: JPEG (Joint Photographic Experts Group JFIF format)
Mime type: image/jpeg
Class: DirectClass
Geometry: 960x960+0+0
Units: Undefined
Type: TrueColor
Endianess: Undefined
Colorspace: sRGB
Depth: 8-bit
Channel depth:

你能升级Heroku上的ImageMagick吗?

答案 1 :(得分:1)

显然这是由于ImageMagick无法读取远程图像(请参阅here),但奇怪的是问题仅在Heroku(?)上显现。基础ImageMagick格式返回'HTTPS',而RMagick格式返回nil。

在我的Mac上:

$ identify -verbose https://s3.amazonaws.com/com.appgrinders.test/images/dog.gif

Format: GIF (CompuServe graphics interchange format)
...

On Heroku:

$ identify -verbose https://s3.amazonaws.com/com.appgrinders.test/images/dog.gif

Format: HTTPS
...

那么答案是在本地复制图像并在那里阅读。

答案 2 :(得分:0)

对我来说,就像在我试图转换的图片中删除s3网址中的https一样简单。

image_url = image_url.gsub('https://', 'http')

现在我可以转换任何图像。我的存储桶可以提供来自http和https的内容。