Получение метаданных GPS с изображения с помощью Paperclip
У меня есть вопрос о Paperclip. Многие современные камеры и телефоны добавляют метаданные GPS к фотографии при съемке:
![geotagging]()
Пользователи моего приложения Rails могут загружать фотографии и вручную добавлять к ним данные о местоположении. Однако это отстой, поскольку пользователи не хотят вводить это: они хотят, чтобы он был автоматически.
Можно, и как я могу получить метаданные GPS с фотографии (всегда JPEG) с помощью программы "Скрепка" и Ruby on Rails? Это можно сделать с помощью Paperclip или мне нужен другой камень?
Ответы
Ответ 1
Вам понадобится извлечь EXIF информацию с картинки.
Существует жемчужина, которая стремится сделать именно это: exifr
Вы можете установить его автоматически со следующей строкой поставщика:
gem 'exifr'
EDIT:
Я лично переключился на эту вилку того же драгоценного камня, который содержит 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
Ответ 2
вы не можете сделать это с помощью paperclip. 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 установлен и на пути, проверьте с помощью ", который идентифицирует" )
Ответ 3
Просто обновление принятого ответа выше, что очень помогло мне заставить 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/
Ответ 4
Если вы хотите использовать решение "более высокого уровня" (без exif напрямую), есть драгоценный камень https://github.com/aufi/photo_geoloader, который загружает широту, долготу и высоты и может поместить его в модель рельсов (в обратном вызове)
class Photo < ActiveRecord::Base
before_create do
PhotoGeoloader.new(photo.path).place_attributes self
end
...