使用Paperclip从图片中获取GPS元数据

时间:2011-02-12 12:47:13

标签: ruby-on-rails metadata paperclip jpeg user-experience

我对Paperclip有疑问。拍摄时,许多现代相机和手机都会为照片添加GPS元数据:

geotagging

我的Rails应用的用户可以上传照片并手动将位置数据添加到他们。但是,这很糟糕,因为用户不想输入:他们希望它自动

可以,如何使用Paperclip和Ruby on Rails从照片(总是JPEG)中获取GPS元数据?可以用Paperclip完成还是需要另一个宝石?

4 个答案:

答案 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正常工作,但几乎没有问题:

  1. 要检查图片是否有GPS,我必须使用EXIFR::JPEG.new('IMG_6841.JPG').exif?

  2. 要拉动我使用EXIFR::JPEG.new('IMG_6841.JPG').gps_latitude

  3. 的纬度
  4. 经度为EXIFR::JPEG.new('IMG_6841.JPG').gps_longitude

  5. 小问题,但他们让我旋转了一下,可能会节省一些时间。

    此外,一旦我从照片中获得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
  ...