exifr 1.3.2 → 1.3.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/Gemfile +2 -0
- data/Rakefile +1 -1
- data/lib/exifr.rb +1 -1
- data/lib/exifr/jpeg.rb +7 -3
- data/lib/exifr/tiff.rb +19 -6
- data/tests/data/gps-altitude.jpg +0 -0
- data/tests/data/sony-a7ii.exif +0 -0
- data/tests/jpeg_test.rb +33 -1
- data/tests/test_helper.rb +1 -1
- data/tests/tiff_test.rb +9 -1
- metadata +48 -21
- data/CHANGELOG +0 -145
- data/README.rdoc +0 -57
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 875a312186a0f46c69201e260de535974566c112d4198f91c603c5a57112910d
|
4
|
+
data.tar.gz: 5735851e875b2a76f9bb73fb6a4556548fa1ae18ad8d0a0f5ed970648769054c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b7b828732884dddb926221ae91ab87e5bee58fdd39a31b26beb1b794db1764661864d2b67844e2ca2e8b5d6b728464005602c927dd0d7fb652f7f57d5a87040c
|
7
|
+
data.tar.gz: 828884d3ff08fa3b1855a233fe31868516c31b9cf6f2487dd0db4274e2fb28e643c02b5df3ae0b247033f7cc2afc45e46aef6826ec1ba14fe294a644a9a8f549
|
data/Gemfile
ADDED
data/Rakefile
CHANGED
data/lib/exifr.rb
CHANGED
data/lib/exifr/jpeg.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (c) 2006-
|
1
|
+
# Copyright (c) 2006-2020 - R.W. van 't Veer
|
2
2
|
|
3
3
|
require 'exifr'
|
4
4
|
require 'exifr/tiff'
|
@@ -66,8 +66,12 @@ module EXIFR
|
|
66
66
|
super || methods.include?(method) || (include_all && private_methods.include?(method))
|
67
67
|
end
|
68
68
|
|
69
|
-
def methods # :nodoc:
|
70
|
-
|
69
|
+
def methods(regular=true) # :nodoc:
|
70
|
+
if regular
|
71
|
+
super + TIFF::TAGS << :gps
|
72
|
+
else
|
73
|
+
super
|
74
|
+
end
|
71
75
|
end
|
72
76
|
|
73
77
|
class << self
|
data/lib/exifr/tiff.rb
CHANGED
@@ -237,6 +237,7 @@ module EXIFR
|
|
237
237
|
0x001c => :gps_area_information,
|
238
238
|
0x001d => :gps_date_stamp,
|
239
239
|
0x001e => :gps_differential,
|
240
|
+
0x001f => :gps_h_positioning_error
|
240
241
|
},
|
241
242
|
})
|
242
243
|
IFD_TAGS = [:image, :exif, :gps] # :nodoc:
|
@@ -249,9 +250,9 @@ module EXIFR
|
|
249
250
|
|
250
251
|
time_proc = proc do |value|
|
251
252
|
value.map do |v|
|
252
|
-
if v =~ /^(\d{4}):(\d\d):(\d\d) (\d\d):(\d\d):(\d\d)
|
253
|
+
if v =~ /^(\d{4}):(\d\d):(\d\d) (\d\d):(\d\d):(\d\d)(?:\.(\d{3}))?$/
|
253
254
|
begin
|
254
|
-
mktime_proc.call($1.to_i, $2.to_i, $3.to_i, $4.to_i, $5.to_i, $6.to_i)
|
255
|
+
mktime_proc.call($1.to_i, $2.to_i, $3.to_i, $4.to_i, $5.to_i, $6.to_i, $7.to_i * 1000)
|
255
256
|
rescue => ex
|
256
257
|
EXIFR.logger.warn("Bad date/time value #{v.inspect}: #{ex}")
|
257
258
|
nil
|
@@ -383,7 +384,12 @@ module EXIFR
|
|
383
384
|
@jpeg_thumbnails = @ifds.map do |v|
|
384
385
|
if v.jpeg_interchange_format && v.jpeg_interchange_format_length
|
385
386
|
start, length = v.jpeg_interchange_format, v.jpeg_interchange_format_length
|
386
|
-
|
387
|
+
if Integer === start && Integer === length
|
388
|
+
data[start..(start + length)]
|
389
|
+
else
|
390
|
+
EXIFR.logger.warn("Non numeric JpegInterchangeFormat data")
|
391
|
+
nil
|
392
|
+
end
|
387
393
|
end
|
388
394
|
end.compact
|
389
395
|
end
|
@@ -423,8 +429,12 @@ module EXIFR
|
|
423
429
|
TAGS.include?(method)
|
424
430
|
end
|
425
431
|
|
426
|
-
def methods # :nodoc:
|
427
|
-
|
432
|
+
def methods(regular=true) # :nodoc:
|
433
|
+
if regular
|
434
|
+
(super + TAGS + IFD.instance_methods(false)).uniq
|
435
|
+
else
|
436
|
+
super
|
437
|
+
end
|
428
438
|
end
|
429
439
|
|
430
440
|
def encode_with(coder)
|
@@ -456,9 +466,12 @@ module EXIFR
|
|
456
466
|
# Get GPS location, altitude and image direction return nil when not available.
|
457
467
|
def gps
|
458
468
|
return nil unless gps_latitude && gps_longitude
|
469
|
+
|
470
|
+
altitude = gps_altitude.is_a?(Array) ? gps_altitude.first : gps_altitude
|
471
|
+
|
459
472
|
GPS.new(gps_latitude.to_f * (gps_latitude_ref == 'S' ? -1 : 1),
|
460
473
|
gps_longitude.to_f * (gps_longitude_ref == 'W' ? -1 : 1),
|
461
|
-
|
474
|
+
altitude && (altitude.to_f * (gps_altitude_ref == "\1" ? -1 : 1)),
|
462
475
|
gps_img_direction && gps_img_direction.to_f)
|
463
476
|
end
|
464
477
|
|
Binary file
|
Binary file
|
data/tests/jpeg_test.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
#
|
3
|
-
# Copyright (c) 2006-
|
3
|
+
# Copyright (c) 2006-2020 - R.W. van 't Veer
|
4
4
|
|
5
5
|
require 'test_helper'
|
6
6
|
|
@@ -103,6 +103,13 @@ class JPEGTest < TestCase
|
|
103
103
|
end
|
104
104
|
end
|
105
105
|
|
106
|
+
def test_methods_method
|
107
|
+
j = JPEG.new(f('exif.jpg'))
|
108
|
+
assert j.methods.include?(:date_time)
|
109
|
+
assert j.methods(true).include?(:date_time)
|
110
|
+
assert ! j.methods(false).include?(:date_time)
|
111
|
+
end
|
112
|
+
|
106
113
|
def test_multiple_app1
|
107
114
|
assert JPEG.new(f('multiple-app1.jpg')).exif?
|
108
115
|
end
|
@@ -119,4 +126,29 @@ class JPEGTest < TestCase
|
|
119
126
|
|
120
127
|
assert count > 0, 'no thumbnails found'
|
121
128
|
end
|
129
|
+
|
130
|
+
def test_gps_with_altitude
|
131
|
+
t = JPEG.new(f('gps-altitude.jpg'))
|
132
|
+
|
133
|
+
assert_equal([Rational(230, 1), Rational(0, 1), Rational(0, 1)], t.gps_altitude)
|
134
|
+
assert_equal(230, t.gps.altitude)
|
135
|
+
end
|
136
|
+
|
137
|
+
def test_exif_datetime_milliseconds
|
138
|
+
if Time.now.strftime('%L') == '%L'
|
139
|
+
STDERR.puts("skipping milliseconds test; not supported on this platform")
|
140
|
+
return
|
141
|
+
end
|
142
|
+
|
143
|
+
j = JPEG.new(f('exif.jpg'))
|
144
|
+
assert_equal('000', j.date_time.strftime('%L'))
|
145
|
+
assert_equal('000', j.date_time_original.strftime('%L'))
|
146
|
+
assert_equal('000', j.date_time_digitized.strftime('%L'))
|
147
|
+
|
148
|
+
j = JPEG.new(f('ios-mspix-milliseconds.jpg'))
|
149
|
+
assert_equal('978', j.date_time.strftime('%L'))
|
150
|
+
assert_equal('978', j.date_time_original.strftime('%L'))
|
151
|
+
assert_equal('978', j.date_time_digitized.strftime('%L'))
|
152
|
+
end
|
153
|
+
|
122
154
|
end
|
data/tests/test_helper.rb
CHANGED
data/tests/tiff_test.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
#
|
3
|
-
# Copyright (c) 2006-
|
3
|
+
# Copyright (c) 2006-2020 - R.W. van 't Veer
|
4
4
|
|
5
5
|
require 'test_helper'
|
6
6
|
|
@@ -112,6 +112,7 @@ class TIFFTest < TestCase
|
|
112
112
|
assert_equal('WGS84', t.gps_map_datum)
|
113
113
|
assert_equal(54, t.gps.latitude.round)
|
114
114
|
assert_equal(-7, t.gps.longitude.round)
|
115
|
+
assert_nil(t.gps.altitude)
|
115
116
|
|
116
117
|
(all_test_exifs - %w(gps user-comment out-of-range negative-exposure-bias-value).map{|v| f("#{v}.exif")}).each do |fname|
|
117
118
|
assert_nil TIFF.new(fname).gps_version_id
|
@@ -198,4 +199,11 @@ class TIFFTest < TestCase
|
|
198
199
|
def test_nul_terminated_strings
|
199
200
|
assert_equal 'GoPro', TIFF.new(f('gopro_hd2.exif')).make
|
200
201
|
end
|
202
|
+
|
203
|
+
def test_methods_method
|
204
|
+
t = TIFF.new(f('gopro_hd2.exif'))
|
205
|
+
assert t.methods.include?(:make)
|
206
|
+
assert t.methods(true).include?(:make)
|
207
|
+
assert ! t.methods(false).include?(:make)
|
208
|
+
end
|
201
209
|
end
|
metadata
CHANGED
@@ -1,26 +1,51 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: exifr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- R.W. van 't Veer
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
11
|
+
date: 2020-09-11 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: test-unit
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 3.1.5
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 3.1.5
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '12'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '12'
|
13
41
|
description: EXIF Reader is a module to read EXIF from JPEG and TIFF images.
|
14
|
-
email:
|
42
|
+
email: exifr@remworks.net
|
15
43
|
executables:
|
16
44
|
- exifr
|
17
45
|
extensions: []
|
18
|
-
extra_rdoc_files:
|
19
|
-
- README.rdoc
|
20
|
-
- CHANGELOG
|
46
|
+
extra_rdoc_files: []
|
21
47
|
files:
|
22
|
-
-
|
23
|
-
- README.rdoc
|
48
|
+
- Gemfile
|
24
49
|
- Rakefile
|
25
50
|
- bin/exifr
|
26
51
|
- lib/exifr.rb
|
@@ -38,6 +63,7 @@ files:
|
|
38
63
|
- tests/data/endless-loop.exif
|
39
64
|
- tests/data/exif.jpg
|
40
65
|
- tests/data/gopro_hd2.exif
|
66
|
+
- tests/data/gps-altitude.jpg
|
41
67
|
- tests/data/gps.exif
|
42
68
|
- tests/data/image.jpg
|
43
69
|
- tests/data/multiple-app1.jpg
|
@@ -46,6 +72,7 @@ files:
|
|
46
72
|
- tests/data/out-of-range.exif
|
47
73
|
- tests/data/plain.tif
|
48
74
|
- tests/data/samsung-sc-02b.jpg
|
75
|
+
- tests/data/sony-a7ii.exif
|
49
76
|
- tests/data/user-comment.exif
|
50
77
|
- tests/data/weird_date.exif
|
51
78
|
- tests/jpeg_test.rb
|
@@ -54,29 +81,29 @@ files:
|
|
54
81
|
homepage: http://github.com/remvee/exifr/
|
55
82
|
licenses:
|
56
83
|
- MIT
|
57
|
-
metadata:
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
84
|
+
metadata:
|
85
|
+
bug_tracker_uri: https://github.com/remvee/exifr/issues
|
86
|
+
changelog_uri: https://github.com/remvee/exifr/blob/master/CHANGELOG
|
87
|
+
documentation_uri: https://remvee.github.io/exifr/api/
|
88
|
+
homepage_uri: https://remvee.github.io/exifr/
|
89
|
+
source_code_uri: https://github.com/remvee/exifr
|
90
|
+
post_install_message:
|
91
|
+
rdoc_options: []
|
64
92
|
require_paths:
|
65
93
|
- lib
|
66
94
|
required_ruby_version: !ruby/object:Gem::Requirement
|
67
95
|
requirements:
|
68
96
|
- - ">="
|
69
97
|
- !ruby/object:Gem::Version
|
70
|
-
version:
|
98
|
+
version: 1.8.7
|
71
99
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
72
100
|
requirements:
|
73
101
|
- - ">="
|
74
102
|
- !ruby/object:Gem::Version
|
75
103
|
version: '0'
|
76
104
|
requirements: []
|
77
|
-
|
78
|
-
|
79
|
-
signing_key:
|
105
|
+
rubygems_version: 3.1.4
|
106
|
+
signing_key:
|
80
107
|
specification_version: 4
|
81
108
|
summary: Read EXIF from JPEG and TIFF images
|
82
109
|
test_files: []
|
data/CHANGELOG
DELETED
@@ -1,145 +0,0 @@
|
|
1
|
-
EXIF Reader 1.3.2
|
2
|
-
* enhancement; "Add EXIF 2.3 lens information tags"; thanks Clay Gregory
|
3
|
-
|
4
|
-
EXIF Reader 1.3.1
|
5
|
-
* fix executable bin/exifr
|
6
|
-
|
7
|
-
EXIF Reader 1.3.0
|
8
|
-
* workaround warnings when using the ruby "-w" option
|
9
|
-
* NOTE: requiring only 'exifr' will nolonger provide EXIFR::JPEG or EXIFR::TIFF, require 'exifr/jpeg' or 'exifr/tiff' instead
|
10
|
-
|
11
|
-
EXIF Reader 1.2.6
|
12
|
-
* bug fix; "[GH#48] handle empty file as malformed jpeg"; thanks Hoàng Xuân Phú
|
13
|
-
|
14
|
-
EXIF Reader 1.2.5
|
15
|
-
* bug fix; "[GH#46] Having stringified methods is not a good idea"; thanks Filipe Costa
|
16
|
-
* bug fix; "Fix typo in subsec_time_original key"; thanks Filipe Costa
|
17
|
-
|
18
|
-
EXIF Reader 1.2.4
|
19
|
-
* bug fix; "[GH#43] Fix `respond_to?` signature"; thanks Pete Johns
|
20
|
-
|
21
|
-
EXIF Reader 1.2.3.1
|
22
|
-
* bug fix; "[GH#41] gopro_hd2.exif is not included in the gem"; thanks Peter Wilmott
|
23
|
-
|
24
|
-
EXIF Reader 1.2.3
|
25
|
-
* bug fix; "[GH#40] Handle NUL-terminated ASCII strings"; thanks Malte Rohde
|
26
|
-
|
27
|
-
EXIF Reader 1.2.2
|
28
|
-
* bug fix; "use Reader delegator instead of adding method to File instance"; thanks Ivan Kuchin
|
29
|
-
|
30
|
-
EXIF Reader 1.2.1
|
31
|
-
* bug fix: Value of infinity yields division by zero error
|
32
|
-
|
33
|
-
EXIF Reader 1.2.0
|
34
|
-
* enhancement; "log warnings when EXIF data is malformed"
|
35
|
-
* enhancement; "allow alternative Time adapter"
|
36
|
-
* enhancement; "[GH#33] add reader for orientation type"; thanks Damir Svrtan
|
37
|
-
|
38
|
-
EXIF Reader 1.1.3
|
39
|
-
* bug fix; "[GH#27] some error when :shutter_speed_value is too big"; thanks to zamia
|
40
|
-
|
41
|
-
EXIF Reader 1.1.2
|
42
|
-
* bug fix; "[GH#25] Incorrect values being extracted for a number of fields"; thanks to Matthew McEachen
|
43
|
-
|
44
|
-
EXIF Reader 1.1.1
|
45
|
-
* feature; "added gps convenience method to make accessing location data easier (degrees to float conversion)"
|
46
|
-
* bug fix; "[GH#22] Fix warnings about uninitialized @comment"; thanks to Ryan Greenberg"
|
47
|
-
|
48
|
-
EXIF Reader 1.0.6
|
49
|
-
* bug fix: "[GH#20] `readlong': undefined method `unpack' for nil:NilClass (NoMethodError)"
|
50
|
-
|
51
|
-
EXIF Reader 1.0.5
|
52
|
-
* bug fix: "[GH#19] files opened by TIFF initialize were not being closed"; thanks to Joe Van Overberghe
|
53
|
-
|
54
|
-
EXIF Reader 1.0.4
|
55
|
-
* bug fix: "[GH#17] avoid library search path pollution"
|
56
|
-
* enhancement: "[GH#18] add EXIFR::JPEG#app1s method"
|
57
|
-
|
58
|
-
EXIF Reader 1.0.3
|
59
|
-
* enhancement; "raise specific exception to allow better error handling"; thanks to James Miller
|
60
|
-
|
61
|
-
EXIF Reader 1.0.2
|
62
|
-
* bug fix; "[GH#9/12] no block given"; thanks to Ian Leitch
|
63
|
-
|
64
|
-
EXIF Reader 1.0.1
|
65
|
-
* bug fix; "[GH#7] Unable to properly display exposure_bias_value"; thanks to John Krueger
|
66
|
-
|
67
|
-
EXIF Reader 1.0.0
|
68
|
-
* bug fix; "ArgumentError: invalid byte sequence in UTF-8" when reading messy field using Ruby 1.9+
|
69
|
-
* enhancement; "[GH#4] more informative inspect for EXIFR::TIFF::Orientation instance"
|
70
|
-
* bug fix; "[GH#6] ERROR RuntimeError: can't add a new key into hash during iteration"; thanks to KISHIMOTO, Makoto
|
71
|
-
|
72
|
-
EXIF Reader 0.10.9
|
73
|
-
* bug fix; "[GH#1] user_comment returns nil for jpeg with UserComment"; thanks to Mark Lundquist
|
74
|
-
* bug fix; "[GH#2] Nil pointer in tiff.rb"
|
75
|
-
* enhancement; "don't read entire files into memory"; thanks to Victor Bogado
|
76
|
-
|
77
|
-
EXIF Reader 0.10.8
|
78
|
-
* feature request; "[#23694] The object interface of JPEG is different from the TIFF one."
|
79
|
-
|
80
|
-
EXIF Reader 0.10.7
|
81
|
-
* bug fix; "[#22403] Wrong file size reported"
|
82
|
-
|
83
|
-
EXIF Reader 0.10.6.1
|
84
|
-
* moved to GitHub
|
85
|
-
|
86
|
-
EXIF Reader 0.10.6
|
87
|
-
* bug fix (thanks to Forian Munz for reporting it); endless loop when reading a malformed EXIF/TIFF
|
88
|
-
|
89
|
-
EXIF Reader 0.10.5
|
90
|
-
* bug fix; "[#15421] duplicate orientation field behavior", first field (of any type) is leading now
|
91
|
-
* Ruby 1.9 compatible
|
92
|
-
|
93
|
-
EXIF Reader 0.10.4
|
94
|
-
* Thumbnail extraction; [#15317] Please add thumbnail extraction
|
95
|
-
|
96
|
-
EXIF Reader 0.10.3
|
97
|
-
* YAML friendly; can now safely (de)serialize
|
98
|
-
|
99
|
-
EXIF Reader 0.10.2
|
100
|
-
* bug fix (thanks to Alexander Staubo for providing me with sample data);
|
101
|
-
don't fail on out-of-range IFD offsets for Apple Aperture generated JPGs
|
102
|
-
|
103
|
-
EXIF Reader 0.10.1
|
104
|
-
* old style exif access
|
105
|
-
|
106
|
-
EXIF Reader 0.10
|
107
|
-
* TIFF support
|
108
|
-
|
109
|
-
EXIF Reader 0.9.6
|
110
|
-
* bug fix; "[#8458] Conversion from string to Time fails", weird dates will now reflect nil
|
111
|
-
|
112
|
-
EXIF Reader 0.9.5.1
|
113
|
-
* make tinderbox happy by hiding rcov task
|
114
|
-
|
115
|
-
EXIF Reader 0.9.5
|
116
|
-
* patch calls to jpeg through to exif, i.e. jpeg., i.e. jpeg.model == jpeg.exif.model
|
117
|
-
* fix exifr commandline utility, needs require 'exifr' now
|
118
|
-
* improve test helper
|
119
|
-
* reduce size of test images
|
120
|
-
* include tests for tinderbox
|
121
|
-
|
122
|
-
EXIF Reader 0.9.4
|
123
|
-
* bug fix (thanks to Benjamin Storrier for providing me with sample date);
|
124
|
-
multiple app1 frames will potentially overwrite EXIF tag
|
125
|
-
|
126
|
-
EXIF Reader 0.9.3
|
127
|
-
* bug fix; "[#4876] Unable to extract gpsinfo"
|
128
|
-
* one-off bug in TiffHeader found and fixed
|
129
|
-
* make "InteroperabilityIndex" available
|
130
|
-
|
131
|
-
EXIF Reader 0.9.2
|
132
|
-
* bug fix; "[#4595] EXIFR::JPEG doesn't support multiple comments", the
|
133
|
-
comment property of a JPEG object now contains an array instead of a string
|
134
|
-
when multiple COM frames are found
|
135
|
-
* EXIF orientation modules including RMagick code to rotate to viewable state
|
136
|
-
* access to thumbnail included in EXIF
|
137
|
-
* simple commandline utility, "exifr", to view image properties
|
138
|
-
* overall code improvements including documentation and tests
|
139
|
-
|
140
|
-
EXIF Reader 0.9.1
|
141
|
-
* bug fix; "4321 Can't create object", division by zero when
|
142
|
-
denominator of rational value is zero
|
143
|
-
|
144
|
-
EXIF Reader 0.9
|
145
|
-
* 1st release
|
data/README.rdoc
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
= EXIF Reader
|
2
|
-
{<img src="https://badge.fury.io/rb/exifr.svg" alt="Gem Version" />}[https://badge.fury.io/rb/exifr]
|
3
|
-
{<img src="https://circleci.com/gh/remvee/exifr/tree/master.svg?style=shield&circle-token=7d957be2d7195f5d07a7c1962926ee626b050c2e" alt="Circle CI" />}[https://circleci.com/gh/remvee/exifr]
|
4
|
-
|
5
|
-
EXIF Reader is a module to read metadata from JPEG and TIFF images.
|
6
|
-
|
7
|
-
== Examples
|
8
|
-
require 'exifr/jpeg'
|
9
|
-
EXIFR::JPEG.new('IMG_6841.JPG').width # => 2272
|
10
|
-
EXIFR::JPEG.new('IMG_6841.JPG').height # => 1704
|
11
|
-
EXIFR::JPEG.new('IMG_6841.JPG').exif? # => true
|
12
|
-
EXIFR::JPEG.new('IMG_6841.JPG').model # => "Canon PowerShot G3"
|
13
|
-
EXIFR::JPEG.new('IMG_6841.JPG').date_time # => Fri Feb 09 16:48:54 +0100 2007
|
14
|
-
EXIFR::JPEG.new('IMG_6841.JPG').exposure_time.to_s # => "1/15"
|
15
|
-
EXIFR::JPEG.new('IMG_6841.JPG').f_number.to_f # => 2.0
|
16
|
-
EXIFR::JPEG.new('enkhuizen.jpg').gps.latitude # => 52.7197888888889
|
17
|
-
EXIFR::JPEG.new('enkhuizen.jpg').gps.longitude # => 5.28397777777778
|
18
|
-
|
19
|
-
require 'exifr/tiff'
|
20
|
-
EXIFR::TIFF.new('DSC_0218.TIF').width # => 3008
|
21
|
-
EXIFR::TIFF.new('DSC_0218.TIF')[1].width # => 160
|
22
|
-
EXIFR::TIFF.new('DSC_0218.TIF').model # => "NIKON D1X"
|
23
|
-
EXIFR::TIFF.new('DSC_0218.TIF').date_time # => Tue May 23 19:15:32 +0200 2006
|
24
|
-
EXIFR::TIFF.new('DSC_0218.TIF').exposure_time.to_s # => "1/100"
|
25
|
-
EXIFR::TIFF.new('DSC_0218.TIF').f_number.to_f # => 5.0
|
26
|
-
|
27
|
-
== Logging warnings
|
28
|
-
When EXIF information is malformed, a warning is logged to STDERR with
|
29
|
-
the standard Ruby logger. Log to some other location by supplying an
|
30
|
-
alternative implementation:
|
31
|
-
|
32
|
-
EXIFR.logger = SyslogLogger.new
|
33
|
-
|
34
|
-
== Time zone support
|
35
|
-
EXIF does not support time zones so this code does not support time
|
36
|
-
zones. All time stamps are created in the local time zone with:
|
37
|
-
|
38
|
-
Time.local(..)
|
39
|
-
|
40
|
-
It is possible to change this behavior by supplying an alternative
|
41
|
-
implementation. For those who prefer UTC:
|
42
|
-
|
43
|
-
EXIFR::TIFF.mktime_proc = proc{|*args| Time.utc(*args)}
|
44
|
-
|
45
|
-
Or when the application depends on ActiveSupport for time zone handling:
|
46
|
-
|
47
|
-
EXIFR::TIFF.mktime_proc = proc{|*args| Time.zone.local(*args)}
|
48
|
-
|
49
|
-
== XMP data access
|
50
|
-
If you need to access XMP data you can use the xmp gem. More info and
|
51
|
-
examples at https://github.com/amberbit/xmp
|
52
|
-
|
53
|
-
== Author
|
54
|
-
R.W. van 't Veer
|
55
|
-
|
56
|
-
== Copyright
|
57
|
-
Copyright (c) 2006-2017 - R.W. van 't Veer
|