我们正在使用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
有什么想法吗?
答案 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的内容。