`
hot88zh
  • 浏览: 184345 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用Ruby解析图片EXIF数据获取坐标信息

阅读更多

最近在做一个项目时需要将图片EXIF信息解析出来并获取相应GPS坐标信息,用于在Google Map中使用, 找到了一些Ruby解析EXIF信息的类库, 相比之下还是 exifr这个gem不错, 零依赖,直接ruby调用.

1. 获取EXIF信息

require 'rubygems'
require 'exifr'

obj = EXIFR::JPEG.new('geo.jpg')
if obj.exif?
  puts "--- EXIF information ---".center(50)
  hash??= obj.exif.to_hash
  hash.each_pair do |k, v|
    puts "-- #{k.to_s.rjust(20)} -> #{v}"
  end
end

 运行上述代码后效果如下:

 
             --- EXIF information ---             
--     gps_latitude_ref -> N
--    pixel_x_dimension -> 600
--   date_time_original -> Sat Nov 21 09:24:08 +0800 2009
--         y_resolution -> 72
--      resolution_unit -> 2
-- gps_img_direction_ref -> T
--     exposure_program -> 2
--   ycb_cr_positioning -> 1
--            sharpness -> 1
--    pixel_y_dimension -> 800
--                flash -> 32
--  date_time_digitized -> Sat Nov 21 09:24:08 +0800 2009
--                 make -> Apple
--    gps_img_direction -> 102933/295
--        gps_longitude -> 104809/200
--         focal_length -> 77/20
--                model -> iPhone 3GS
--             software -> 3.1.2
--       gps_time_stamp -> 924417/100
--    iso_speed_ratings -> 76
--    gps_longitude_ref -> W
--            date_time -> Sat Nov 21 09:24:08 +0800 2009
--        exposure_mode -> 0
--  shutter_speed_value -> 5855/1277
--        exposure_time -> 1/24
--         gps_latitude -> 391019/200
--       sensing_method -> 2
--          color_space -> 1
--        metering_mode -> 1
--         x_resolution -> 72
--        white_balance -> 0
--       aperture_value -> 4281/1441
--             f_number -> 14/5

 未加工前的坐标信息是以时/分/秒构成的, 类似这样:

:gps_latitude=>[Rational(39, 1), Rational(1019, 20), Rational(0, 1)]
 为了在Google Map中显示图片拍摄的位置信息,需要得到坐标的两个值, 但直接获取的数据仍然需要进行一下加工方可正常使用.

2. 加工坐标信息

lat = obj.exif[0].gps_latitude[0].to_f + (obj.exif[0].gps_latitude[1].to_f / 60) + (obj.exif[0].gps_latitude[2].to_f / 3600)
lat = lat * -1 if obj.exif[0].gps_latitude_ref == 'S'    # (N is +, S is -)
long = obj.exif[0].gps_longitude[0].to_f + (obj.exif[0].gps_longitude[1].to_f / 60) + (obj.exif[0].gps_longitude[2].to_f / 3600) 
long = long * -1 if obj.exif[0].gps_longitude_ref == 'W' # (W is -, E is +)

 加工后的坐标信息类似这样:

39.8491666666667 #  lat
-104.674166666667 # long

 坐标转换方法

# Example. Assume a latitude of 45° 53' 36" (45 degrees, 53 minutes and 36 seconds). In degrees, the latitude will be:
latitude = 45 + (53 / 60) + (36 / 3600) = 45.89
# General Formulation:
latitude (degrees) = degrees + (minutes / 60) + (seconds / 3600)
 完事, 收工. 如果希望得到验证,可以将产生的坐标信息录入>这里<进行检查.
分享到:
评论

相关推荐

    使用ruby解析awdb离线库

    使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库...

    Ruby-QRcode一个用于解析QR码的Ruby库

    QR码,全称为Quick Response Code(快速响应码),是一种二维条形码,可以存储各种数据,如文本、URL、联系人信息、日历事件等,并且在手机扫描应用中广泛使用。Ruby-QRcode库为开发者提供了便捷的接口,使得在Ruby...

    ruby 移动图片小工具

    对于图片的元数据,如拍摄日期,Ruby可能通过ImageMagick或MiniMagick这样的第三方库来获取,这两个库能够解析常见的图像文件格式,并提供读取元数据的方法。一旦获取到日期信息,程序会使用`Time`类或`Date`类来...

    Ruby-Crystal的一个Html解析器类似于Ruby的Nokogiri

    解析这些文档能够帮助开发者提取信息、验证结构或者进行内容的修改。 在“压缩包子文件的文件名称列表”中提到了"madeindjs-Crystagiri-f43ce36",这很可能是该项目的Git仓库名称或者是特定版本的标识。"madeindjs...

    ruby图片处理工具

    Ruby 图片处理工具主要指的是利用 Ruby 语言的库来对图像进行操作,如编辑、转换、裁剪等。在这个特定的场景中,我们关注的是一个针对 Windows 操作系统的 Ruby Gem 安装包,它包含了 Rmagick 和 ImageMagick 这两个...

    Ruby-HappyMapper允许您快速轻松地解析XML数据并将其转换成ruby的数据结构

    一旦定义好这个类,我们就可以使用`parse`方法解析XML字符串或文件,将数据转换成Ruby对象: ```ruby xml = '&lt;user&gt;&lt;id&gt;1&lt;/id&gt;&lt;name&gt;John Doe&lt;/name&gt;&lt;email&gt;johndoe@example.com&lt;/email&gt;&lt;/user&gt;' user = User.parse...

    Ruby-Whois一个智能纯Ruby实现的WHOIS客户端与解析器

    WHOIS是一种基于TCP的查询协议,用于获取互联网上域名、IP地址等资源的所有权和管理信息。Ruby-Whois库简化了与WHOIS服务器交互的过程,使得开发者无需深入理解WHOIS协议的复杂性,就可以轻松地集成WHOIS查询功能到...

    innodb_ruby, 在 ruby 中,一个解析器格式的解析器,.zip

    innodb_ruby, 在 ruby 中,一个解析器格式的解析器, 文件格式的解析器,在 ruby 中这个库和工具的目的是暴露一些隐藏的InnoDB内部。 这里代码不用于关键的生产使用。 它很有可能是危险的而且可能是危险的。 它的...

    ruby使用REXML解析处理xml.pdf

    Ruby 使用 REXML 解析处理 XML REXML 是一个 Ruby 库,用于解析和处理 XML 文档。下面是使用 REXML 解析处理 XML 的一些知识点: 1. 基本使用:使用 REXML 解析 XML 文档,需要首先将 XML 字符串转换为 Document ...

    解析器:Ruby解析器

    解析器是用纯Ruby编写的可用于生产的Ruby解析器。 它比Ripper,Melbourne,JRubyParser或ruby_parser识别更多或更多的代码,并且使用起来更加方便。 您还可以使用从Parser的AST生成等效的源代码。 由赞助。 由...

    ruby中xml文件解析

    ruby对xml文件的解析,不是很全,应该还是有一定帮助的

    Text Processing with Ruby ruby文档解析

    从给定文件信息中提取的知识点如下...书中不仅仅涵盖了Ruby文本处理的基础知识,还有助于初学者及有经验的程序员深入了解Ruby语言在数据处理方面的强大功能。此外,它还透露了出版行业在处理书籍格式问题时的一些细节。

    Ruby-TreetopPEG解析表达式语法解析器

    Ruby-Treetop PEG解析表达式语法解析器是一种强大的工具,用于在Ruby环境中构建和解析复杂的语言结构。Treetop是Ruby社区中的一个流行库,它利用了解析表达式语法(PEG,Parsing Expression Grammar)的概念,使...

    Ruby-rgeoRuby的地理空间数据的库

    它为开发者提供了丰富的功能,使得在Ruby环境中进行地理信息系统(GIS)相关的开发变得更加便捷。Rgeo库不仅支持基本的空间数据类型,还包含了复杂的几何运算以及与Well-Known Text (WKT)和Well-Known Binary (WKB)...

    ruby使用json库

    Ruby内置了对JSON的支持,通过JSON库,我们可以方便地进行JSON数据的解析和生成。 JSON库在Ruby中的使用主要包括两个主要功能:解析(parsing)和生成(generation)。解析是指将JSON格式的字符串转换为Ruby对象,...

    使用Ruby来处理文本的教程

    在处理XML数据时,Ruby的REXML库能够解析和生成XML文档,支持XML数据的提取和操作。 总的来说,Ruby是处理文本数据的强大工具,它的字符串操作能力极其强大,且对处理CSV和XML等常见文本格式提供了现成的模块库。...

    Ruby Data-Processing ruby数据处理

    在Ruby中,这三个方法常常一起使用,形成强大的数据处理流水线。比如,你可以先使用Map对数据进行转换,然后用Reduce进行聚合,最后通过Select进行过滤。这样的组合提供了灵活且高效的处理大量数据的方式。 阅读...

Global site tag (gtag.js) - Google Analytics