Glymur 0.13.7__py3-none-any.whl → 0.14.0.post1__py3-none-any.whl

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.
glymur/lib/tiff.py CHANGED
@@ -17,13 +17,14 @@ from ..config import glymur_config
17
17
  # The error messages queue
18
18
  EQ = queue.Queue()
19
19
 
20
- loader = ctypes.windll.LoadLibrary if os.name == 'nt' else ctypes.CDLL
21
- _LIBTIFF = glymur_config('tiff')
22
- _LIBC = glymur_config('c')
20
+ loader = ctypes.windll.LoadLibrary if os.name == "nt" else ctypes.CDLL
21
+ _LIBTIFF = glymur_config("tiff")
22
+ _LIBC = glymur_config("c")
23
23
 
24
24
 
25
25
  class LibTIFFError(RuntimeError):
26
26
  """Raise this exception if we detect a generic error from libtiff."""
27
+
27
28
  pass
28
29
 
29
30
 
@@ -34,6 +35,7 @@ class Compression(IntEnum):
34
35
  --------
35
36
  Photometric : The color space of the image data.
36
37
  """
38
+
37
39
  NONE = 1
38
40
  CCITTRLE = 2 # CCITT modified Huffman RLE
39
41
  CCITTFAX3 = 3 # CCITT Group 3 fax encoding
@@ -49,21 +51,23 @@ class Compression(IntEnum):
49
51
  CCITTRLEW = 32771 # #1 w/ word alignment
50
52
  PACKBITS = 32773 # Macintosh RLE
51
53
  THUNDERSCAN = 32809 # ThunderScan RLE
52
- PIXARFILM = 32908 # companded 10bit LZW
53
- PIXARLOG = 32909 # companded 11bit ZIP
54
+ PIXARFILM = 32908 # companded 10bit LZW
55
+ PIXARLOG = 32909 # companded 11bit ZIP
54
56
  DEFLATE = 32946 # compression
55
- ADOBE_DEFLATE = 8 # compression, as recognized by Adobe
56
- DCS = 32947 # DCS encoding
57
+ ADOBE_DEFLATE = 8 # compression, as recognized by Adobe
58
+ DCS = 32947 # DCS encoding
57
59
  JBIG = 34661 # JBIG
58
60
  SGILOG = 34676 # Log Luminance RLE
59
61
  SGILOG24 = 34677 # Log 24-bit packed
60
- JP2000 = 34712 # JPEG2000
62
+ JP2000 = 34712 # JPEG2000
61
63
  LZMA = 34925 # LZMA2
62
64
 
63
65
 
64
66
  class InkSet(IntEnum):
65
- """The set of inks used in a separated (PhotometricInterpretation=5) image.
66
67
  """
68
+ The set of inks used in a separated (PhotometricInterpretation=5) image.
69
+ """
70
+
67
71
  CMYK = 1
68
72
  MULTIINK = 2
69
73
 
@@ -77,6 +81,7 @@ class JPEGColorMode(IntEnum):
77
81
  --------
78
82
  Photometric : The color space of the image data.
79
83
  """
84
+
80
85
  RAW = 0
81
86
  RGB = 1
82
87
 
@@ -87,12 +92,14 @@ class PlanarConfig(IntEnum):
87
92
  Writing images with a PlanarConfig value of PlanarConfig.SEPARATE is not
88
93
  currently supported.
89
94
  """
95
+
90
96
  CONTIG = 1 # single image plane
91
97
  SEPARATE = 2 # separate planes of data
92
98
 
93
99
 
94
100
  class Orientation(IntEnum):
95
101
  """The orientation of the image with respect to the rows and columns."""
102
+
96
103
  TOPLEFT = 1 # row 0 top, col 0 lhs */
97
104
  TOPRIGHT = 2 # row 0 top, col 0 rhs */
98
105
  BOTRIGHT = 3 # row 0 bottom, col 0 rhs */
@@ -141,6 +148,7 @@ class Photometric(IntEnum):
141
148
  >>> libtiff.writeEncodedTile(fp, 3, image[th:h, tw:w].copy())
142
149
  >>> libtiff.close(fp)
143
150
  """
151
+
144
152
  MINISWHITE = 0 # value is white
145
153
  MINISBLACK = 1 # value is black
146
154
  RGB = 2 # color model
@@ -158,6 +166,7 @@ class Photometric(IntEnum):
158
166
 
159
167
  class SampleFormat(IntEnum):
160
168
  """Specifies how to interpret each data sample in a pixel."""
169
+
161
170
  UINT = 1
162
171
  INT = 2
163
172
  IEEEFP = 3
@@ -176,8 +185,8 @@ def _handle_error(module, fmt, ap):
176
185
  _LIBC.vsprintf.restype = ctypes.c_int32
177
186
  _LIBC.vsprintf(buffer, fmt, ap)
178
187
 
179
- module = module.decode('utf-8')
180
- error_str = buffer.value.decode('utf-8')
188
+ module = module.decode("utf-8")
189
+ error_str = buffer.value.decode("utf-8")
181
190
 
182
191
  message = f"{module}: {error_str}"
183
192
  EQ.put(message)
@@ -194,8 +203,8 @@ def _handle_warning(module, fmt, ap):
194
203
  _LIBC.vsprintf.restype = ctypes.c_int32
195
204
  _LIBC.vsprintf(buffer, fmt, ap)
196
205
 
197
- module = module.decode('utf-8')
198
- warning_str = buffer.value.decode('utf-8')
206
+ module = module.decode("utf-8")
207
+ warning_str = buffer.value.decode("utf-8")
199
208
 
200
209
  message = f"{module}: {warning_str}"
201
210
  warnings.warn(message)
@@ -206,7 +215,7 @@ _WFUNCTYPE = ctypes.CFUNCTYPE(
206
215
  ctypes.c_void_p, # return type of warning handler, void *
207
216
  ctypes.c_char_p, # module
208
217
  ctypes.c_char_p, # fmt
209
- ctypes.c_void_p # va_list
218
+ ctypes.c_void_p, # va_list
210
219
  )
211
220
 
212
221
  _ERROR_HANDLER = _WFUNCTYPE(_handle_error)
@@ -257,8 +266,13 @@ def computeTile(fp, x, y, z, sample):
257
266
  """Corresponds to TIFFComputeTile"""
258
267
  err_handler, warn_handler = _set_error_warning_handlers()
259
268
 
260
- ARGTYPES = [ctypes.c_void_p, ctypes.c_uint32, ctypes.c_uint32,
261
- ctypes.c_uint32, ctypes.c_uint16]
269
+ ARGTYPES = [
270
+ ctypes.c_void_p,
271
+ ctypes.c_uint32,
272
+ ctypes.c_uint32,
273
+ ctypes.c_uint32,
274
+ ctypes.c_uint16,
275
+ ]
262
276
  _LIBTIFF.TIFFComputeTile.argtypes = ARGTYPES
263
277
  _LIBTIFF.TIFFComputeTile.restype = ctypes.c_uint32
264
278
  tilenum = _LIBTIFF.TIFFComputeTile(fp, x, y, z, sample)
@@ -322,7 +336,10 @@ def readEncodedStrip(fp, stripnum, strip, size=-1):
322
336
  size = strip.nbytes
323
337
 
324
338
  ARGTYPES = [
325
- ctypes.c_void_p, ctypes.c_uint32, ctypes.c_void_p, ctypes.c_int32
339
+ ctypes.c_void_p,
340
+ ctypes.c_uint32,
341
+ ctypes.c_void_p,
342
+ ctypes.c_int32
326
343
  ]
327
344
  _LIBTIFF.TIFFReadEncodedStrip.argtypes = ARGTYPES
328
345
  _LIBTIFF.TIFFReadEncodedStrip.restype = check_error
@@ -343,12 +360,18 @@ def readEncodedTile(fp, tilenum, tile, size=-1):
343
360
  size = tile.nbytes
344
361
 
345
362
  ARGTYPES = [
346
- ctypes.c_void_p, ctypes.c_uint32, ctypes.c_void_p, ctypes.c_int32
363
+ ctypes.c_void_p,
364
+ ctypes.c_uint32,
365
+ ctypes.c_void_p,
366
+ ctypes.c_int32
347
367
  ]
348
368
  _LIBTIFF.TIFFReadEncodedTile.argtypes = ARGTYPES
349
369
  _LIBTIFF.TIFFReadEncodedTile.restype = check_error
350
370
  _LIBTIFF.TIFFReadEncodedTile(
351
- fp, tilenum, tile.ctypes.data_as(ctypes.c_void_p), -1
371
+ fp,
372
+ tilenum,
373
+ tile.ctypes.data_as(ctypes.c_void_p),
374
+ -1
352
375
  )
353
376
 
354
377
  _reset_error_warning_handlers(err_handler, warn_handler)
@@ -360,14 +383,10 @@ def readRGBAStrip(fp, row, strip):
360
383
  """Corresponds to TIFFReadRGBAStrip"""
361
384
  err_handler, warn_handler = _set_error_warning_handlers()
362
385
 
363
- ARGTYPES = [
364
- ctypes.c_void_p, ctypes.c_uint32, ctypes.c_void_p
365
- ]
386
+ ARGTYPES = [ctypes.c_void_p, ctypes.c_uint32, ctypes.c_void_p]
366
387
  _LIBTIFF.TIFFReadRGBAStrip.argtypes = ARGTYPES
367
388
  _LIBTIFF.TIFFReadRGBAStrip.restype = check_error
368
- _LIBTIFF.TIFFReadRGBAStrip(
369
- fp, row, strip.ctypes.data_as(ctypes.c_void_p)
370
- )
389
+ _LIBTIFF.TIFFReadRGBAStrip(fp, row, strip.ctypes.data_as(ctypes.c_void_p))
371
390
 
372
391
  _reset_error_warning_handlers(err_handler, warn_handler)
373
392
 
@@ -379,21 +398,26 @@ def readRGBATile(fp, x, y, tile):
379
398
  err_handler, warn_handler = _set_error_warning_handlers()
380
399
 
381
400
  ARGTYPES = [
382
- ctypes.c_void_p, ctypes.c_uint32, ctypes.c_uint32, ctypes.c_void_p
401
+ ctypes.c_void_p,
402
+ ctypes.c_uint32,
403
+ ctypes.c_uint32,
404
+ ctypes.c_void_p
383
405
  ]
384
406
  _LIBTIFF.TIFFReadRGBATile.argtypes = ARGTYPES
385
407
  _LIBTIFF.TIFFReadRGBATile.restype = check_error
386
- _LIBTIFF.TIFFReadRGBATile(
387
- fp, x, y, tile.ctypes.data_as(ctypes.c_void_p)
388
- )
408
+ _LIBTIFF.TIFFReadRGBATile(fp, x, y, tile.ctypes.data_as(ctypes.c_void_p))
389
409
 
390
410
  _reset_error_warning_handlers(err_handler, warn_handler)
391
411
 
392
412
  return tile
393
413
 
394
414
 
395
- def readRGBAImageOriented(fp, width=None, height=None,
396
- orientation=Orientation.TOPLEFT):
415
+ def readRGBAImageOriented(
416
+ fp,
417
+ width=None,
418
+ height=None,
419
+ orientation=Orientation.TOPLEFT
420
+ ):
397
421
  """Read an image as if it were RGBA.
398
422
 
399
423
  This function corresponds to the TIFFReadRGBAImageOriented function in the
@@ -415,22 +439,32 @@ def readRGBAImageOriented(fp, width=None, height=None,
415
439
  err_handler, warn_handler = _set_error_warning_handlers()
416
440
 
417
441
  ARGTYPES = [
418
- ctypes.c_void_p, ctypes.c_uint32, ctypes.c_uint32,
419
- ctypes.POINTER(ctypes.c_uint32), ctypes.c_int32, ctypes.c_int32
442
+ ctypes.c_void_p,
443
+ ctypes.c_uint32,
444
+ ctypes.c_uint32,
445
+ ctypes.POINTER(ctypes.c_uint32),
446
+ ctypes.c_int32,
447
+ ctypes.c_int32,
420
448
  ]
421
449
 
422
450
  _LIBTIFF.TIFFReadRGBAImageOriented.argtypes = ARGTYPES
423
451
  _LIBTIFF.TIFFReadRGBAImageOriented.restype = check_error
424
452
 
425
453
  if width is None:
426
- width = getFieldDefaulted(fp, 'ImageWidth')
454
+ width = getFieldDefaulted(fp, "ImageWidth")
427
455
  if height is None:
428
- height = getFieldDefaulted(fp, 'ImageLength')
456
+ height = getFieldDefaulted(fp, "ImageLength")
429
457
 
430
458
  img = np.zeros((height, width, 4), dtype=np.uint8)
431
459
  raster = img.ctypes.data_as(ctypes.POINTER(ctypes.c_uint32))
432
- _LIBTIFF.TIFFReadRGBAImageOriented(fp, width, height, raster, orientation,
433
- 0)
460
+ _LIBTIFF.TIFFReadRGBAImageOriented(
461
+ fp,
462
+ width,
463
+ height,
464
+ raster,
465
+ orientation,
466
+ 0
467
+ )
434
468
 
435
469
  _reset_error_warning_handlers(err_handler, warn_handler)
436
470
 
@@ -442,7 +476,10 @@ def writeEncodedStrip(fp, stripnum, stripdata, size=-1):
442
476
  err_handler, warn_handler = _set_error_warning_handlers()
443
477
 
444
478
  ARGTYPES = [
445
- ctypes.c_void_p, ctypes.c_uint32, ctypes.c_void_p, ctypes.c_uint32
479
+ ctypes.c_void_p,
480
+ ctypes.c_uint32,
481
+ ctypes.c_void_p,
482
+ ctypes.c_uint32
446
483
  ]
447
484
  _LIBTIFF.TIFFWriteEncodedStrip.argtypes = ARGTYPES
448
485
  _LIBTIFF.TIFFWriteEncodedStrip.restype = check_error
@@ -461,7 +498,10 @@ def writeEncodedTile(fp, tilenum, tiledata, size=-1):
461
498
  err_handler, warn_handler = _set_error_warning_handlers()
462
499
 
463
500
  ARGTYPES = [
464
- ctypes.c_void_p, ctypes.c_uint32, ctypes.c_void_p, ctypes.c_uint32
501
+ ctypes.c_void_p,
502
+ ctypes.c_uint32,
503
+ ctypes.c_void_p,
504
+ ctypes.c_uint32
465
505
  ]
466
506
  _LIBTIFF.TIFFWriteEncodedTile.argtypes = ARGTYPES
467
507
  _LIBTIFF.TIFFWriteEncodedTile.restype = check_error
@@ -499,11 +539,11 @@ def getFieldDefaulted(fp, tag):
499
539
 
500
540
  ARGTYPES = [ctypes.c_void_p, ctypes.c_int32]
501
541
 
502
- tag_num = TAGS[tag]['number']
542
+ tag_num = TAGS[tag]["number"]
503
543
 
504
544
  # Append the proper return type for the tag.
505
- tag_type = TAGS[tag]['type']
506
- ARGTYPES.append(ctypes.POINTER(TAGS[tag]['type']))
545
+ tag_type = TAGS[tag]["type"]
546
+ ARGTYPES.append(ctypes.POINTER(TAGS[tag]["type"]))
507
547
  _LIBTIFF.TIFFGetFieldDefaulted.argtypes = ARGTYPES
508
548
 
509
549
  _LIBTIFF.TIFFGetFieldDefaulted.restype = check_error
@@ -523,9 +563,9 @@ def getVersion():
523
563
  _LIBTIFF.TIFFGetVersion.restype = ctypes.c_char_p
524
564
  except AttributeError:
525
565
  # libtiff not installed
526
- return '0.0.0'
566
+ return "0.0.0"
527
567
 
528
- v = _LIBTIFF.TIFFGetVersion().decode('utf-8')
568
+ v = _LIBTIFF.TIFFGetVersion().decode("utf-8")
529
569
 
530
570
  # v would be something like
531
571
  #
@@ -534,11 +574,11 @@ def getVersion():
534
574
  # Copyright (c) 1991-1996 Silicon Graphics, Inc.
535
575
  #
536
576
  # All we want is the '4.3.0'
537
- m = re.search(r'(?P<version>\d+\.\d+\.\d+)', v)
538
- return m.group('version')
577
+ m = re.search(r"(?P<version>\d+\.\d+\.\d+)", v)
578
+ return m.group("version")
539
579
 
540
580
 
541
- def open(filename, mode='r'):
581
+ def open(filename, mode="r"):
542
582
  """Corresponds to TIFFOpen
543
583
 
544
584
  Parameters
@@ -581,8 +621,8 @@ def setField(fp, tag, *value):
581
621
  ARGTYPES = [ctypes.c_void_p, ctypes.c_int32]
582
622
 
583
623
  # Append the proper return type for the tag.
584
- tag_num = TAGS[tag]['number']
585
- tag_type = TAGS[tag]['type']
624
+ tag_num = TAGS[tag]["number"]
625
+ tag_type = TAGS[tag]["type"]
586
626
 
587
627
  try:
588
628
  for ttype in tag_type:
@@ -620,1293 +660,1372 @@ def check_error(status):
620
660
  for error status in each wrapping function and an exception will always be
621
661
  appropriately raised.
622
662
  """
623
- msg = ''
663
+ msg = ""
624
664
  while not EQ.empty():
625
665
  msg = EQ.get()
626
666
  raise LibTIFFError(msg)
627
667
 
628
668
  if status == 0:
629
- raise RuntimeError('failed')
669
+ raise RuntimeError("failed")
630
670
 
631
671
 
632
672
  TAGS = {
633
- 'ProcessingSoftware': {
634
- 'number': 11,
635
- 'type': ctypes.c_char_p,
636
- },
637
- 'SubFileType': {
638
- 'number': 254,
639
- 'type': ctypes.c_int16,
640
- },
641
- 'OSubFileType': {
642
- 'number': 255,
643
- 'type': ctypes.c_int16,
644
- },
645
- 'ImageWidth': {
646
- 'number': 256,
647
- 'type': ctypes.c_int32,
648
- },
649
- 'ImageLength': {
650
- 'number': 257,
651
- 'type': ctypes.c_int32,
652
- },
653
- 'BitsPerSample': {
654
- 'number': 258,
655
- 'type': ctypes.c_int16,
656
- },
657
- 'Compression': {
658
- 'number': 259,
659
- 'type': ctypes.c_int16,
660
- },
661
- 'Photometric': {
662
- 'number': 262,
663
- 'type': ctypes.c_int16,
664
- },
665
- 'Threshholding': {
666
- 'number': 263,
667
- 'type': ctypes.c_int16,
668
- },
669
- 'CellWidth': {
670
- 'number': 264,
671
- 'type': ctypes.c_int16,
672
- },
673
- 'CellLength': {
674
- 'number': 265,
675
- 'type': ctypes.c_int16,
676
- },
677
- 'FillOrder': {
678
- 'number': 266,
679
- 'type': ctypes.c_int16,
680
- },
681
- 'DocumentName': {
682
- 'number': 269,
683
- 'type': ctypes.c_char_p,
684
- },
685
- 'ImageDescription': {
686
- 'number': 270,
687
- 'type': ctypes.c_char_p,
688
- },
689
- 'Make': {
690
- 'number': 271,
691
- 'type': ctypes.c_char_p,
692
- },
693
- 'Model': {
694
- 'number': 272,
695
- 'type': ctypes.c_char_p,
696
- },
697
- 'StripOffsets': {
698
- 'number': 273,
699
- 'type': (ctypes.c_int32, ctypes.c_int64),
700
- },
701
- 'Orientation': {
702
- 'number': 274,
703
- 'type': ctypes.c_int16,
704
- },
705
- 'SamplesPerPixel': {
706
- 'number': 277,
707
- 'type': ctypes.c_int16,
708
- },
709
- 'RowsPerStrip': {
710
- 'number': 278,
711
- 'type': ctypes.c_int16,
712
- },
713
- 'StripByteCounts': {
714
- 'number': 279,
715
- 'type': None,
716
- },
717
- 'MinSampleValue': {
718
- 'number': 280,
719
- 'type': ctypes.c_int16,
720
- },
721
- 'MaxSampleValue': {
722
- 'number': 281,
723
- 'type': ctypes.c_int16,
724
- },
725
- 'XResolution': {
726
- 'number': 282,
727
- 'type': ctypes.c_double,
728
- },
729
- 'YResolution': {
730
- 'number': 283,
731
- 'type': ctypes.c_double,
732
- },
733
- 'PlanarConfig': {
734
- 'number': 284,
735
- 'type': ctypes.c_int16,
736
- },
737
- 'PageName': {
738
- 'number': 285,
739
- 'type': ctypes.c_char_p,
740
- },
741
- 'XPosition': {
742
- 'number': 286,
743
- 'type': ctypes.c_double,
744
- },
745
- 'YPosition': {
746
- 'number': 287,
747
- 'type': ctypes.c_double,
748
- },
749
- 'FreeOffsets': {
750
- 'number': 288,
751
- 'type': ctypes.c_int32,
752
- },
753
- 'FreeByteCounts': {
754
- 'number': 289,
755
- 'type': ctypes.c_int32,
756
- },
757
- 'GrayResponseUnit': {
758
- 'number': 290,
759
- 'type': ctypes.c_int16,
760
- },
761
- 'GrayResponseCurve': {
762
- 'number': 291,
763
- 'type': None,
764
- },
765
- 'T4Options': {
766
- 'number': 292,
767
- 'type': None,
768
- },
769
- 'T6Options': {
770
- 'number': 293,
771
- 'type': None,
772
- },
773
- 'ResolutionUnit': {
774
- 'number': 296,
775
- 'type': ctypes.c_int16,
776
- },
777
- 'PageNumber': {
778
- 'number': 297,
779
- 'type': (ctypes.c_int16, ctypes.c_uint16),
780
- },
781
- 'TransferFunction': {
782
- 'number': 301,
783
- 'type': None,
784
- },
785
- 'Software': {
786
- 'number': 305,
787
- 'type': ctypes.c_char_p,
788
- },
789
- 'Datetime': {
790
- 'number': 306,
791
- 'type': ctypes.c_char_p,
792
- },
793
- 'Artist': {
794
- 'number': 315,
795
- 'type': ctypes.c_char_p,
796
- },
797
- 'HostComputer': {
798
- 'number': 316,
799
- 'type': ctypes.c_char_p,
673
+ "GPSVersionID": {
674
+ "number": 0,
675
+ "type": ctypes.c_char_p,
800
676
  },
801
- 'Predictor': {
802
- 'number': 317,
803
- 'type': ctypes.c_int16,
677
+ "GPSLatitudeRef": {
678
+ "number": 1,
679
+ "type": ctypes.c_char_p,
804
680
  },
805
- 'WhitePoint': {
806
- 'number': 318,
807
- 'type': ctypes.c_double,
681
+ "GPSLatitude": {
682
+ "number": 2,
683
+ "type": ctypes.c_char_p,
808
684
  },
809
- 'PrimaryChromaticities': {
810
- 'number': 319,
811
- 'type': None,
685
+ "GPSLongitudeRef": {
686
+ "number": 3,
687
+ "type": ctypes.c_char_p,
812
688
  },
813
- 'ColorMap': {
814
- 'number': 320,
815
- 'type': (ctypes.c_int16, ctypes.c_uint16),
689
+ "GPSLongitude": {
690
+ "number": 4,
691
+ "type": ctypes.c_char_p,
816
692
  },
817
- 'HalfToneHints': {
818
- 'number': 321,
819
- 'type': ctypes.c_int16,
693
+ "GPSAltitudeRef": {
694
+ "number": 5,
695
+ "type": ctypes.c_char_p,
820
696
  },
821
- 'TileWidth': {
822
- 'number': 322,
823
- 'type': ctypes.c_int32,
697
+ "GPSAltitude": {
698
+ "number": 6,
699
+ "type": ctypes.c_char_p,
824
700
  },
825
- 'TileLength': {
826
- 'number': 323,
827
- 'type': ctypes.c_int32,
701
+ "GPSTimestamp": {
702
+ "number": 7,
703
+ "type": ctypes.c_char_p,
828
704
  },
829
- 'TileOffsets': {
830
- 'number': 324,
831
- 'type': None,
705
+ "GPSSatellites": {
706
+ "number": 8,
707
+ "type": ctypes.c_char_p,
832
708
  },
833
- 'TileByteCounts': {
834
- 'number': 325,
835
- 'type': None,
709
+ "GPSStatus": {
710
+ "number": 9,
711
+ "type": ctypes.c_char_p,
836
712
  },
837
- 'BadFaxLines': {
838
- 'number': 326,
839
- 'type': None,
713
+ "GPSMeasureMode": {
714
+ "number": 10,
715
+ "type": ctypes.c_char_p,
840
716
  },
841
- 'CleanFaxData': {
842
- 'number': 327,
843
- 'type': None,
717
+ "GPSDOP": {
718
+ "number": 11,
719
+ "type": ctypes.c_char_p,
844
720
  },
845
- 'ConsecutiveBadFaxLines': {
846
- 'number': 328,
847
- 'type': None,
721
+ "GPSSpeedRef": {
722
+ "number": 12,
723
+ "type": ctypes.c_char_p,
848
724
  },
849
- 'SubIFDs': {
850
- 'number': 330,
851
- 'type': None,
725
+ "GPSSpeed": {
726
+ "number": 13,
727
+ "type": ctypes.c_char_p,
852
728
  },
853
- 'InkSet': {
854
- 'number': 332,
855
- 'type': ctypes.c_uint16,
729
+ "GPSTrackRef": {
730
+ "number": 14,
731
+ "type": ctypes.c_char_p,
856
732
  },
857
- 'InkNames': {
858
- 'number': 333,
859
- 'type': ctypes.c_char_p,
733
+ "GPSTrack": {
734
+ "number": 15,
735
+ "type": ctypes.c_char_p,
860
736
  },
861
- 'NumberOfInks': {
862
- 'number': 334,
863
- 'type': ctypes.c_uint16,
737
+ "GPSImgDirectionRef": {
738
+ "number": 16,
739
+ "type": ctypes.c_char_p,
864
740
  },
865
- 'DotRange': {
866
- 'number': 336,
867
- 'type': None,
741
+ "GPSImgDirection": {
742
+ "number": 17,
743
+ "type": ctypes.c_char_p,
868
744
  },
869
- 'TargetPrinter': {
870
- 'number': 337,
871
- 'type': ctypes.c_uint16,
745
+ "GPSMapDatum": {
746
+ "number": 18,
747
+ "type": ctypes.c_char_p,
872
748
  },
873
- 'ExtraSamples': {
874
- 'number': 338,
875
- 'type': ctypes.c_uint16,
749
+ "GPSDestLatitudeRef": {
750
+ "number": 19,
751
+ "type": ctypes.c_char_p,
876
752
  },
877
- 'SampleFormat': {
878
- 'number': 339,
879
- 'type': ctypes.c_uint16,
753
+ "GPSDestLatitude": {
754
+ "number": 20,
755
+ "type": ctypes.c_char_p,
880
756
  },
881
- 'SMinSampleValue': {
882
- 'number': 340,
883
- 'type': ctypes.c_double,
757
+ "GPSDestLongitudeRef": {
758
+ "number": 21,
759
+ "type": ctypes.c_char_p,
884
760
  },
885
- 'SMaxSampleValue': {
886
- 'number': 341,
887
- 'type': ctypes.c_double,
761
+ "GPSDestLongitude": {
762
+ "number": 22,
763
+ "type": ctypes.c_char_p,
888
764
  },
889
- 'TransferRange': {
890
- 'number': 342,
891
- 'type': None,
765
+ "GPSBearingRef": {
766
+ "number": 23,
767
+ "type": ctypes.c_char_p,
892
768
  },
893
- 'ClipPath': {
894
- 'number': 343,
895
- 'type': None,
769
+ "GPSBearing": {
770
+ "number": 24,
771
+ "type": ctypes.c_char_p,
896
772
  },
897
- 'XClipPathUnits': {
898
- 'number': 344,
899
- 'type': None,
773
+ "GPSDestDistanceRef": {
774
+ "number": 25,
775
+ "type": ctypes.c_char_p,
900
776
  },
901
- 'YClipPathUnits': {
902
- 'number': 345,
903
- 'type': None,
777
+ "GPSDestDistance": {
778
+ "number": 26,
779
+ "type": ctypes.c_int16,
904
780
  },
905
- 'Indexed': {
906
- 'number': 346,
907
- 'type': None,
781
+ "GPSProcessingMethod": {
782
+ "number": 27,
783
+ "type": ctypes.c_char_p,
908
784
  },
909
- 'JPEGTables': {
910
- 'number': 347,
911
- 'type': None,
785
+ "GPSAreaInformation": {
786
+ "number": 28,
787
+ "type": ctypes.c_char_p,
912
788
  },
913
- 'OPIProxy': {
914
- 'number': 351,
915
- 'type': None,
789
+ "GPSDateStamp": {
790
+ "number": 29,
791
+ "type": ctypes.c_char_p,
916
792
  },
917
- 'GlobalParametersIFD': {
918
- 'number': 400,
919
- 'type': None,
793
+ "GPSDifferential": {
794
+ "number": 30,
795
+ "type": ctypes.c_char_p,
920
796
  },
921
- 'ProfileType': {
922
- 'number': 401,
923
- 'type': None,
797
+ "GPSHPositioningError": {
798
+ "number": 31,
799
+ "type": ctypes.c_int16,
924
800
  },
925
- 'FaxProfile': {
926
- 'number': 402,
927
- 'type': ctypes.c_uint8,
801
+ "SubFileType": {
802
+ "number": 254,
803
+ "type": ctypes.c_int16,
928
804
  },
929
- 'CodingMethods': {
930
- 'number': 403,
931
- 'type': None,
805
+ "OSubFileType": {
806
+ "number": 255,
807
+ "type": ctypes.c_int16,
932
808
  },
933
- 'VersionYear': {
934
- 'number': 404,
935
- 'type': None,
809
+ "ImageWidth": {
810
+ "number": 256,
811
+ "type": ctypes.c_int32,
936
812
  },
937
- 'ModeNumber': {
938
- 'number': 405,
939
- 'type': None,
813
+ "ImageLength": {
814
+ "number": 257,
815
+ "type": ctypes.c_int32,
940
816
  },
941
- 'Decode': {
942
- 'number': 433,
943
- 'type': None,
817
+ "BitsPerSample": {
818
+ "number": 258,
819
+ "type": ctypes.c_int16,
944
820
  },
945
- 'DefaultImageColor': {
946
- 'number': 434,
947
- 'type': None,
821
+ "Compression": {
822
+ "number": 259,
823
+ "type": ctypes.c_int16,
948
824
  },
949
- 'JPEGProc': {
950
- 'number': 512,
951
- 'type': None,
825
+ "Photometric": {
826
+ "number": 262,
827
+ "type": ctypes.c_int16,
952
828
  },
953
- 'JPEGInterchangeFormat': {
954
- 'number': 513,
955
- 'type': None,
829
+ "Threshholding": {
830
+ "number": 263,
831
+ "type": ctypes.c_int16,
956
832
  },
957
- 'JPEGInterchangeFormatLength': {
958
- 'number': 514,
959
- 'type': None,
833
+ "CellWidth": {
834
+ "number": 264,
835
+ "type": ctypes.c_int16,
960
836
  },
961
- 'JPEGRestartInterval': {
962
- 'number': 515,
963
- 'type': None,
837
+ "CellLength": {
838
+ "number": 265,
839
+ "type": ctypes.c_int16,
964
840
  },
965
- 'JPEGLosslessPredictors': {
966
- 'number': 517,
967
- 'type': None,
841
+ "FillOrder": {
842
+ "number": 266,
843
+ "type": ctypes.c_int16,
968
844
  },
969
- 'JPEGPointTransforms': {
970
- 'number': 518,
971
- 'type': None,
845
+ "DocumentName": {
846
+ "number": 269,
847
+ "type": ctypes.c_char_p,
972
848
  },
973
- 'JPEGQTables': {
974
- 'number': 519,
975
- 'type': None,
849
+ "ImageDescription": {
850
+ "number": 270,
851
+ "type": ctypes.c_char_p,
976
852
  },
977
- 'JPEGDCTables': {
978
- 'number': 520,
979
- 'type': None,
853
+ "Make": {
854
+ "number": 271,
855
+ "type": ctypes.c_char_p,
980
856
  },
981
- 'JPEGACTables': {
982
- 'number': 521,
983
- 'type': None,
857
+ "Model": {
858
+ "number": 272,
859
+ "type": ctypes.c_char_p,
984
860
  },
985
- 'YCbCrCoefficients': {
986
- 'number': 529,
987
- 'type': (ctypes.c_float, ctypes.c_float, ctypes.c_float),
861
+ "StripOffsets": {
862
+ "number": 273,
863
+ "type": (ctypes.c_int32, ctypes.c_int64),
988
864
  },
989
- 'YCbCrSubsampling': {
990
- 'number': 530,
991
- 'type': (ctypes.c_uint16, ctypes.c_uint16),
865
+ "Orientation": {
866
+ "number": 274,
867
+ "type": ctypes.c_int16,
992
868
  },
993
- 'YCbCrPositioning': {
994
- 'number': 531,
995
- 'type': ctypes.c_uint16,
869
+ "SamplesPerPixel": {
870
+ "number": 277,
871
+ "type": ctypes.c_int16,
996
872
  },
997
- 'ReferenceBlackWhite': {
998
- 'number': 532,
999
- 'type': (ctypes.c_float, ctypes.c_float, ctypes.c_float,
1000
- ctypes.c_float, ctypes.c_float, ctypes.c_float),
873
+ "RowsPerStrip": {
874
+ "number": 278,
875
+ "type": ctypes.c_int16,
1001
876
  },
1002
- 'StripRowCounts': {
1003
- 'number': 559,
1004
- 'type': None,
877
+ "StripByteCounts": {
878
+ "number": 279,
879
+ "type": None,
1005
880
  },
1006
- 'XMLPacket': {
1007
- 'number': 700,
1008
- 'type': ctypes.c_uint8,
881
+ "MinSampleValue": {
882
+ "number": 280,
883
+ "type": ctypes.c_int16,
1009
884
  },
1010
- 'ImageID': {
1011
- 'number': 32781,
1012
- 'type': None,
885
+ "MaxSampleValue": {
886
+ "number": 281,
887
+ "type": ctypes.c_int16,
1013
888
  },
1014
- 'Rating': {
1015
- 'number': 18246,
1016
- 'type': ctypes.c_uint16,
889
+ "XResolution": {
890
+ "number": 282,
891
+ "type": ctypes.c_double,
1017
892
  },
1018
- 'RatingPercent': {
1019
- 'number': 18249,
1020
- 'type': ctypes.c_uint16,
893
+ "YResolution": {
894
+ "number": 283,
895
+ "type": ctypes.c_double,
1021
896
  },
1022
- 'Datatype': {
1023
- 'number': 32996,
1024
- 'type': None,
897
+ "PlanarConfig": {
898
+ "number": 284,
899
+ "type": ctypes.c_int16,
1025
900
  },
1026
- 'WANGAnnotation': {
1027
- 'number': 32932,
1028
- 'type': None,
901
+ "PageName": {
902
+ "number": 285,
903
+ "type": ctypes.c_char_p,
1029
904
  },
1030
- 'ImageDepth': {
1031
- 'number': 32997,
1032
- 'type': None,
905
+ "XPosition": {
906
+ "number": 286,
907
+ "type": ctypes.c_double,
1033
908
  },
1034
- 'TileDepth': {
1035
- 'number': 32998,
1036
- 'type': None,
909
+ "YPosition": {
910
+ "number": 287,
911
+ "type": ctypes.c_double,
1037
912
  },
1038
- 'CFARepeatPatternDim': {
1039
- 'number': 33421,
1040
- 'type': None,
913
+ "FreeOffsets": {
914
+ "number": 288,
915
+ "type": ctypes.c_int32,
1041
916
  },
1042
- 'CFAPattern': {
1043
- 'number': 33422,
1044
- 'type': None,
917
+ "FreeByteCounts": {
918
+ "number": 289,
919
+ "type": ctypes.c_int32,
1045
920
  },
1046
- 'BatteryLevel': {
1047
- 'number': 33423,
1048
- 'type': None,
921
+ "GrayResponseUnit": {
922
+ "number": 290,
923
+ "type": ctypes.c_int16,
1049
924
  },
1050
- 'Copyright': {
1051
- 'number': 33432,
1052
- 'type': ctypes.c_char_p,
925
+ "GrayResponseCurve": {
926
+ "number": 291,
927
+ "type": None,
1053
928
  },
1054
- 'ExposureTime': {
1055
- 'number': 33434,
1056
- 'type': ctypes.c_double,
929
+ "T4Options": {
930
+ "number": 292,
931
+ "type": None,
1057
932
  },
1058
- 'FNumber': {
1059
- 'number': 33437,
1060
- 'type': ctypes.c_double,
933
+ "T6Options": {
934
+ "number": 293,
935
+ "type": None,
1061
936
  },
1062
- 'MDFile': {
1063
- 'number': 33445,
1064
- 'type': None,
937
+ "ResolutionUnit": {
938
+ "number": 296,
939
+ "type": ctypes.c_int16,
1065
940
  },
1066
- 'MDScalePixel': {
1067
- 'number': 33446,
1068
- 'type': None,
941
+ "PageNumber": {
942
+ "number": 297,
943
+ "type": (ctypes.c_int16, ctypes.c_uint16),
1069
944
  },
1070
- 'MDColorTable': {
1071
- 'number': 33447,
1072
- 'type': None,
945
+ "TransferFunction": {
946
+ "number": 301,
947
+ "type": None,
1073
948
  },
1074
- 'MDLabName': {
1075
- 'number': 33448,
1076
- 'type': None,
949
+ "Software": {
950
+ "number": 305,
951
+ "type": ctypes.c_char_p,
1077
952
  },
1078
- 'MDSampleInfo': {
1079
- 'number': 33449,
1080
- 'type': None,
953
+ "Datetime": {
954
+ "number": 306,
955
+ "type": ctypes.c_char_p,
1081
956
  },
1082
- 'MdPrepDate': {
1083
- 'number': 33450,
1084
- 'type': None,
957
+ "Artist": {
958
+ "number": 315,
959
+ "type": ctypes.c_char_p,
1085
960
  },
1086
- 'MDPrepTime': {
1087
- 'number': 33451,
1088
- 'type': None,
961
+ "HostComputer": {
962
+ "number": 316,
963
+ "type": ctypes.c_char_p,
1089
964
  },
1090
- 'MDFileUnits': {
1091
- 'number': 33452,
1092
- 'type': None,
965
+ "Predictor": {
966
+ "number": 317,
967
+ "type": ctypes.c_int16,
1093
968
  },
1094
- 'ModelPixelScale': {
1095
- 'number': 33550,
1096
- 'type': None,
969
+ "WhitePoint": {
970
+ "number": 318,
971
+ "type": ctypes.c_double,
1097
972
  },
1098
- 'IPTC': {
1099
- 'number': 33723,
1100
- 'type': None,
973
+ "PrimaryChromaticities": {
974
+ "number": 319,
975
+ "type": None,
1101
976
  },
1102
- 'INGRPacketData': {
1103
- 'number': 33918,
1104
- 'type': None,
977
+ "ColorMap": {
978
+ "number": 320,
979
+ "type": (ctypes.c_int16, ctypes.c_uint16),
1105
980
  },
1106
- 'INGRFlagRegisters': {
1107
- 'number': 33919,
1108
- 'type': None,
981
+ "HalfToneHints": {
982
+ "number": 321,
983
+ "type": ctypes.c_int16,
1109
984
  },
1110
- 'IRASbTransformationMatrix': {
1111
- 'number': 33920,
1112
- 'type': None,
985
+ "TileWidth": {
986
+ "number": 322,
987
+ "type": ctypes.c_int32,
1113
988
  },
1114
- 'ModelTiePoint': {
1115
- 'number': 33922,
1116
- 'type': None,
989
+ "TileLength": {
990
+ "number": 323,
991
+ "type": ctypes.c_int32,
1117
992
  },
1118
- 'ModelTransformation': {
1119
- 'number': 34264,
1120
- 'type': None,
993
+ "TileOffsets": {
994
+ "number": 324,
995
+ "type": None,
1121
996
  },
1122
- 'Photoshop': {
1123
- 'number': 34377,
1124
- 'type': None,
997
+ "TileByteCounts": {
998
+ "number": 325,
999
+ "type": None,
1125
1000
  },
1126
- 'ExifTag': {
1127
- 'number': 34665,
1128
- 'type': ctypes.c_int32,
1001
+ "BadFaxLines": {
1002
+ "number": 326,
1003
+ "type": None,
1129
1004
  },
1130
- 'ICCProfile': {
1131
- 'number': 34675,
1132
- 'type': None,
1005
+ "CleanFaxData": {
1006
+ "number": 327,
1007
+ "type": None,
1133
1008
  },
1134
- 'ImageLayer': {
1135
- 'number': 34732,
1136
- 'type': None,
1009
+ "ConsecutiveBadFaxLines": {
1010
+ "number": 328,
1011
+ "type": None,
1137
1012
  },
1138
- 'GeoKeyDirectory': {
1139
- 'number': 34735,
1140
- 'type': None,
1013
+ "SubIFDs": {
1014
+ "number": 330,
1015
+ "type": None,
1141
1016
  },
1142
- 'GeoDoubleParams': {
1143
- 'number': 34736,
1144
- 'type': None,
1017
+ "InkSet": {
1018
+ "number": 332,
1019
+ "type": ctypes.c_uint16,
1145
1020
  },
1146
- 'GeoAsciiParams': {
1147
- 'number': 34737,
1148
- 'type': None,
1021
+ "InkNames": {
1022
+ "number": 333,
1023
+ "type": ctypes.c_char_p,
1149
1024
  },
1150
- 'ExposureProgram': {
1151
- 'number': 34850,
1152
- 'type': ctypes.c_uint16,
1025
+ "NumberOfInks": {
1026
+ "number": 334,
1027
+ "type": ctypes.c_uint16,
1153
1028
  },
1154
- 'SpectralSensitivity': {
1155
- 'number': 34852,
1156
- 'type': ctypes.c_char_p,
1029
+ "DotRange": {
1030
+ "number": 336,
1031
+ "type": None,
1157
1032
  },
1158
- 'GPSIFD': {
1159
- 'number': 34853,
1160
- 'type': None,
1033
+ "TargetPrinter": {
1034
+ "number": 337,
1035
+ "type": ctypes.c_uint16,
1161
1036
  },
1162
- 'ISOSpeedRatings': {
1163
- 'number': 34855,
1164
- 'type': ctypes.c_uint16,
1037
+ "ExtraSamples": {
1038
+ "number": 338,
1039
+ "type": ctypes.c_uint16,
1165
1040
  },
1166
- 'OECF': {
1167
- 'number': 34856,
1168
- 'type': None,
1041
+ "SampleFormat": {
1042
+ "number": 339,
1043
+ "type": ctypes.c_uint16,
1169
1044
  },
1170
- 'Interlace': {
1171
- 'number': 34857,
1172
- 'type': None,
1045
+ "SMinSampleValue": {
1046
+ "number": 340,
1047
+ "type": ctypes.c_double,
1173
1048
  },
1174
- 'TimeZoneOffset': {
1175
- 'number': 34858,
1176
- 'type': None,
1049
+ "SMaxSampleValue": {
1050
+ "number": 341,
1051
+ "type": ctypes.c_double,
1177
1052
  },
1178
- 'SelfTimerMode': {
1179
- 'number': 34859,
1180
- 'type': None,
1053
+ "TransferRange": {
1054
+ "number": 342,
1055
+ "type": None,
1181
1056
  },
1182
- 'SensitivityType': {
1183
- 'number': 34864,
1184
- 'type': None,
1057
+ "ClipPath": {
1058
+ "number": 343,
1059
+ "type": None,
1185
1060
  },
1186
- 'StandardOutputSensitivity': {
1187
- 'number': 34865,
1188
- 'type': None,
1061
+ "XClipPathUnits": {
1062
+ "number": 344,
1063
+ "type": None,
1189
1064
  },
1190
- 'RecommendedExposureIndex': {
1191
- 'number': 34866,
1192
- 'type': None,
1065
+ "YClipPathUnits": {
1066
+ "number": 345,
1067
+ "type": None,
1068
+ },
1069
+ "Indexed": {
1070
+ "number": 346,
1071
+ "type": None,
1072
+ },
1073
+ "JPEGTables": {
1074
+ "number": 347,
1075
+ "type": None,
1076
+ },
1077
+ "OPIProxy": {
1078
+ "number": 351,
1079
+ "type": None,
1080
+ },
1081
+ "GlobalParametersIFD": {
1082
+ "number": 400,
1083
+ "type": None,
1084
+ },
1085
+ "ProfileType": {
1086
+ "number": 401,
1087
+ "type": None,
1088
+ },
1089
+ "FaxProfile": {
1090
+ "number": 402,
1091
+ "type": ctypes.c_uint8,
1092
+ },
1093
+ "CodingMethods": {
1094
+ "number": 403,
1095
+ "type": None,
1096
+ },
1097
+ "VersionYear": {
1098
+ "number": 404,
1099
+ "type": None,
1100
+ },
1101
+ "ModeNumber": {
1102
+ "number": 405,
1103
+ "type": None,
1104
+ },
1105
+ "Decode": {
1106
+ "number": 433,
1107
+ "type": None,
1108
+ },
1109
+ "DefaultImageColor": {
1110
+ "number": 434,
1111
+ "type": None,
1112
+ },
1113
+ "JPEGProc": {
1114
+ "number": 512,
1115
+ "type": None,
1116
+ },
1117
+ "JPEGInterchangeFormat": {
1118
+ "number": 513,
1119
+ "type": None,
1120
+ },
1121
+ "JPEGInterchangeFormatLength": {
1122
+ "number": 514,
1123
+ "type": None,
1124
+ },
1125
+ "JPEGRestartInterval": {
1126
+ "number": 515,
1127
+ "type": None,
1128
+ },
1129
+ "JPEGLosslessPredictors": {
1130
+ "number": 517,
1131
+ "type": None,
1132
+ },
1133
+ "JPEGPointTransforms": {
1134
+ "number": 518,
1135
+ "type": None,
1136
+ },
1137
+ "JPEGQTables": {
1138
+ "number": 519,
1139
+ "type": None,
1140
+ },
1141
+ "JPEGDCTables": {
1142
+ "number": 520,
1143
+ "type": None,
1144
+ },
1145
+ "JPEGACTables": {
1146
+ "number": 521,
1147
+ "type": None,
1148
+ },
1149
+ "YCbCrCoefficients": {
1150
+ "number": 529,
1151
+ "type": (ctypes.c_float, ctypes.c_float, ctypes.c_float),
1152
+ },
1153
+ "YCbCrSubsampling": {
1154
+ "number": 530,
1155
+ "type": (ctypes.c_uint16, ctypes.c_uint16),
1156
+ },
1157
+ "YCbCrPositioning": {
1158
+ "number": 531,
1159
+ "type": ctypes.c_uint16,
1160
+ },
1161
+ "ReferenceBlackWhite": {
1162
+ "number": 532,
1163
+ "type": (
1164
+ ctypes.c_float,
1165
+ ctypes.c_float,
1166
+ ctypes.c_float,
1167
+ ctypes.c_float,
1168
+ ctypes.c_float,
1169
+ ctypes.c_float,
1170
+ ),
1171
+ },
1172
+ "StripRowCounts": {
1173
+ "number": 559,
1174
+ "type": None,
1175
+ },
1176
+ "XMLPacket": {
1177
+ "number": 700,
1178
+ "type": ctypes.c_uint8,
1179
+ },
1180
+ "ImageID": {
1181
+ "number": 32781,
1182
+ "type": None,
1183
+ },
1184
+ "Rating": {
1185
+ "number": 18246,
1186
+ "type": ctypes.c_uint16,
1187
+ },
1188
+ "RatingPercent": {
1189
+ "number": 18249,
1190
+ "type": ctypes.c_uint16,
1191
+ },
1192
+ "Datatype": {
1193
+ "number": 32996,
1194
+ "type": None,
1195
+ },
1196
+ "WANGAnnotation": {
1197
+ "number": 32932,
1198
+ "type": None,
1199
+ },
1200
+ "ImageDepth": {
1201
+ "number": 32997,
1202
+ "type": None,
1203
+ },
1204
+ "TileDepth": {
1205
+ "number": 32998,
1206
+ "type": None,
1207
+ },
1208
+ "CFARepeatPatternDim": {
1209
+ "number": 33421,
1210
+ "type": None,
1211
+ },
1212
+ "CFAPattern": {
1213
+ "number": 33422,
1214
+ "type": None,
1215
+ },
1216
+ "BatteryLevel": {
1217
+ "number": 33423,
1218
+ "type": None,
1219
+ },
1220
+ "Copyright": {
1221
+ "number": 33432,
1222
+ "type": ctypes.c_char_p,
1223
+ },
1224
+ "ExposureTime": {
1225
+ "number": 33434,
1226
+ "type": ctypes.c_double,
1227
+ },
1228
+ "FNumber": {
1229
+ "number": 33437,
1230
+ "type": ctypes.c_double,
1231
+ },
1232
+ "MDFile": {
1233
+ "number": 33445,
1234
+ "type": None,
1235
+ },
1236
+ "MDScalePixel": {
1237
+ "number": 33446,
1238
+ "type": None,
1239
+ },
1240
+ "MDColorTable": {
1241
+ "number": 33447,
1242
+ "type": None,
1243
+ },
1244
+ "MDLabName": {
1245
+ "number": 33448,
1246
+ "type": None,
1247
+ },
1248
+ "MDSampleInfo": {
1249
+ "number": 33449,
1250
+ "type": None,
1251
+ },
1252
+ "MdPrepDate": {
1253
+ "number": 33450,
1254
+ "type": None,
1255
+ },
1256
+ "MDPrepTime": {
1257
+ "number": 33451,
1258
+ "type": None,
1259
+ },
1260
+ "MDFileUnits": {
1261
+ "number": 33452,
1262
+ "type": None,
1263
+ },
1264
+ "ModelPixelScale": {
1265
+ "number": 33550,
1266
+ "type": None,
1193
1267
  },
1194
- 'ISOSpeed': {
1195
- 'number': 34867,
1196
- 'type': None,
1268
+ "IPTC": {
1269
+ "number": 33723,
1270
+ "type": None,
1197
1271
  },
1198
- 'ISOSpeedLatitudeYYY': {
1199
- 'number': 34868,
1200
- 'type': None,
1272
+ "INGRPacketData": {
1273
+ "number": 33918,
1274
+ "type": None,
1201
1275
  },
1202
- 'ISOSpeedLatitudeZZZ': {
1203
- 'number': 34869,
1204
- 'type': None,
1276
+ "INGRFlagRegisters": {
1277
+ "number": 33919,
1278
+ "type": None,
1205
1279
  },
1206
- 'HYLAFAXRecvParams': {
1207
- 'number': 34908,
1208
- 'type': None,
1280
+ "IRASbTransformationMatrix": {
1281
+ "number": 33920,
1282
+ "type": None,
1209
1283
  },
1210
- 'HYLAFAXSubAddress': {
1211
- 'number': 34909,
1212
- 'type': None,
1284
+ "ModelTiePoint": {
1285
+ "number": 33922,
1286
+ "type": None,
1213
1287
  },
1214
- 'HYLAFAXRecvTime': {
1215
- 'number': 34910,
1216
- 'type': None,
1288
+ "ModelTransformation": {
1289
+ "number": 34264,
1290
+ "type": None,
1217
1291
  },
1218
- 'ExifVersion': {
1219
- 'number': 36864,
1220
- 'type': ctypes.c_uint8,
1292
+ "Photoshop": {
1293
+ "number": 34377,
1294
+ "type": None,
1221
1295
  },
1222
- 'DateTimeOriginal': {
1223
- 'number': 36867,
1224
- 'type': None,
1296
+ "ExifTag": {
1297
+ "number": 34665,
1298
+ "type": ctypes.c_int32,
1225
1299
  },
1226
- 'DateTimeDigitized': {
1227
- 'number': 36868,
1228
- 'type': None,
1300
+ "ICCProfile": {
1301
+ "number": 34675,
1302
+ "type": None,
1229
1303
  },
1230
- 'OffsetTime': {
1231
- 'number': 36880,
1232
- 'type': None,
1304
+ "ImageLayer": {
1305
+ "number": 34732,
1306
+ "type": None,
1233
1307
  },
1234
- 'OffsetTimeOriginal': {
1235
- 'number': 36881,
1236
- 'type': None,
1308
+ "GeoKeyDirectory": {
1309
+ "number": 34735,
1310
+ "type": None,
1237
1311
  },
1238
- 'OffsetTimeDigitized': {
1239
- 'number': 36882,
1240
- 'type': None,
1312
+ "GeoDoubleParams": {
1313
+ "number": 34736,
1314
+ "type": None,
1241
1315
  },
1242
- 'ComponentsConfiguration': {
1243
- 'number': 37121,
1244
- 'type': None
1316
+ "GeoAsciiParams": {
1317
+ "number": 34737,
1318
+ "type": None,
1245
1319
  },
1246
- 'CompressedBitsPerPixel': {
1247
- 'number': 37122,
1248
- 'type': ctypes.c_uint8,
1320
+ "ExposureProgram": {
1321
+ "number": 34850,
1322
+ "type": ctypes.c_uint16,
1249
1323
  },
1250
- 'ShutterSpeedValue': {
1251
- 'number': 37377,
1252
- 'type': ctypes.c_double,
1324
+ "SpectralSensitivity": {
1325
+ "number": 34852,
1326
+ "type": ctypes.c_char_p,
1253
1327
  },
1254
- 'ApertureValue': {
1255
- 'number': 37378,
1256
- 'type': ctypes.c_double,
1328
+ "GPSIFD": {
1329
+ "number": 34853,
1330
+ "type": None,
1257
1331
  },
1258
- 'BrightnessValue': {
1259
- 'number': 37379,
1260
- 'type': ctypes.c_double,
1332
+ "ISOSpeedRatings": {
1333
+ "number": 34855,
1334
+ "type": ctypes.c_uint16,
1261
1335
  },
1262
- 'ExposureBiasValue': {
1263
- 'number': 37380,
1264
- 'type': ctypes.c_double,
1336
+ "OECF": {
1337
+ "number": 34856,
1338
+ "type": None,
1265
1339
  },
1266
- 'MaxApertureValue': {
1267
- 'number': 37381,
1268
- 'type': ctypes.c_double,
1340
+ "Interlace": {
1341
+ "number": 34857,
1342
+ "type": None,
1269
1343
  },
1270
- 'SubjectDistance': {
1271
- 'number': 37382,
1272
- 'type': ctypes.c_double,
1344
+ "TimeZoneOffset": {
1345
+ "number": 34858,
1346
+ "type": None,
1273
1347
  },
1274
- 'MeteringMode': {
1275
- 'number': 37383,
1276
- 'type': ctypes.c_uint16,
1348
+ "SelfTimerMode": {
1349
+ "number": 34859,
1350
+ "type": None,
1277
1351
  },
1278
- 'LightSource': {
1279
- 'number': 37384,
1280
- 'type': ctypes.c_uint16,
1352
+ "SensitivityType": {
1353
+ "number": 34864,
1354
+ "type": None,
1281
1355
  },
1282
- 'Flash': {
1283
- 'number': 37385,
1284
- 'type': ctypes.c_uint16,
1356
+ "StandardOutputSensitivity": {
1357
+ "number": 34865,
1358
+ "type": None,
1285
1359
  },
1286
- 'FocalLength': {
1287
- 'number': 37386,
1288
- 'type': ctypes.c_double,
1360
+ "RecommendedExposureIndex": {
1361
+ "number": 34866,
1362
+ "type": None,
1289
1363
  },
1290
- 'Noise': {
1291
- 'number': 37389,
1292
- 'type': None,
1364
+ "ISOSpeed": {
1365
+ "number": 34867,
1366
+ "type": None,
1293
1367
  },
1294
- 'ImageNumber': {
1295
- 'number': 37393,
1296
- 'type': None,
1368
+ "ISOSpeedLatitudeYYY": {
1369
+ "number": 34868,
1370
+ "type": None,
1297
1371
  },
1298
- 'SecurityClassification': {
1299
- 'number': 37394,
1300
- 'type': None,
1372
+ "ISOSpeedLatitudeZZZ": {
1373
+ "number": 34869,
1374
+ "type": None,
1301
1375
  },
1302
- 'ImageHistory': {
1303
- 'number': 37395,
1304
- 'type': None,
1376
+ "HYLAFAXRecvParams": {
1377
+ "number": 34908,
1378
+ "type": None,
1305
1379
  },
1306
- 'TIFFEPStandardID': {
1307
- 'number': 37398,
1308
- 'type': None,
1380
+ "HYLAFAXSubAddress": {
1381
+ "number": 34909,
1382
+ "type": None,
1309
1383
  },
1310
- 'MakerNote': {
1311
- 'number': 37500,
1312
- 'type': ctypes.c_char_p,
1384
+ "HYLAFAXRecvTime": {
1385
+ "number": 34910,
1386
+ "type": None,
1313
1387
  },
1314
- 'UserComment': {
1315
- 'number': 37510,
1316
- 'type': ctypes.c_char_p,
1388
+ "ExifVersion": {
1389
+ "number": 36864,
1390
+ "type": ctypes.c_uint8,
1317
1391
  },
1318
- 'SubSecTime': {
1319
- 'number': 37520,
1320
- 'type': ctypes.c_char_p,
1392
+ "DateTimeOriginal": {
1393
+ "number": 36867,
1394
+ "type": None,
1321
1395
  },
1322
- 'SubSecTimeOriginal': {
1323
- 'number': 37521,
1324
- 'type': ctypes.c_char_p,
1396
+ "DateTimeDigitized": {
1397
+ "number": 36868,
1398
+ "type": None,
1325
1399
  },
1326
- 'SubSecTimeDigitized': {
1327
- 'number': 37522,
1328
- 'type': ctypes.c_char_p,
1400
+ "OffsetTime": {
1401
+ "number": 36880,
1402
+ "type": None,
1329
1403
  },
1330
- 'ImageSourceData': {
1331
- 'number': 37724,
1332
- 'type': None,
1404
+ "OffsetTimeOriginal": {
1405
+ "number": 36881,
1406
+ "type": None,
1333
1407
  },
1334
- 'Temperature': {
1335
- 'number': 37888,
1336
- 'type': None,
1408
+ "OffsetTimeDigitized": {
1409
+ "number": 36882,
1410
+ "type": None,
1337
1411
  },
1338
- 'Humidity': {
1339
- 'number': 37889,
1340
- 'type': None,
1412
+ "ComponentsConfiguration": {"number": 37121, "type": None},
1413
+ "CompressedBitsPerPixel": {
1414
+ "number": 37122,
1415
+ "type": ctypes.c_uint8,
1341
1416
  },
1342
- 'Pressure': {
1343
- 'number': 37890,
1344
- 'type': None,
1417
+ "ShutterSpeedValue": {
1418
+ "number": 37377,
1419
+ "type": ctypes.c_double,
1345
1420
  },
1346
- 'WaterDepth': {
1347
- 'number': 37891,
1348
- 'type': None,
1421
+ "ApertureValue": {
1422
+ "number": 37378,
1423
+ "type": ctypes.c_double,
1349
1424
  },
1350
- 'Acceleration': {
1351
- 'number': 37892,
1352
- 'type': None,
1425
+ "BrightnessValue": {
1426
+ "number": 37379,
1427
+ "type": ctypes.c_double,
1353
1428
  },
1354
- 'CameraElevationAngle': {
1355
- 'number': 37893,
1356
- 'type': None,
1429
+ "ExposureBiasValue": {
1430
+ "number": 37380,
1431
+ "type": ctypes.c_double,
1357
1432
  },
1358
- 'XPTitle': {
1359
- 'number': 40091,
1360
- 'type': None,
1433
+ "MaxApertureValue": {
1434
+ "number": 37381,
1435
+ "type": ctypes.c_double,
1361
1436
  },
1362
- 'XPComment': {
1363
- 'number': 40092,
1364
- 'type': None,
1437
+ "SubjectDistance": {
1438
+ "number": 37382,
1439
+ "type": ctypes.c_double,
1365
1440
  },
1366
- 'XPAuthor': {
1367
- 'number': 40093,
1368
- 'type': None,
1441
+ "MeteringMode": {
1442
+ "number": 37383,
1443
+ "type": ctypes.c_uint16,
1369
1444
  },
1370
- 'XPKeywords': {
1371
- 'number': 40094,
1372
- 'type': None,
1445
+ "LightSource": {
1446
+ "number": 37384,
1447
+ "type": ctypes.c_uint16,
1373
1448
  },
1374
- 'XPSubject': {
1375
- 'number': 40095,
1376
- 'type': None,
1449
+ "Flash": {
1450
+ "number": 37385,
1451
+ "type": ctypes.c_uint16,
1377
1452
  },
1378
- 'FlashPixVersion': {
1379
- 'number': 40960,
1380
- 'type': None,
1453
+ "FocalLength": {
1454
+ "number": 37386,
1455
+ "type": ctypes.c_double,
1381
1456
  },
1382
- 'ColorSpace': {
1383
- 'number': 40961,
1384
- 'type': ctypes.c_uint16,
1457
+ "Noise": {
1458
+ "number": 37389,
1459
+ "type": None,
1385
1460
  },
1386
- 'PixelXDimension': {
1387
- 'number': 40962,
1388
- 'type': ctypes.c_uint64,
1461
+ "ImageNumber": {
1462
+ "number": 37393,
1463
+ "type": None,
1389
1464
  },
1390
- 'PixelYDimension': {
1391
- 'number': 40963,
1392
- 'type': ctypes.c_uint64,
1465
+ "SecurityClassification": {
1466
+ "number": 37394,
1467
+ "type": None,
1393
1468
  },
1394
- 'InteroperabilityIFD': {
1395
- 'number': 40965,
1396
- 'type': None,
1469
+ "ImageHistory": {
1470
+ "number": 37395,
1471
+ "type": None,
1397
1472
  },
1398
- 'FocalPlaneXResolution': {
1399
- 'number': 41486,
1400
- 'type': ctypes.c_double,
1473
+ "TIFFEPStandardID": {
1474
+ "number": 37398,
1475
+ "type": None,
1401
1476
  },
1402
- 'FocalPlaneYResolution': {
1403
- 'number': 41487,
1404
- 'type': ctypes.c_double,
1477
+ "MakerNote": {
1478
+ "number": 37500,
1479
+ "type": ctypes.c_char_p,
1405
1480
  },
1406
- 'FocalPlaneResolutionUnit': {
1407
- 'number': 41488,
1408
- 'type': ctypes.c_uint16,
1481
+ "UserComment": {
1482
+ "number": 37510,
1483
+ "type": ctypes.c_char_p,
1409
1484
  },
1410
- 'ExposureIndex': {
1411
- 'number': 41493,
1412
- 'type': ctypes.c_double,
1485
+ "SubSecTime": {
1486
+ "number": 37520,
1487
+ "type": ctypes.c_char_p,
1413
1488
  },
1414
- 'SensingMethod': {
1415
- 'number': 41495,
1416
- 'type': ctypes.c_uint16,
1489
+ "SubSecTimeOriginal": {
1490
+ "number": 37521,
1491
+ "type": ctypes.c_char_p,
1492
+ },
1493
+ "SubSecTimeDigitized": {
1494
+ "number": 37522,
1495
+ "type": ctypes.c_char_p,
1496
+ },
1497
+ "ImageSourceData": {
1498
+ "number": 37724,
1499
+ "type": None,
1500
+ },
1501
+ "Temperature": {
1502
+ "number": 37888,
1503
+ "type": None,
1504
+ },
1505
+ "Humidity": {
1506
+ "number": 37889,
1507
+ "type": None,
1508
+ },
1509
+ "Pressure": {
1510
+ "number": 37890,
1511
+ "type": None,
1512
+ },
1513
+ "WaterDepth": {
1514
+ "number": 37891,
1515
+ "type": None,
1516
+ },
1517
+ "Acceleration": {
1518
+ "number": 37892,
1519
+ "type": None,
1520
+ },
1521
+ "CameraElevationAngle": {
1522
+ "number": 37893,
1523
+ "type": None,
1524
+ },
1525
+ "XPTitle": {
1526
+ "number": 40091,
1527
+ "type": None,
1528
+ },
1529
+ "XPComment": {
1530
+ "number": 40092,
1531
+ "type": None,
1532
+ },
1533
+ "XPAuthor": {
1534
+ "number": 40093,
1535
+ "type": None,
1536
+ },
1537
+ "XPKeywords": {
1538
+ "number": 40094,
1539
+ "type": None,
1540
+ },
1541
+ "XPSubject": {
1542
+ "number": 40095,
1543
+ "type": None,
1544
+ },
1545
+ "FlashPixVersion": {
1546
+ "number": 40960,
1547
+ "type": None,
1548
+ },
1549
+ "ColorSpace": {
1550
+ "number": 40961,
1551
+ "type": ctypes.c_uint16,
1552
+ },
1553
+ "PixelXDimension": {
1554
+ "number": 40962,
1555
+ "type": ctypes.c_uint64,
1556
+ },
1557
+ "PixelYDimension": {
1558
+ "number": 40963,
1559
+ "type": ctypes.c_uint64,
1560
+ },
1561
+ "InteroperabilityIFD": {
1562
+ "number": 40965,
1563
+ "type": None,
1564
+ },
1565
+ "FocalPlaneXResolution": {
1566
+ "number": 41486,
1567
+ "type": ctypes.c_double,
1568
+ },
1569
+ "FocalPlaneYResolution": {
1570
+ "number": 41487,
1571
+ "type": ctypes.c_double,
1572
+ },
1573
+ "FocalPlaneResolutionUnit": {
1574
+ "number": 41488,
1575
+ "type": ctypes.c_uint16,
1576
+ },
1577
+ "ExposureIndex": {
1578
+ "number": 41493,
1579
+ "type": ctypes.c_double,
1580
+ },
1581
+ "SensingMethod": {
1582
+ "number": 41495,
1583
+ "type": ctypes.c_uint16,
1584
+ },
1585
+ "SceneType": {
1586
+ "number": 41729,
1587
+ "type": ctypes.c_uint8,
1588
+ },
1589
+ "FlashEnergy": {"number": 41483, "type": None},
1590
+ "SpatialFrequencyResponse": {"number": 41484, "type": None},
1591
+ "SubjectLocation": {"number": 41492, "type": None},
1592
+ "FileSource": {"number": 41728, "type": None},
1593
+ "ExifCFAPattern": {"number": 41730, "type": None},
1594
+ "CustomRendered": {"number": 41985, "type": None},
1595
+ "ExposureMode": {
1596
+ "number": 41986,
1597
+ "type": ctypes.c_uint16,
1598
+ },
1599
+ "WhiteBalance": {
1600
+ "number": 41987,
1601
+ "type": ctypes.c_uint16,
1602
+ },
1603
+ "DigitalZoomRatio": {
1604
+ "number": 41988,
1605
+ "type": ctypes.c_double,
1606
+ },
1607
+ "FocalLengthIn35mmFilm": {
1608
+ "number": 41989,
1609
+ "type": ctypes.c_uint16,
1610
+ },
1611
+ "SceneCaptureType": {
1612
+ "number": 41990,
1613
+ "type": ctypes.c_uint16,
1614
+ },
1615
+ "GainControl": {
1616
+ "number": 41991,
1617
+ "type": ctypes.c_uint16,
1618
+ },
1619
+ "Contrast": {
1620
+ "number": 41992,
1621
+ "type": ctypes.c_uint16,
1622
+ },
1623
+ "Saturation": {
1624
+ "number": 41993,
1625
+ "type": ctypes.c_uint16,
1626
+ },
1627
+ "Sharpness": {
1628
+ "number": 41994,
1629
+ "type": ctypes.c_uint16,
1630
+ },
1631
+ "DeviceSettingDescription": {
1632
+ "number": 41995,
1633
+ "type": ctypes.c_char_p,
1634
+ },
1635
+ "SubjectDistanceRange": {
1636
+ "number": 41996,
1637
+ "type": ctypes.c_uint16,
1638
+ },
1639
+ "ImageUniqueID": {"number": 42016, "type": None},
1640
+ "CameraOwnerName": {"number": 42032, "type": None},
1641
+ "BodySerialNumber": {"number": 42033, "type": None},
1642
+ "LensSpecification": {"number": 42034, "type": None},
1643
+ "LensMake": {"number": 42035, "type": None},
1644
+ "LensModel": {"number": 42036, "type": None},
1645
+ "LensSerialNumber": {"number": 42037, "type": None},
1646
+ "CompositeImage": {"number": 42080, "type": None},
1647
+ "SourceImageNumberOfCompositeImage": {"number": 42081, "type": None},
1648
+ "SourceExposureTimeOfCompositeImage": {"number": 42082, "type": None},
1649
+ "GDAL_Metadata": {
1650
+ "number": 42112,
1651
+ "type": None,
1652
+ },
1653
+ "GDAL_NoData": {
1654
+ "number": 42113,
1655
+ "type": None,
1656
+ },
1657
+ "Gamma": {
1658
+ "number": 42240,
1659
+ "type": None,
1660
+ },
1661
+ "OCEScanJobDescription": {
1662
+ "number": 50215,
1663
+ "type": None,
1664
+ },
1665
+ "OCEApplicationSelector": {
1666
+ "number": 50216,
1667
+ "type": None,
1668
+ },
1669
+ "OCEIdentificationNumber": {
1670
+ "number": 50217,
1671
+ "type": None,
1672
+ },
1673
+ "OCEImageLogicCharacteristics": {
1674
+ "number": 50218,
1675
+ "type": None,
1676
+ },
1677
+ "PrintImageMatching": {
1678
+ "number": 50341,
1679
+ "type": None,
1680
+ },
1681
+ "DNGVersion": {
1682
+ "number": 50706,
1683
+ "type": None,
1684
+ },
1685
+ "DNGBackwardVersion": {
1686
+ "number": 50707,
1687
+ "type": None,
1688
+ },
1689
+ "UniqueCameraModel": {
1690
+ "number": 50708,
1691
+ "type": None,
1692
+ },
1693
+ "LocalizedCameraModel": {
1694
+ "number": 50709,
1695
+ "type": None,
1696
+ },
1697
+ "CFAPlaneColor": {
1698
+ "number": 50710,
1699
+ "type": None,
1700
+ },
1701
+ "CFALayout": {
1702
+ "number": 50711,
1703
+ "type": None,
1704
+ },
1705
+ "LinearizationTable": {
1706
+ "number": 50712,
1707
+ "type": None,
1708
+ },
1709
+ "BlackLevelRepeatDim": {
1710
+ "number": 50713,
1711
+ "type": None,
1712
+ },
1713
+ "BlackLevel": {
1714
+ "number": 50714,
1715
+ "type": None,
1716
+ },
1717
+ "BlackLevelDeltaH": {
1718
+ "number": 50715,
1719
+ "type": None,
1720
+ },
1721
+ "BlackLevelDeltaV": {
1722
+ "number": 50716,
1723
+ "type": None,
1724
+ },
1725
+ "WhiteLevel": {
1726
+ "number": 50717,
1727
+ "type": None,
1728
+ },
1729
+ "DefaultScale": {
1730
+ "number": 50718,
1731
+ "type": None,
1732
+ },
1733
+ "DefaultCropOrigin": {
1734
+ "number": 50719,
1735
+ "type": None,
1736
+ },
1737
+ "DefaultCropSize": {
1738
+ "number": 50720,
1739
+ "type": None,
1740
+ },
1741
+ "ColorMatrix1": {
1742
+ "number": 50721,
1743
+ "type": None,
1744
+ },
1745
+ "ColorMatrix2": {
1746
+ "number": 50722,
1747
+ "type": None,
1417
1748
  },
1418
- 'SceneType': {
1419
- 'number': 41729,
1420
- 'type': ctypes.c_uint8,
1749
+ "CameraCalibration1": {
1750
+ "number": 50723,
1751
+ "type": None,
1421
1752
  },
1422
- 'FlashEnergy': {
1423
- 'number': 41483,
1424
- 'type': None
1753
+ "CameraCalibration2": {
1754
+ "number": 50724,
1755
+ "type": None,
1425
1756
  },
1426
- 'SpatialFrequencyResponse': {
1427
- 'number': 41484,
1428
- 'type': None
1757
+ "ReductionMatrix1": {
1758
+ "number": 50725,
1759
+ "type": None,
1429
1760
  },
1430
- 'SubjectLocation': {
1431
- 'number': 41492,
1432
- 'type': None
1761
+ "ReductionMatrix2": {
1762
+ "number": 50726,
1763
+ "type": None,
1433
1764
  },
1434
- 'FileSource': {
1435
- 'number': 41728,
1436
- 'type': None
1765
+ "AnalogBalance": {
1766
+ "number": 50727,
1767
+ "type": None,
1437
1768
  },
1438
- 'ExifCFAPattern': {
1439
- 'number': 41730,
1440
- 'type': None
1769
+ "AsShotNeutral": {
1770
+ "number": 50728,
1771
+ "type": None,
1441
1772
  },
1442
- 'CustomRendered': {
1443
- 'number': 41985,
1444
- 'type': None
1773
+ "AsShotWhiteXY": {
1774
+ "number": 50729,
1775
+ "type": None,
1445
1776
  },
1446
- 'ExposureMode': {
1447
- 'number': 41986,
1448
- 'type': ctypes.c_uint16,
1777
+ "BaselineExposure": {
1778
+ "number": 50730,
1779
+ "type": None,
1449
1780
  },
1450
- 'WhiteBalance': {
1451
- 'number': 41987,
1452
- 'type': ctypes.c_uint16,
1781
+ "BaselineNoise": {
1782
+ "number": 50731,
1783
+ "type": None,
1453
1784
  },
1454
- 'DigitalZoomRatio': {
1455
- 'number': 41988,
1456
- 'type': ctypes.c_double,
1785
+ "BaselineSharpness": {
1786
+ "number": 50732,
1787
+ "type": None,
1457
1788
  },
1458
- 'FocalLengthIn35mmFilm': {
1459
- 'number': 41989,
1460
- 'type': ctypes.c_uint16,
1789
+ "BayerGreenSplit": {
1790
+ "number": 50733,
1791
+ "type": None,
1461
1792
  },
1462
- 'SceneCaptureType': {
1463
- 'number': 41990,
1464
- 'type': ctypes.c_uint16,
1793
+ "LinearResponseLimit": {
1794
+ "number": 50734,
1795
+ "type": None,
1465
1796
  },
1466
- 'GainControl': {
1467
- 'number': 41991,
1468
- 'type': ctypes.c_uint16,
1797
+ "CameraSerialNumber": {
1798
+ "number": 50735,
1799
+ "type": None,
1469
1800
  },
1470
- 'Contrast': {
1471
- 'number': 41992,
1472
- 'type': ctypes.c_uint16,
1801
+ "LensInfo": {
1802
+ "number": 50736,
1803
+ "type": None,
1473
1804
  },
1474
- 'Saturation': {
1475
- 'number': 41993,
1476
- 'type': ctypes.c_uint16,
1805
+ "ChromaBlurRadius": {
1806
+ "number": 50737,
1807
+ "type": None,
1477
1808
  },
1478
- 'Sharpness': {
1479
- 'number': 41994,
1480
- 'type': ctypes.c_uint16,
1809
+ "AntiAliasStrength": {
1810
+ "number": 50738,
1811
+ "type": None,
1481
1812
  },
1482
- 'DeviceSettingDescription': {
1483
- 'number': 41995,
1484
- 'type': ctypes.c_char_p,
1813
+ "ShadowScale": {
1814
+ "number": 50739,
1815
+ "type": None,
1485
1816
  },
1486
- 'SubjectDistanceRange': {
1487
- 'number': 41996,
1488
- 'type': ctypes.c_uint16,
1817
+ "DNGPrivateData": {
1818
+ "number": 50740,
1819
+ "type": None,
1489
1820
  },
1490
- 'ImageUniqueID': {
1491
- 'number': 42016,
1492
- 'type': None
1821
+ "MakerNoteSafety": {
1822
+ "number": 50741,
1823
+ "type": None,
1493
1824
  },
1494
- 'CameraOwnerName': {
1495
- 'number': 42032,
1496
- 'type': None
1825
+ "CalibrationIllumintant1": {
1826
+ "number": 50778,
1827
+ "type": None,
1497
1828
  },
1498
- 'BodySerialNumber': {
1499
- 'number': 42033,
1500
- 'type': None
1829
+ "CalibrationIllumintant2": {
1830
+ "number": 50779,
1831
+ "type": None,
1501
1832
  },
1502
- 'LensSpecification': {
1503
- 'number': 42034,
1504
- 'type': None
1833
+ "BestQualityScale": {
1834
+ "number": 50780,
1835
+ "type": None,
1505
1836
  },
1506
- 'LensMake': {
1507
- 'number': 42035,
1508
- 'type': None
1837
+ "RawDataUniqueID": {
1838
+ "number": 50781,
1839
+ "type": None,
1509
1840
  },
1510
- 'LensModel': {
1511
- 'number': 42036,
1512
- 'type': None
1841
+ "AliasLayerMetadata": {
1842
+ "number": 50784,
1843
+ "type": None,
1513
1844
  },
1514
- 'LensSerialNumber': {
1515
- 'number': 42037,
1516
- 'type': None
1845
+ "OriginalRawFileName": {
1846
+ "number": 50827,
1847
+ "type": None,
1517
1848
  },
1518
- 'CompositeImage': {
1519
- 'number': 42080,
1520
- 'type': None
1849
+ "OriginalRawFileData": {
1850
+ "number": 50828,
1851
+ "type": None,
1521
1852
  },
1522
- 'SourceImageNumberOfCompositeImage': {
1523
- 'number': 42081,
1524
- 'type': None
1853
+ "ActiveArea": {
1854
+ "number": 50829,
1855
+ "type": None,
1525
1856
  },
1526
- 'SourceExposureTimeOfCompositeImage': {
1527
- 'number': 42082,
1528
- 'type': None
1857
+ "MaskedAreas": {
1858
+ "number": 50830,
1859
+ "type": None,
1529
1860
  },
1530
- 'GDAL_Metadata': {
1531
- 'number': 42112,
1532
- 'type': None,
1861
+ "AsShotICCProfile": {
1862
+ "number": 50831,
1863
+ "type": None,
1533
1864
  },
1534
- 'GDAL_NoData': {
1535
- 'number': 42113,
1536
- 'type': None,
1865
+ "AsShotPreProfileMatrix": {
1866
+ "number": 50832,
1867
+ "type": None,
1537
1868
  },
1538
- 'Gamma': {
1539
- 'number': 42240,
1540
- 'type': None,
1869
+ "CurrentICCProfile": {
1870
+ "number": 50833,
1871
+ "type": None,
1541
1872
  },
1542
- 'OCEScanJobDescription': {
1543
- 'number': 50215,
1544
- 'type': None,
1873
+ "CurrentPreProfileMatrix": {
1874
+ "number": 50834,
1875
+ "type": None,
1545
1876
  },
1546
- 'OCEApplicationSelector': {
1547
- 'number': 50216,
1548
- 'type': None,
1877
+ "ColorimetricReference": {
1878
+ "number": 50839,
1879
+ "type": None,
1549
1880
  },
1550
- 'OCEIdentificationNumber': {
1551
- 'number': 50217,
1552
- 'type': None,
1881
+ "TIFF_RSID": {
1882
+ "number": 50908,
1883
+ "type": None,
1553
1884
  },
1554
- 'OCEImageLogicCharacteristics': {
1555
- 'number': 50218,
1556
- 'type': None,
1885
+ "GEO_Metadata": {
1886
+ "number": 50909,
1887
+ "type": None,
1557
1888
  },
1558
- 'PrintImageMatching': {
1559
- 'number': 50341,
1560
- 'type': None,
1889
+ "CameraCalibrationSignature": {
1890
+ "number": 50931,
1891
+ "type": None,
1561
1892
  },
1562
- 'DNGVersion': {
1563
- 'number': 50706,
1564
- 'type': None,
1893
+ "ProfileCalibrationSignature": {
1894
+ "number": 50932,
1895
+ "type": None,
1565
1896
  },
1566
- 'DNGBackwardVersion': {
1567
- 'number': 50707,
1568
- 'type': None,
1897
+ "AsShotProfileName": {
1898
+ "number": 50934,
1899
+ "type": None,
1569
1900
  },
1570
- 'UniqueCameraModel': {
1571
- 'number': 50708,
1572
- 'type': None,
1901
+ "NoiseReductionApplied": {
1902
+ "number": 50935,
1903
+ "type": None,
1573
1904
  },
1574
- 'LocalizedCameraModel': {
1575
- 'number': 50709,
1576
- 'type': None,
1905
+ "ProfileName": {
1906
+ "number": 50936,
1907
+ "type": None,
1577
1908
  },
1578
- 'CFAPlaneColor': {
1579
- 'number': 50710,
1580
- 'type': None,
1909
+ "ProfileHueSatMapDims": {
1910
+ "number": 50937,
1911
+ "type": None,
1581
1912
  },
1582
- 'CFALayout': {
1583
- 'number': 50711,
1584
- 'type': None,
1913
+ "ProfileHueSatMapData1": {
1914
+ "number": 50938,
1915
+ "type": None,
1585
1916
  },
1586
- 'LinearizationTable': {
1587
- 'number': 50712,
1588
- 'type': None,
1917
+ "ProfileHueSatMapData2": {
1918
+ "number": 50939,
1919
+ "type": None,
1589
1920
  },
1590
- 'BlackLevelRepeatDim': {
1591
- 'number': 50713,
1592
- 'type': None,
1921
+ "ProfileToneCurve": {
1922
+ "number": 50940,
1923
+ "type": None,
1593
1924
  },
1594
- 'BlackLevel': {
1595
- 'number': 50714,
1596
- 'type': None,
1925
+ "ProfileEmbedPolicy": {
1926
+ "number": 50941,
1927
+ "type": None,
1597
1928
  },
1598
- 'BlackLevelDeltaH': {
1599
- 'number': 50715,
1600
- 'type': None,
1929
+ "ProfileCopyright": {
1930
+ "number": 50942,
1931
+ "type": None,
1601
1932
  },
1602
- 'BlackLevelDeltaV': {
1603
- 'number': 50716,
1604
- 'type': None,
1933
+ "ForwardMatrix1": {
1934
+ "number": 50964,
1935
+ "type": None,
1605
1936
  },
1606
- 'WhiteLevel': {
1607
- 'number': 50717,
1608
- 'type': None,
1937
+ "ForwardMatrix2": {
1938
+ "number": 50965,
1939
+ "type": None,
1609
1940
  },
1610
- 'DefaultScale': {
1611
- 'number': 50718,
1612
- 'type': None,
1941
+ "PreviewApplicationName": {
1942
+ "number": 50966,
1943
+ "type": None,
1613
1944
  },
1614
- 'DefaultCropOrigin': {
1615
- 'number': 50719,
1616
- 'type': None,
1945
+ "PreviewApplicationVersion": {
1946
+ "number": 50967,
1947
+ "type": None,
1617
1948
  },
1618
- 'DefaultCropSize': {
1619
- 'number': 50720,
1620
- 'type': None,
1949
+ "PreviewSettingsName": {
1950
+ "number": 50968,
1951
+ "type": None,
1621
1952
  },
1622
- 'ColorMatrix1': {
1623
- 'number': 50721,
1624
- 'type': None,
1953
+ "PreviewSettingsDigest": {
1954
+ "number": 50969,
1955
+ "type": None,
1625
1956
  },
1626
- 'ColorMatrix2': {
1627
- 'number': 50722,
1628
- 'type': None,
1957
+ "PreviewColorSpace": {
1958
+ "number": 50970,
1959
+ "type": None,
1629
1960
  },
1630
- 'CameraCalibration1': {
1631
- 'number': 50723,
1632
- 'type': None,
1961
+ "PreviewDateTime": {
1962
+ "number": 50971,
1963
+ "type": None,
1633
1964
  },
1634
- 'CameraCalibration2': {
1635
- 'number': 50724,
1636
- 'type': None,
1965
+ "RawImageDigest": {
1966
+ "number": 50972,
1967
+ "type": None,
1637
1968
  },
1638
- 'ReductionMatrix1': {
1639
- 'number': 50725,
1640
- 'type': None,
1969
+ "OriginalRawFileDigest": {
1970
+ "number": 50973,
1971
+ "type": None,
1641
1972
  },
1642
- 'ReductionMatrix2': {
1643
- 'number': 50726,
1644
- 'type': None,
1973
+ "SubTileBlockSize": {
1974
+ "number": 50974,
1975
+ "type": None,
1645
1976
  },
1646
- 'AnalogBalance': {
1647
- 'number': 50727,
1648
- 'type': None,
1977
+ "RowInterleaveFactor": {
1978
+ "number": 50975,
1979
+ "type": None,
1649
1980
  },
1650
- 'AsShotNeutral': {
1651
- 'number': 50728,
1652
- 'type': None,
1981
+ "ProfileLookTableDims": {
1982
+ "number": 50981,
1983
+ "type": None,
1653
1984
  },
1654
- 'AsShotWhiteXY': {
1655
- 'number': 50729,
1656
- 'type': None,
1985
+ "ProfileLookTableData": {
1986
+ "number": 50982,
1987
+ "type": None,
1657
1988
  },
1658
- 'BaselineExposure': {
1659
- 'number': 50730,
1660
- 'type': None,
1989
+ "OpcodeList1": {
1990
+ "number": 51008,
1991
+ "type": None,
1661
1992
  },
1662
- 'BaselineNoise': {
1663
- 'number': 50731,
1664
- 'type': None,
1993
+ "OpcodeList2": {
1994
+ "number": 51009,
1995
+ "type": None,
1665
1996
  },
1666
- 'BaselineSharpness': {
1667
- 'number': 50732,
1668
- 'type': None,
1997
+ "OpcodeList3": {
1998
+ "number": 51022,
1999
+ "type": None,
1669
2000
  },
1670
- 'BayerGreenSplit': {
1671
- 'number': 50733,
1672
- 'type': None,
2001
+ "NoiseProfile": {
2002
+ "number": 51041,
2003
+ "type": None,
1673
2004
  },
1674
- 'LinearResponseLimit': {
1675
- 'number': 50734,
1676
- 'type': None,
2005
+ "JPEGQuality": {
2006
+ "number": 65537,
2007
+ "type": ctypes.c_int32,
1677
2008
  },
1678
- 'CameraSerialNumber': {
1679
- 'number': 50735,
1680
- 'type': None,
1681
- },
1682
- 'LensInfo': {
1683
- 'number': 50736,
1684
- 'type': None,
1685
- },
1686
- 'ChromaBlurRadius': {
1687
- 'number': 50737,
1688
- 'type': None,
1689
- },
1690
- 'AntiAliasStrength': {
1691
- 'number': 50738,
1692
- 'type': None,
1693
- },
1694
- 'ShadowScale': {
1695
- 'number': 50739,
1696
- 'type': None,
1697
- },
1698
- 'DNGPrivateData': {
1699
- 'number': 50740,
1700
- 'type': None,
1701
- },
1702
- 'MakerNoteSafety': {
1703
- 'number': 50741,
1704
- 'type': None,
1705
- },
1706
- 'CalibrationIllumintant1': {
1707
- 'number': 50778,
1708
- 'type': None,
1709
- },
1710
- 'CalibrationIllumintant2': {
1711
- 'number': 50779,
1712
- 'type': None,
1713
- },
1714
- 'BestQualityScale': {
1715
- 'number': 50780,
1716
- 'type': None,
1717
- },
1718
- 'RawDataUniqueID': {
1719
- 'number': 50781,
1720
- 'type': None,
1721
- },
1722
- 'AliasLayerMetadata': {
1723
- 'number': 50784,
1724
- 'type': None,
1725
- },
1726
- 'OriginalRawFileName': {
1727
- 'number': 50827,
1728
- 'type': None,
1729
- },
1730
- 'OriginalRawFileData': {
1731
- 'number': 50828,
1732
- 'type': None,
1733
- },
1734
- 'ActiveArea': {
1735
- 'number': 50829,
1736
- 'type': None,
1737
- },
1738
- 'MaskedAreas': {
1739
- 'number': 50830,
1740
- 'type': None,
1741
- },
1742
- 'AsShotICCProfile': {
1743
- 'number': 50831,
1744
- 'type': None,
1745
- },
1746
- 'AsShotPreProfileMatrix': {
1747
- 'number': 50832,
1748
- 'type': None,
1749
- },
1750
- 'CurrentICCProfile': {
1751
- 'number': 50833,
1752
- 'type': None,
1753
- },
1754
- 'CurrentPreProfileMatrix': {
1755
- 'number': 50834,
1756
- 'type': None,
1757
- },
1758
- 'ColorimetricReference': {
1759
- 'number': 50839,
1760
- 'type': None,
1761
- },
1762
- 'TIFF_RSID': {
1763
- 'number': 50908,
1764
- 'type': None,
1765
- },
1766
- 'GEO_Metadata': {
1767
- 'number': 50909,
1768
- 'type': None,
1769
- },
1770
- 'CameraCalibrationSignature': {
1771
- 'number': 50931,
1772
- 'type': None,
1773
- },
1774
- 'ProfileCalibrationSignature': {
1775
- 'number': 50932,
1776
- 'type': None,
1777
- },
1778
- 'AsShotProfileName': {
1779
- 'number': 50934,
1780
- 'type': None,
1781
- },
1782
- 'NoiseReductionApplied': {
1783
- 'number': 50935,
1784
- 'type': None,
1785
- },
1786
- 'ProfileName': {
1787
- 'number': 50936,
1788
- 'type': None,
1789
- },
1790
- 'ProfileHueSatMapDims': {
1791
- 'number': 50937,
1792
- 'type': None,
1793
- },
1794
- 'ProfileHueSatMapData1': {
1795
- 'number': 50938,
1796
- 'type': None,
1797
- },
1798
- 'ProfileHueSatMapData2': {
1799
- 'number': 50939,
1800
- 'type': None,
1801
- },
1802
- 'ProfileToneCurve': {
1803
- 'number': 50940,
1804
- 'type': None,
1805
- },
1806
- 'ProfileEmbedPolicy': {
1807
- 'number': 50941,
1808
- 'type': None,
1809
- },
1810
- 'ProfileCopyright': {
1811
- 'number': 50942,
1812
- 'type': None,
1813
- },
1814
- 'ForwardMatrix1': {
1815
- 'number': 50964,
1816
- 'type': None,
1817
- },
1818
- 'ForwardMatrix2': {
1819
- 'number': 50965,
1820
- 'type': None,
1821
- },
1822
- 'PreviewApplicationName': {
1823
- 'number': 50966,
1824
- 'type': None,
1825
- },
1826
- 'PreviewApplicationVersion': {
1827
- 'number': 50967,
1828
- 'type': None,
1829
- },
1830
- 'PreviewSettingsName': {
1831
- 'number': 50968,
1832
- 'type': None,
1833
- },
1834
- 'PreviewSettingsDigest': {
1835
- 'number': 50969,
1836
- 'type': None,
1837
- },
1838
- 'PreviewColorSpace': {
1839
- 'number': 50970,
1840
- 'type': None,
1841
- },
1842
- 'PreviewDateTime': {
1843
- 'number': 50971,
1844
- 'type': None,
1845
- },
1846
- 'RawImageDigest': {
1847
- 'number': 50972,
1848
- 'type': None,
1849
- },
1850
- 'OriginalRawFileDigest': {
1851
- 'number': 50973,
1852
- 'type': None,
1853
- },
1854
- 'SubTileBlockSize': {
1855
- 'number': 50974,
1856
- 'type': None,
1857
- },
1858
- 'RowInterleaveFactor': {
1859
- 'number': 50975,
1860
- 'type': None,
1861
- },
1862
- 'ProfileLookTableDims': {
1863
- 'number': 50981,
1864
- 'type': None,
1865
- },
1866
- 'ProfileLookTableData': {
1867
- 'number': 50982,
1868
- 'type': None,
1869
- },
1870
- 'OpcodeList1': {
1871
- 'number': 51008,
1872
- 'type': None,
1873
- },
1874
- 'OpcodeList2': {
1875
- 'number': 51009,
1876
- 'type': None,
1877
- },
1878
- 'OpcodeList3': {
1879
- 'number': 51022,
1880
- 'type': None,
1881
- },
1882
- 'NoiseProfile': {
1883
- 'number': 51041,
1884
- 'type': None,
1885
- },
1886
- 'JPEGQuality': {
1887
- 'number': 65537,
1888
- 'type': ctypes.c_int32,
1889
- },
1890
- 'JPEGColorMode': {
1891
- 'number': 65538,
1892
- 'type': ctypes.c_int32,
2009
+ "JPEGColorMode": {
2010
+ "number": 65538,
2011
+ "type": ctypes.c_int32,
1893
2012
  },
1894
2013
  }
1895
2014
 
1896
2015
  # We need the reverse mapping as well.
1897
- TAGNUM2NAME = {value['number']: key for key, value in TAGS.items()}
2016
+ TAGNUM2NAME = {value["number"]: key for key, value in TAGS.items()}
1898
2017
 
1899
2018
 
1900
2019
  def tiff_header(read_buffer):
1901
2020
  """Interpret the uuid raw data as a tiff header."""
1902
2021
  # First 8 should be (73, 73, 42, 8) or (77, 77, 42, 8)
1903
- data = struct.unpack('BB', read_buffer[0:2])
2022
+ data = struct.unpack("BB", read_buffer[0:2])
1904
2023
  if data[0] == 73 and data[1] == 73:
1905
2024
  # little endian
1906
- endian = '<'
2025
+ endian = "<"
1907
2026
  elif data[0] == 77 and data[1] == 77:
1908
2027
  # big endian
1909
- endian = '>'
2028
+ endian = ">"
1910
2029
  else:
1911
2030
  msg = (
1912
2031
  f"The byte order indication in the TIFF header "
@@ -1915,7 +2034,7 @@ def tiff_header(read_buffer):
1915
2034
  )
1916
2035
  raise RuntimeError(msg)
1917
2036
 
1918
- _, offset = struct.unpack(endian + 'HI', read_buffer[2:8])
2037
+ _, offset = struct.unpack(endian + "HI", read_buffer[2:8])
1919
2038
 
1920
2039
  # This is the 'Exif Image' portion.
1921
2040
  return _Ifd(endian, read_buffer, offset).processed_ifd
@@ -1925,6 +2044,7 @@ class BadTiffTagDatatype(RuntimeError):
1925
2044
  """This exception exists soley to better communicate up the stack that the
1926
2045
  problem exists.
1927
2046
  """
2047
+
1928
2048
  pass
1929
2049
 
1930
2050
 
@@ -1944,16 +2064,18 @@ class _Ifd(object):
1944
2064
  processed_ifd : dictionary
1945
2065
  Maps tag name to "mildly-interpreted" tag value.
1946
2066
  """
2067
+
1947
2068
  def __init__(self, endian, read_buffer, offset):
1948
2069
  self.endian = endian
1949
2070
  self.read_buffer = read_buffer
1950
2071
  self.processed_ifd = OrderedDict()
1951
2072
 
1952
- self.num_tags, = struct.unpack(
1953
- endian + 'H', read_buffer[offset:offset + 2]
2073
+ (self.num_tags,) = struct.unpack(
2074
+ endian + "H",
2075
+ read_buffer[offset:offset + 2]
1954
2076
  )
1955
2077
 
1956
- fmt = self.endian + 'HHII' * self.num_tags
2078
+ fmt = self.endian + "HHII" * self.num_tags
1957
2079
  ifd_buffer = read_buffer[offset + 2:offset + 2 + self.num_tags * 12]
1958
2080
  data = struct.unpack(fmt, ifd_buffer)
1959
2081
  self.raw_ifd = OrderedDict()
@@ -1970,11 +2092,12 @@ class _Ifd(object):
1970
2092
 
1971
2093
  def parse_tag(self, tag, dtype, count, offset_buf):
1972
2094
  """Interpret an Exif image tag data payload."""
2095
+
1973
2096
  try:
1974
- fmt = DATATYPE2FMT[dtype]['format'] * count
1975
- payload_size = DATATYPE2FMT[dtype]['nbytes'] * count
2097
+ fmt = DATATYPE2FMT[dtype]["format"] * count
2098
+ payload_size = DATATYPE2FMT[dtype]["nbytes"] * count
1976
2099
  except KeyError:
1977
- msg = f'Invalid TIFF tag datatype ({dtype}).'
2100
+ msg = f"Invalid TIFF tag datatype ({dtype})."
1978
2101
  raise BadTiffTagDatatype(msg)
1979
2102
 
1980
2103
  if payload_size <= 4:
@@ -1983,12 +2106,12 @@ class _Ifd(object):
1983
2106
  else:
1984
2107
  # Interpret the payload at the offset specified by the 4 bytes in
1985
2108
  # the tag entry.
1986
- offset, = struct.unpack(self.endian + 'I', offset_buf)
2109
+ (offset,) = struct.unpack(self.endian + "I", offset_buf)
1987
2110
  target_buffer = self.read_buffer[offset:offset + payload_size]
1988
2111
 
1989
2112
  if dtype == 2:
1990
2113
  # ASCII
1991
- payload = target_buffer.decode('utf-8').rstrip('\x00')
2114
+ payload = target_buffer.decode("utf-8").rstrip("\x00")
1992
2115
 
1993
2116
  else:
1994
2117
  payload = struct.unpack(self.endian + fmt, target_buffer)
@@ -1996,7 +2119,10 @@ class _Ifd(object):
1996
2119
  # Rational or Signed Rational. Construct the list of values.
1997
2120
  rational_payload = []
1998
2121
  for j in range(count):
1999
- value = float(payload[j * 2]) / float(payload[j * 2 + 1])
2122
+ try:
2123
+ value = float(payload[j * 2]) / float(payload[j * 2 + 1]) # noqa : E501
2124
+ except ZeroDivisionError:
2125
+ value = np.nan
2000
2126
  rational_payload.append(value)
2001
2127
  payload = np.array(rational_payload)
2002
2128
  if count == 1:
@@ -2004,9 +2130,7 @@ class _Ifd(object):
2004
2130
  # tuple.
2005
2131
  payload = payload[0]
2006
2132
  else:
2007
- payload = np.array(
2008
- payload, dtype=DATATYPE2FMT[dtype]['nptype']
2009
- )
2133
+ payload = np.array(payload, dtype=DATATYPE2FMT[dtype]["nptype"])
2010
2134
 
2011
2135
  return payload
2012
2136
 
@@ -2017,12 +2141,12 @@ class _Ifd(object):
2017
2141
  tag_name = TAGNUM2NAME[tag]
2018
2142
  except KeyError:
2019
2143
  # Ok, we don't recognize this tag. Just use the numeric id.
2020
- msg = f'Unrecognized UUID box TIFF tag ({tag}).'
2144
+ msg = f"Unrecognized UUID box TIFF tag ({tag})."
2021
2145
  warnings.warn(msg, UserWarning)
2022
2146
  tag_name = tag
2023
2147
 
2024
- if tag_name == 'ExifTag':
2025
- # There's an Exif IFD at the offset specified here.
2148
+ if tag_name in ("ExifTag", 'GPSIFD'):
2149
+ # There's an IFD at the offset specified here.
2026
2150
  ifd = _Ifd(self.endian, self.read_buffer, value)
2027
2151
  self.processed_ifd[tag_name] = ifd.processed_ifd
2028
2152
  else:
@@ -2033,20 +2157,20 @@ class _Ifd(object):
2033
2157
  # maps the TIFF enumerated datatype to the corresponding structs datatype code,
2034
2158
  # the data width, and the corresponding numpy datatype
2035
2159
  DATATYPE2FMT = {
2036
- 1: {'format': 'B', 'nbytes': 1, 'nptype': np.ubyte},
2037
- 2: {'format': 'B', 'nbytes': 1, 'nptype': str},
2038
- 3: {'format': 'H', 'nbytes': 2, 'nptype': np.uint16},
2039
- 4: {'format': 'I', 'nbytes': 4, 'nptype': np.uint32},
2040
- 5: {'format': 'II', 'nbytes': 8, 'nptype': np.double},
2041
- 6: {'format': 'b', 'nbytes': 1, 'nptype': np.int8},
2042
- 7: {'format': 'B', 'nbytes': 1, 'nptype': np.uint8},
2043
- 8: {'format': 'h', 'nbytes': 2, 'nptype': np.int16},
2044
- 9: {'format': 'i', 'nbytes': 4, 'nptype': np.int32},
2045
- 10: {'format': 'ii', 'nbytes': 8, 'nptype': np.double},
2046
- 11: {'format': 'f', 'nbytes': 4, 'nptype': np.double},
2047
- 12: {'format': 'd', 'nbytes': 8, 'nptype': np.double},
2048
- 13: {'format': 'I', 'nbytes': 4, 'nptype': np.uint32},
2049
- 16: {'format': 'Q', 'nbytes': 8, 'nptype': np.uint64},
2050
- 17: {'format': 'q', 'nbytes': 8, 'nptype': np.int64},
2051
- 18: {'format': 'Q', 'nbytes': 8, 'nptype': np.uint64}
2160
+ 1: {"format": "B", "nbytes": 1, "nptype": np.ubyte},
2161
+ 2: {"format": "B", "nbytes": 1, "nptype": str},
2162
+ 3: {"format": "H", "nbytes": 2, "nptype": np.uint16},
2163
+ 4: {"format": "I", "nbytes": 4, "nptype": np.uint32},
2164
+ 5: {"format": "II", "nbytes": 8, "nptype": np.double},
2165
+ 6: {"format": "b", "nbytes": 1, "nptype": np.int8},
2166
+ 7: {"format": "B", "nbytes": 1, "nptype": np.uint8},
2167
+ 8: {"format": "h", "nbytes": 2, "nptype": np.int16},
2168
+ 9: {"format": "i", "nbytes": 4, "nptype": np.int32},
2169
+ 10: {"format": "ii", "nbytes": 8, "nptype": np.double},
2170
+ 11: {"format": "f", "nbytes": 4, "nptype": np.double},
2171
+ 12: {"format": "d", "nbytes": 8, "nptype": np.double},
2172
+ 13: {"format": "I", "nbytes": 4, "nptype": np.uint32},
2173
+ 16: {"format": "Q", "nbytes": 8, "nptype": np.uint64},
2174
+ 17: {"format": "q", "nbytes": 8, "nptype": np.int64},
2175
+ 18: {"format": "Q", "nbytes": 8, "nptype": np.uint64},
2052
2176
  }