exifr 1.3.9 → 1.3.10
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 +4 -4
- data/lib/exifr/tiff.rb +18 -13
- data/tests/data/bad_gps.exif +0 -0
- data/tests/data/ios-mspix-milliseconds.jpg +0 -0
- data/tests/data/truncated.exif +0 -0
- data/tests/tiff_test.rb +10 -1
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 97fa3270a4d14398a02e6bd725753980ae12b74c2f0a6e3c160b840c59c7febf
|
4
|
+
data.tar.gz: ec8ed547c94ad6dd83c0a07bb78530408d48637b18edfeb68dcb157a55c5c618
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3d10126d25f29634c46c8b5dce11ebd9dbc373c02fc892a74cdb8cbf6aa3cef8086e2a6be2eaac2a65bc83fa64a6f517617e22dc47bc4ea56db631b678a3ee3a
|
7
|
+
data.tar.gz: b98ee638dc85ab51c1f86d5b9c34c417047a79d2abb920ee8a13e7decfaf8b66fb484d7d804461de276a3f87fd40f5e30c1a420e3b25e46db51e801f77acc9c3
|
data/lib/exifr/tiff.rb
CHANGED
@@ -482,10 +482,10 @@ module EXIFR
|
|
482
482
|
end
|
483
483
|
|
484
484
|
class IFD # :nodoc:
|
485
|
-
attr_reader :type, :fields, :offset
|
485
|
+
attr_reader :type, :raw_fields, :fields, :offset
|
486
486
|
|
487
487
|
def initialize(data, offset = nil, type = :image)
|
488
|
-
@data, @offset, @type, @fields = data, offset, type, {}
|
488
|
+
@data, @offset, @type, @raw_fields, @fields = data, offset, type, {}, {}
|
489
489
|
|
490
490
|
pos = offset || @data.readlong(4)
|
491
491
|
num = @data.readshort(pos)
|
@@ -546,15 +546,16 @@ module EXIFR
|
|
546
546
|
|
547
547
|
private
|
548
548
|
def add_field(field)
|
549
|
-
return
|
550
|
-
|
549
|
+
return if @raw_fields.include?(field.tag) # first encountered value wins
|
550
|
+
@raw_fields[field.tag] = field.value
|
551
551
|
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
|
552
|
+
return unless tag = TAG_MAPPING[@type][field.tag]
|
553
|
+
@fields[tag] = if IFD_TAGS.include?(tag)
|
554
|
+
IFD.new(@data, field.offset, tag)
|
555
|
+
else
|
556
|
+
value = ADAPTERS[tag][field.value]
|
557
|
+
value.kind_of?(Array) && value.size == 1 ? value.first : value
|
558
|
+
end
|
558
559
|
end
|
559
560
|
end
|
560
561
|
|
@@ -604,6 +605,10 @@ module EXIFR
|
|
604
605
|
end
|
605
606
|
rationals
|
606
607
|
end
|
608
|
+
when 11 # float
|
609
|
+
len, pack = count * 4, proc { |d| d.unpack(data.float + '*') }
|
610
|
+
when 12 # double
|
611
|
+
len, pack = count * 8, proc { |d| d.unpack(data.double + '*') }
|
607
612
|
else
|
608
613
|
return
|
609
614
|
end
|
@@ -638,7 +643,7 @@ module EXIFR
|
|
638
643
|
end
|
639
644
|
|
640
645
|
class Data #:nodoc:
|
641
|
-
attr_reader :short, :long, :file
|
646
|
+
attr_reader :short, :long, :float, :double, :file
|
642
647
|
|
643
648
|
def initialize(file)
|
644
649
|
@io = file.respond_to?(:read) ? file : (@file = File.open(file, 'rb'))
|
@@ -646,8 +651,8 @@ module EXIFR
|
|
646
651
|
@pos = 0
|
647
652
|
|
648
653
|
case self[0..1]
|
649
|
-
when 'II'; @short, @long = 'v', 'V'
|
650
|
-
when 'MM'; @short, @long = 'n', 'N'
|
654
|
+
when 'II'; @short, @long, @float, @double = 'v', 'V', 'e', 'E'
|
655
|
+
when 'MM'; @short, @long, @float, @double = 'n', 'N', 'g', 'G'
|
651
656
|
else
|
652
657
|
raise MalformedTIFF, "no byte order information found"
|
653
658
|
end
|
Binary file
|
Binary file
|
Binary file
|
data/tests/tiff_test.rb
CHANGED
@@ -165,7 +165,12 @@ class TIFFTest < TestCase
|
|
165
165
|
all_test_tiffs.each do |fname|
|
166
166
|
t = TIFF.new(fname)
|
167
167
|
y = YAML.dump(t)
|
168
|
-
|
168
|
+
v = if YAML.respond_to?(:unsafe_load)
|
169
|
+
YAML.unsafe_load(y)
|
170
|
+
else
|
171
|
+
YAML.load(y)
|
172
|
+
end
|
173
|
+
assert_literally_equal t.to_hash, v.to_hash
|
169
174
|
end
|
170
175
|
end
|
171
176
|
|
@@ -215,4 +220,8 @@ class TIFFTest < TestCase
|
|
215
220
|
assert t.methods(true).include?(:make)
|
216
221
|
assert ! t.methods(false).include?(:make)
|
217
222
|
end
|
223
|
+
|
224
|
+
def test_unknow_field
|
225
|
+
assert_equal [1, 1, 1, 1], TIFF.new(f('plain.tif')).first.raw_fields[0x0153] # TIFF Tag SampleFormat
|
226
|
+
end
|
218
227
|
end
|
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.3.
|
4
|
+
version: 1.3.10
|
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:
|
11
|
+
date: 2022-10-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: test-unit
|
@@ -59,6 +59,7 @@ files:
|
|
59
59
|
- tests/data/Trust-DC3500_MINI.exif
|
60
60
|
- tests/data/apple-aperture-1.5.exif
|
61
61
|
- tests/data/bad-shutter_speed_value.exif
|
62
|
+
- tests/data/bad_gps.exif
|
62
63
|
- tests/data/canon-g3.exif
|
63
64
|
- tests/data/endless-loop.exif
|
64
65
|
- tests/data/exif.jpg
|
@@ -66,6 +67,7 @@ files:
|
|
66
67
|
- tests/data/gps-altitude.jpg
|
67
68
|
- tests/data/gps.exif
|
68
69
|
- tests/data/image.jpg
|
70
|
+
- tests/data/ios-mspix-milliseconds.jpg
|
69
71
|
- tests/data/multiple-app1.jpg
|
70
72
|
- tests/data/negative-exposure-bias-value.exif
|
71
73
|
- tests/data/nikon_d1x.tif
|
@@ -73,6 +75,7 @@ files:
|
|
73
75
|
- tests/data/plain.tif
|
74
76
|
- tests/data/samsung-sc-02b.jpg
|
75
77
|
- tests/data/sony-a7ii.exif
|
78
|
+
- tests/data/truncated.exif
|
76
79
|
- tests/data/user-comment.exif
|
77
80
|
- tests/data/weird_date.exif
|
78
81
|
- tests/jpeg_test.rb
|
@@ -102,7 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
102
105
|
- !ruby/object:Gem::Version
|
103
106
|
version: '0'
|
104
107
|
requirements: []
|
105
|
-
rubygems_version: 3.
|
108
|
+
rubygems_version: 3.3.7
|
106
109
|
signing_key:
|
107
110
|
specification_version: 4
|
108
111
|
summary: Read EXIF from JPEG and TIFF images
|