exifr 1.2.6 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +13 -5
- data/CHANGELOG +4 -0
- data/README.rdoc +8 -4
- data/Rakefile +2 -1
- data/lib/exifr.rb +1 -4
- data/lib/exifr/jpeg.rb +2 -1
- data/lib/exifr/tiff.rb +23 -11
- data/tests/jpeg_test.rb +1 -1
- data/tests/test_helper.rb +3 -2
- data/tests/tiff_test.rb +1 -1
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
OWI5ZThmNGM1M2E2NDBhNzgyMzBmMDY0NWRlMzg0YjI5YWZkZjU2MA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
OTNiZmFhMTdmZTdhZjc5MThlYzFjZGNlNTZmZmI0Njc5ZTdhNjEwMw==
|
5
7
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
NzlmOTQxYzE5M2YyYjVlNDQ4YTgyYWIxZjdjY2IyYTYwODg5NDU0YTUzMTVj
|
10
|
+
YWViYzI4YWE0ZDBmYTRjMmI0MzIwMTgwNGRjYjVkNDdmNjNmNWNhN2ZlZWUx
|
11
|
+
ZWEzYzU2MzY0ZjkyMjJjZTJmZjNiZDhjMzUwY2ZjNTg5ZTJkMTg=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
ZDNiMDhhZWUxODU3M2U3NTExZTUzMTYxM2FhZjkzNTk5NmM2MmM1MGFkYjAw
|
14
|
+
YmE0MTI2MGI5NTdlZWFlZTI4MjJjY2IzZTMyMGNlZGVmZDlhMWVkODhjZDk2
|
15
|
+
YWJjNGZmZDM1ZjdlZWUzOWIxYzRkODdjMzcyOTdhNGY2OGQ4Mjk=
|
data/CHANGELOG
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
EXIF Reader 1.3.0
|
2
|
+
* workaround warnings when using the ruby "-w" option
|
3
|
+
* NOTE: requiring only 'exifr' will nolonger provide EXIFR::JPEG or EXIFR::TIFF, require 'exifr/jpeg' or 'exifr/tiff' instead
|
4
|
+
|
1
5
|
EXIF Reader 1.2.6
|
2
6
|
* bug fix; "[GH#48] handle empty file as malformed jpeg"; thanks Hoàng Xuân Phú
|
3
7
|
|
data/README.rdoc
CHANGED
@@ -1,7 +1,11 @@
|
|
1
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
|
+
|
2
5
|
EXIF Reader is a module to read metadata from JPEG and TIFF images.
|
3
6
|
|
4
7
|
== Examples
|
8
|
+
require 'exifr/jpeg'
|
5
9
|
EXIFR::JPEG.new('IMG_6841.JPG').width # => 2272
|
6
10
|
EXIFR::JPEG.new('IMG_6841.JPG').height # => 1704
|
7
11
|
EXIFR::JPEG.new('IMG_6841.JPG').exif? # => true
|
@@ -9,7 +13,10 @@ EXIF Reader is a module to read metadata from JPEG and TIFF images.
|
|
9
13
|
EXIFR::JPEG.new('IMG_6841.JPG').date_time # => Fri Feb 09 16:48:54 +0100 2007
|
10
14
|
EXIFR::JPEG.new('IMG_6841.JPG').exposure_time.to_s # => "1/15"
|
11
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
|
12
18
|
|
19
|
+
require 'exifr/tiff'
|
13
20
|
EXIFR::TIFF.new('DSC_0218.TIF').width # => 3008
|
14
21
|
EXIFR::TIFF.new('DSC_0218.TIF')[1].width # => 160
|
15
22
|
EXIFR::TIFF.new('DSC_0218.TIF').model # => "NIKON D1X"
|
@@ -17,9 +24,6 @@ EXIF Reader is a module to read metadata from JPEG and TIFF images.
|
|
17
24
|
EXIFR::TIFF.new('DSC_0218.TIF').exposure_time.to_s # => "1/100"
|
18
25
|
EXIFR::TIFF.new('DSC_0218.TIF').f_number.to_f # => 5.0
|
19
26
|
|
20
|
-
EXIFR::JPEG.new('enkhuizen.jpg').gps.latitude # => 52.7197888888889
|
21
|
-
EXIFR::JPEG.new('enkhuizen.jpg').gps.longitude # => 5.28397777777778
|
22
|
-
|
23
27
|
== Logging warnings
|
24
28
|
When EXIF information is malformed, a warning is logged to STDERR with
|
25
29
|
the standard Ruby logger. Log to some other location by supplying an
|
@@ -50,4 +54,4 @@ examples at https://github.com/amberbit/xmp
|
|
50
54
|
R.W. van 't Veer
|
51
55
|
|
52
56
|
== Copyright
|
53
|
-
Copyright (c) 2006-
|
57
|
+
Copyright (c) 2006-2017 - R.W. van 't Veer
|
data/Rakefile
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (c) 2006-
|
1
|
+
# Copyright (c) 2006-2017 - R.W. van 't Veer
|
2
2
|
|
3
3
|
require 'rake/testtask'
|
4
4
|
|
@@ -7,6 +7,7 @@ task :default => :test
|
|
7
7
|
Rake::TestTask.new do |t|
|
8
8
|
t.libs << 'lib' << 'tests'
|
9
9
|
t.test_files = FileList['tests/*_test.rb']
|
10
|
+
t.warning = true
|
10
11
|
end
|
11
12
|
|
12
13
|
begin
|
data/lib/exifr.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (c) 2006-
|
1
|
+
# Copyright (c) 2006-2017 - R.W. van 't Veer
|
2
2
|
|
3
3
|
require 'logger'
|
4
4
|
|
@@ -10,6 +10,3 @@ module EXIFR
|
|
10
10
|
class << self; attr_accessor :logger; end
|
11
11
|
self.logger = Logger.new(STDERR)
|
12
12
|
end
|
13
|
-
|
14
|
-
require 'exifr/jpeg'
|
15
|
-
require 'exifr/tiff'
|
data/lib/exifr/jpeg.rb
CHANGED
data/lib/exifr/tiff.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (c) 2007-
|
1
|
+
# Copyright (c) 2007-2017 - R.W. van 't Veer
|
2
2
|
|
3
3
|
require 'exifr'
|
4
4
|
require 'rational'
|
@@ -245,16 +245,16 @@ module EXIFR
|
|
245
245
|
self.mktime_proc = proc { |*args| Time.local(*args) }
|
246
246
|
|
247
247
|
time_proc = proc do |value|
|
248
|
-
value.map do |
|
249
|
-
if
|
248
|
+
value.map do |v|
|
249
|
+
if v =~ /^(\d{4}):(\d\d):(\d\d) (\d\d):(\d\d):(\d\d)$/
|
250
250
|
begin
|
251
251
|
mktime_proc.call($1.to_i, $2.to_i, $3.to_i, $4.to_i, $5.to_i, $6.to_i)
|
252
252
|
rescue => ex
|
253
|
-
EXIFR.logger.warn("Bad date/time value #{
|
253
|
+
EXIFR.logger.warn("Bad date/time value #{v.inspect}: #{ex}")
|
254
254
|
nil
|
255
255
|
end
|
256
256
|
else
|
257
|
-
|
257
|
+
v
|
258
258
|
end
|
259
259
|
end
|
260
260
|
end
|
@@ -356,13 +356,13 @@ module EXIFR
|
|
356
356
|
:date_time_original => time_proc,
|
357
357
|
:date_time_digitized => time_proc,
|
358
358
|
:date_time => time_proc,
|
359
|
-
:orientation => proc { |
|
359
|
+
:orientation => proc { |x| x.map{|y| ORIENTATIONS[y]} },
|
360
360
|
:gps_latitude => degrees_proc,
|
361
361
|
:gps_longitude => degrees_proc,
|
362
362
|
:gps_dest_latitude => degrees_proc,
|
363
363
|
:gps_dest_longitude => degrees_proc,
|
364
|
-
:shutter_speed_value => proc { |
|
365
|
-
:aperture_value => proc { |
|
364
|
+
:shutter_speed_value => proc { |x| x.map { |y| y.abs < 100 ? rational(1, (2 ** y).to_i) : nil } },
|
365
|
+
:aperture_value => proc { |x| x.map { |y| round(1.4142 ** y, 1) } }
|
366
366
|
})
|
367
367
|
|
368
368
|
# Names for all recognized TIFF fields.
|
@@ -377,9 +377,9 @@ module EXIFR
|
|
377
377
|
@ifds << ifd
|
378
378
|
end
|
379
379
|
|
380
|
-
@jpeg_thumbnails = @ifds.map do |
|
381
|
-
if
|
382
|
-
start, length =
|
380
|
+
@jpeg_thumbnails = @ifds.map do |v|
|
381
|
+
if v.jpeg_interchange_format && v.jpeg_interchange_format_length
|
382
|
+
start, length = v.jpeg_interchange_format, v.jpeg_interchange_format_length
|
383
383
|
data[start..(start + length)]
|
384
384
|
end
|
385
385
|
end.compact
|
@@ -424,6 +424,14 @@ module EXIFR
|
|
424
424
|
(super + TAGS + IFD.instance_methods(false)).uniq
|
425
425
|
end
|
426
426
|
|
427
|
+
def encode_with(coder)
|
428
|
+
coder["ifds"] = @ifds
|
429
|
+
end
|
430
|
+
|
431
|
+
def to_yaml_properties
|
432
|
+
['@ifds']
|
433
|
+
end
|
434
|
+
|
427
435
|
class << self
|
428
436
|
alias instance_methods_without_tiff_extras instance_methods
|
429
437
|
def instance_methods(include_super = true) # :nodoc:
|
@@ -508,6 +516,10 @@ module EXIFR
|
|
508
516
|
IFD.new(@data, @offset_next) if next?
|
509
517
|
end
|
510
518
|
|
519
|
+
def encode_with(coder)
|
520
|
+
coder["fields"] = @fields
|
521
|
+
end
|
522
|
+
|
511
523
|
def to_yaml_properties
|
512
524
|
['@fields']
|
513
525
|
end
|
data/tests/jpeg_test.rb
CHANGED
data/tests/test_helper.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
#
|
3
|
-
# Copyright (c) 2006-
|
3
|
+
# Copyright (c) 2006-2017 - R.W. van 't Veer
|
4
4
|
|
5
5
|
require 'stringio'
|
6
6
|
require 'pp'
|
@@ -24,7 +24,8 @@ TestCase = begin
|
|
24
24
|
end
|
25
25
|
|
26
26
|
$:.unshift("#{File.dirname(__FILE__)}/../lib")
|
27
|
-
require 'exifr'
|
27
|
+
require 'exifr/jpeg'
|
28
|
+
require 'exifr/tiff'
|
28
29
|
include EXIFR
|
29
30
|
|
30
31
|
EXIFR.logger = Logger.new(StringIO.new)
|
data/tests/tiff_test.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: exifr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- R.W. van 't Veer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-07-
|
11
|
+
date: 2017-07-06 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: EXIF Reader is a module to read EXIF from JPEG and TIFF images.
|
14
14
|
email: remco@remvee.net
|
@@ -57,25 +57,25 @@ licenses:
|
|
57
57
|
metadata: {}
|
58
58
|
post_install_message:
|
59
59
|
rdoc_options:
|
60
|
-
-
|
60
|
+
- --title
|
61
61
|
- EXIF Reader for Ruby API Documentation
|
62
|
-
-
|
62
|
+
- --main
|
63
63
|
- README.rdoc
|
64
64
|
require_paths:
|
65
65
|
- lib
|
66
66
|
required_ruby_version: !ruby/object:Gem::Requirement
|
67
67
|
requirements:
|
68
|
-
- -
|
68
|
+
- - ! '>='
|
69
69
|
- !ruby/object:Gem::Version
|
70
70
|
version: '0'
|
71
71
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ! '>='
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
requirements: []
|
77
77
|
rubyforge_project:
|
78
|
-
rubygems_version: 2.6.
|
78
|
+
rubygems_version: 2.6.12
|
79
79
|
signing_key:
|
80
80
|
specification_version: 4
|
81
81
|
summary: Read EXIF from JPEG and TIFF images
|