Получение метаданных GPS с картинки с помощью Paperclip - PullRequest
13 голосов
/ 12 февраля 2011

У меня вопрос по Скрепке. Многие современные камеры и телефоны добавляют метаданные GPS к фотографии при съемке:

geotagging

Пользователи моего приложения Rails могут загружать фотографии и вручную добавлять к ним данные о местоположении. Однако это отстой, так как пользователи не хотят вводить это: они хотят, чтобы он был там автоматически .

Можно, и как я могу получить метаданные GPS из фотографии (всегда JPEG) с помощью Paperclip и Ruby on Rails? Это можно сделать с помощью скрепки или мне нужен еще один драгоценный камень?

Ответы [ 4 ]

18 голосов
/ 15 февраля 2011

Что вам нужно, так это возможность извлекать 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 голос
/ 18 июля 2013

Просто обновление принятого ответа выше, которое очень помогло мне заставить работать EXIFR, но имеет несколько проблем:

  1. Чтобы проверить, есть ли у изображения GPS, мне пришлось использовать EXIFR::JPEG.new('IMG_6841.JPG').exif?

  2. Чтобы вывести широту, я использовал EXIFR::JPEG.new('IMG_6841.JPG').gps_latitude

  3. А долгота EXIFR::JPEG.new('IMG_6841.JPG').gps_longitude

Небольшие проблемы, но они заставили меня немного крутиться и могли бы сэкономить кому-то время в будущем.

Кроме того, как только я получил свои GPS-координаты из моей фотографии, я нашел эту запись в блоге, чтобы помочь преобразовать их из массива в дружественные координаты карты Google (т. Е. 34.360826, -110.239368): http://www.cloudspace.com/blog/2009/02/16/decoding-gps-latitude-and-longitude-from-exif-in-ruby/

1 голос
/ 12 февраля 2011

вы не можете сделать это с помощью скрепки.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]

(предварительно: imagemagick установлен и в пути, проверьте с помощью «которые идентифицируют»)

0 голосов
/ 14 ноября 2013

Если вы хотите использовать решение «более высокого уровня» (без exif-кода напрямую), существует гем https://github.com/aufi/photo_geoloader, который загружает широту, долготу и высоту и может поместить его в модель рельсов (при обратном вызове)

class Photo < ActiveRecord::Base
  before_create do
    PhotoGeoloader.new(photo.path).place_attributes self
  end
  ...
...