exifr 1.3.9 → 1.3.10

Sign up to get free protection for your applications and to get access to all the features.
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