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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 91531cf59588956e8b9675148197cdca2b8bcbe35edb42476bfe56f73959470b
4
- data.tar.gz: ddd951e6773d11ce0a0db5214983774b8078e410451920cc441fdd55926c574e
3
+ metadata.gz: 97fa3270a4d14398a02e6bd725753980ae12b74c2f0a6e3c160b840c59c7febf
4
+ data.tar.gz: ec8ed547c94ad6dd83c0a07bb78530408d48637b18edfeb68dcb157a55c5c618
5
5
  SHA512:
6
- metadata.gz: a8ebe84816409a77d19b67d1ac8a244ef63bd3a8046e08f7193e40f8bb01c2866320aa52a3664a43ed07dc6d30c2f17005d33d2408e69574987b2e5127425b0a
7
- data.tar.gz: 296a144056ee9da865e663c9ef47dfc59811e24485c133a28a2b6978b62b37f7e8419a6c76e6e6aaacb52a03b599f04e18a9715e287f89c9fbff9fbac67a2c63
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 unless tag = TAG_MAPPING[@type][field.tag]
550
- return if @fields[tag]
549
+ return if @raw_fields.include?(field.tag) # first encountered value wins
550
+ @raw_fields[field.tag] = field.value
551
551
 
552
- if IFD_TAGS.include? tag
553
- @fields[tag] = IFD.new(@data, field.offset, tag)
554
- else
555
- value = ADAPTERS[tag][field.value]
556
- @fields[tag] = value.kind_of?(Array) && value.size == 1 ? value.first : value
557
- end
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
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
- assert_literally_equal t.to_hash, YAML.load(y).to_hash
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.9
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: 2020-10-19 00:00:00.000000000 Z
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.1.4
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