我对Paperclip有疑问。拍摄时,许多现代相机和手机都会为照片添加GPS元数据:
我的Rails应用的用户可以上传照片并手动将位置数据添加到他们。但是,这很糟糕,因为用户不想输入:他们希望它自动 。
可以,如何使用Paperclip和Ruby on Rails从照片(总是JPEG)中获取GPS元数据?可以用Paperclip完成还是需要另一个宝石?
答案 0 :(得分:18)
您需要的是能够从图片中提取EXIF 信息。
有一颗宝石旨在实现这一目标:exifr
您可以使用以下捆绑线自动安装它:
gem 'exifr'
修改强>
我亲自切换到同一个宝石的叉子,其中包含GPS助手:
gem 'exifr', :git => 'git://github.com/picuous/exifr.git'
使用示例:
EXIFR::JPEG.new('IMG_6841.JPG').gps? # => true
EXIFR::JPEG.new('IMG_6841.JPG').gps # => [37.294112,-122.789422]
EXIFR::JPEG.new('IMG_6841.JPG').gps_lat # => 37.294112
EXIFR::JPEG.new('IMG_6841.JPG').gps_lng # =>-122.789422
答案 1 :(得分:1)
你不能用回形针做到这一点。 rmagick也不会帮助你。我看到的唯一方法是:
raw_props = %x[identify -format '%[exif:*]' #{path_to_image}].split("\n").collect{|a| a.split("=")}
properties = Hash[*raw_props.collect { |v| [v, v*2]}.flatten]
(pre:imagemagick已安装并在路径中,请使用'which identify'进行检查)
答案 2 :(得分:1)
只是对上面接受的答案的更新,这极大地帮助我让EXIFR正常工作,但几乎没有问题:
要检查图片是否有GPS,我必须使用EXIFR::JPEG.new('IMG_6841.JPG').exif?
要拉动我使用EXIFR::JPEG.new('IMG_6841.JPG').gps_latitude
经度为EXIFR::JPEG.new('IMG_6841.JPG').gps_longitude
小问题,但他们让我旋转了一下,可能会节省一些时间。
此外,一旦我从照片中获得GPS坐标,我发现此博客条目有助于将它们从数组转换为Google Map友好坐标(即34.360826,-110.239368):http://www.cloudspace.com/blog/2009/02/16/decoding-gps-latitude-and-longitude-from-exif-in-ruby/
答案 3 :(得分:0)
如果你想使用“更高级别”的解决方案(没有exif直接),有一个宝石https://github.com/aufi/photo_geoloader可以加载纬度,经度和海拔高度,可以将它放入轨道模型(回调中)
class Photo < ActiveRecord::Base
before_create do
PhotoGeoloader.new(photo.path).place_attributes self
end
...