#FEATURE by exept
authorClaus Gittinger <cg@exept.de>
Fri, 17 Jan 2020 20:34:56 +0100
changeset 4426 b99d80e74d2a
parent 4425 61632e2b1593
child 4427 a34f68d418e4
#FEATURE by exept class: TIFFReader changed: #decodeTiffTag:numberType:length: class: TIFFReader class comment/format in: #documentation
TIFFReader.st
--- a/TIFFReader.st	Fri Jan 17 19:51:55 2020 +0100
+++ b/TIFFReader.st	Fri Jan 17 20:34:56 2020 +0100
@@ -109,6 +109,7 @@
         ST80FormReader SunRasterReader TargaReader WindowsIconReader 
         XBMReader XPMReader XWDReader
         https://exiftool.org/TagNames/EXIF.html
+        http://www.loc.gov/preservation/digital/formats/content/tiff_tags.shtml
 "
 ! !
 
@@ -2436,7 +2437,7 @@
             "thresholding := value."
 
             "/ 'thresholding ' print. value printNewline.
-
+            metaData at:#Thresholding put:value.
             ^ self
         ].
         (tagType == 264 "0x108") ifTrue:[
@@ -2571,7 +2572,8 @@
         ].
         (tagType == 282) ifTrue:[
             "/ xResolution
-            metaData at:#ResolutionX put:value.
+            metaData at:#ResolutionX put:value.  "/ for backward compat.
+            metaData at:#XResolution put:value.  "/ for standard conformity
             Verbose == true ifTrue:[ 
                 Logger info:'      xResolution: %1 (%2)' with:value with:value asFloat 
             ].
@@ -2579,7 +2581,8 @@
         ].
         (tagType == 283) ifTrue:[
             "/ yResolution
-            metaData at:#ResolutionY put:value.
+            metaData at:#ResolutionY put:value.  "/ for backward compat.
+            metaData at:#YResolution put:value.  "/ for standard conformity
             Verbose == true ifTrue:[ 
                 Logger info:'      yResolution: %1 (%2)' with:value with:value asFloat 
             ].
@@ -2607,7 +2610,8 @@
         ].
         (tagType == 286) ifTrue:[
             "/ xPosition
-            metaData at:#PositionX put:value.
+            metaData at:#PositionX put:value.  "/ for backward compat.
+            metaData at:#XPosition put:value.  "/ for standard conformity
             Verbose == true ifTrue:[ 
                 Logger info:'      xPosition: %1' with:value 
             ].
@@ -2615,7 +2619,8 @@
         ].
         (tagType == 287) ifTrue:[
             "/ yPosition
-            metaData at:#PositionY put:value.
+            metaData at:#PositionY put:value.  "/ for backward compat. 
+            metaData at:#YPosition put:value.  "/ for standard conformity
             Verbose == true ifTrue:[ 
                 Logger info:'      yPosition: %1' with:value 
             ].
@@ -2879,15 +2884,18 @@
             ^ self
         ].
         (tagType == 332) ifTrue:[
+            "/ InkSet (used with Photometric=5)
             "/ 'ink set' print. value printNewline.
             ^ self
         ].
         (tagType == 333) ifTrue:[
+            "/ InkNames (used with Photometric=5)
             "/ 'ink names' print. value printNewline.
             metaData at:#IncNames put:value.
             ^ self
         ].
         (tagType == 334) ifTrue:[
+            "/ NumberOfInks (used with Photometric=5)
             "/ 'numinks' print. value printNewline.
             ^ self
         ].
@@ -2964,31 +2972,31 @@
 
     (tagType between:400 and:499) ifTrue:[
         (tagType == 400) ifTrue:[
-            "/ 'GlobalParametersIFD' print. value printNewline.
+            "/ 'GlobalParametersIFD (TIFF-FX)' print. value printNewline.
             ^ self
         ].
         (tagType == 401) ifTrue:[
-            "/ 'ProfileType' print. value printNewline.
+            "/ 'ProfileType (TIFF-FX)' print. value printNewline.
             ^ self
         ].
         (tagType == 402) ifTrue:[
-            "/ 'FaxProfile' print. value printNewline.
+            "/ 'FaxProfile (TIFF-FX)' print. value printNewline.
             ^ self
         ].
         (tagType == 403) ifTrue:[
-            "/ 'CodingMethods' print. value printNewline.
+            "/ 'CodingMethods (TIFF-FX)' print. value printNewline.
             ^ self
         ].
         (tagType == 404) ifTrue:[
-            "/ 'VersionYear' print. value printNewline.
+            "/ 'VersionYear (TIFF-FX)' print. value printNewline.
             ^ self
         ].
         (tagType == 405) ifTrue:[
-            "/ 'ModeNumber' print. value printNewline.
+            "/ 'ModeNumber (TIFF-FX)' print. value printNewline.
             ^ self
         ].
         (tagType == 433) ifTrue:[
-            "/ 'Decode' print. value printNewline.
+            "/ 'Decode' print (TIFF-FX). value printNewline.
             ^ self
         ].
         (tagType == 434) ifTrue:[
@@ -3131,7 +3139,7 @@
         ].
     ].
 
-    (tagType between:32000 and:32999) ifTrue:[
+    (tagType between:32000 "0x7D00" and:32999 "0x80E7") ifTrue:[
         (tagType == 32781 "0x800D") ifTrue:[
             "/'imageid' print. value printNewline.
             ^ self
@@ -3189,7 +3197,7 @@
         ].
     ].
     
-    (tagType between:33000 and:33999) ifTrue:[
+    (tagType between:33000 "16r80E8" and:33999 "16r84CF") ifTrue:[
         "/ Private Pixar tags
         (tagType == 33300) ifTrue:[
             "/ 'image full width' print. value printNewline.
@@ -3228,12 +3236,51 @@
             "/ KodakIFD
             ^ self
         ].
-        (tagType == 33432) ifTrue:[
+        (tagType == 33432 "16r8298") ifTrue:[
             "/ 'copyright' print. value printNewline.
+            metaData at:#Copyright put:value asString.
             ^ self
         ].
         (tagType == 33434 "0x829A") ifTrue:[
             "/ 'exposuretime' print. value printNewline.
+            metaData at:#ExposureTime put:value.
+            ^ self
+        ].
+        (tagType == 33437 "0x829D") ifTrue:[
+            "/ 'FNumber' print. value printNewline.
+            metaData at:#FNumber put:value.
+            ^ self
+        ].
+        (tagType == 33445 "0x82A5") ifTrue:[
+            "/ 'molecular dynamics GEL file tag' print. value printNewline.
+            ^ self
+        ].
+        (tagType == 33446 "0x82A6") ifTrue:[
+            "/ 'molecular dynamics GEL scalePixel' print. value printNewline.
+            ^ self
+        ].
+        (tagType == 33447 "0x82A7") ifTrue:[
+            "/ 'molecular dynamics GEL colorTable' print. value printNewline.
+            ^ self
+        ].
+        (tagType == 33448 "0x82A8") ifTrue:[
+            "/ 'molecular dynamics GEL labName' print. value printNewline.
+            ^ self
+        ].
+        (tagType == 33449 "0x82A9") ifTrue:[
+            "/ 'molecular dynamics GEL sampleInfo' print. value printNewline.
+            ^ self
+        ].
+        (tagType == 33450 "0x82AA") ifTrue:[
+            "/ 'molecular dynamics GEL prepDate' print. value printNewline.
+            ^ self
+        ].
+        (tagType == 33451 "0x82AB") ifTrue:[
+            "/ 'molecular dynamics GEL prepTime' print. value printNewline.
+            ^ self
+        ].
+        (tagType == 33452 "0x82AC") ifTrue:[
+            "/ 'molecular dynamics GEL fileUnits' print. value printNewline.
             ^ self
         ].
 
@@ -3247,11 +3294,18 @@
             ^ self
         ].
 
-
-        (tagType == 33920) ifTrue:[
-            "/ 'geotiff IntergraphMatrixTag' print. value printNewline.
-            ^ self
-        ].
+        "/ (tagType == 33918) ifTrue:[
+        "/     "/ 'intergraph packet data tag' print. value printNewline.
+        "/     ^ self
+        "/ ].
+        "/ (tagType == 33918) ifTrue:[
+        "/     "/ 'intergraph flag' print. value printNewline.
+        "/     ^ self
+        "/ ].
+        "/ (tagType == 33920) ifTrue:[
+        "/     "/ 'geotiff IntergraphMatrixTag' print. value printNewline.
+        "/     ^ self
+        "/ ].
         (tagType == 33922) ifTrue:[
             "/ 'geotiff ModelTiepointTag' print. value printNewline.
             ^ self
@@ -3390,37 +3444,69 @@
             ^ self
         ].
 
+        (tagType == 34850) ifTrue:[
+            "/ 'ExposureProgram' print. value printNewline.
+            ^ self
+        ].
+        (tagType == 34852) ifTrue:[
+            "/ 'SpectralSensitivity' print. value printNewline.
+            ^ self
+        ].
+        (tagType == 34853) ifTrue:[
+            "/ 'GPS Info' print. value printNewline.
+            ^ self
+        ].
+        (tagType == 34855) ifTrue:[
+            "/ 'ISOSPeedRatings (ISO12232)' print. value printNewline.
+            ^ self
+        ].
         
+        (tagType == 34858) ifTrue:[
+            "/ 'TimeZoneOffset' print. value printNewline.
+            ^ self
+        ].
         (tagType == 34859) ifTrue:[
-            "/ '???' print. value printNewline.
+            "/ 'SelfTimeMode' print. value printNewline.
             "/ Verbose == true ifTrue:[ 
             "/     Logger info:'      ?: %1' with:value 
             "/ ].
             ^ self
         ].
+        (tagType == 34864) ifTrue:[
+            "/ 'SensitivityType' print. value printNewline.
+            ^ self
+        ].
+        (tagType == 34867) ifTrue:[
+            "/ 'ISOSpeed' print. value printNewline.
+            ^ self
+        ].
         
         "/ More Private SGI
         (tagType == 34908) ifTrue:[
-            "/ 'fax recv params' print. value printNewline.
+            "/ 'HylaFAX fax recv params' print. value printNewline.
             ^ self
         ].
         (tagType == 34909) ifTrue:[
-            "/ 'fax subaddress' print. value printNewline.
+            "/ 'HylaFAX fax subaddress' print. value printNewline.
             ^ self
         ].
         (tagType == 34910) ifTrue:[
-            "/ 'fax recv time' print. value printNewline.
+            "/ 'HylaFAX fax recv time' print. value printNewline.
             ^ self
         ].
     ].
 
     (tagType between:36000 and:36999) ifTrue:[
+        (tagType == 36864 "0x9000") ifTrue:[
+            "/ 'ExifVersion' print. value printNewline.
+            ^ self
+        ].
         (tagType == 36867 "0x9003") ifTrue:[
             "/ 'dateTimeOriginal' print. value printNewline.
             ^ self
         ].
         (tagType == 36868 "0x9004") ifTrue:[
-            "/ 'createDate' print. value printNewline.
+            "/ 'dateTimeDigitized / createDate' print. value printNewline.
             ^ self
         ].
     ].
@@ -3438,6 +3524,30 @@
             "/ 'BrightnessValue' print. value printNewline.
             ^ self
         ].
+        (tagType == 37382 "0x9206") ifTrue:[
+            "/ 'SubjectDistance' print. value printNewline.
+            ^ self
+        ].
+        (tagType == 37383 "0x9207") ifTrue:[
+            "/ 'MeteringMode' print. value printNewline.
+            ^ self
+        ].
+        (tagType == 37384 "0x9208") ifTrue:[
+            "/ 'LightSource' print. value printNewline.
+            ^ self
+        ].
+        (tagType == 37385 "0x9209") ifTrue:[
+            "/ 'Flash' print. value printNewline.
+            ^ self
+        ].
+        (tagType == 37386 "0x920a") ifTrue:[
+            "/ 'FocalLength' print. value printNewline.
+            ^ self
+        ].
+        (tagType == 37387 "0x920b") ifTrue:[
+            "/ 'FlashEnergy' print. value printNewline.
+            ^ self
+        ].
         (tagType == 37390 "0x920e") ifTrue:[
             "/ 'FocalPlaneXResolution' print. value printNewline.
             ^ self
@@ -3450,17 +3560,65 @@
             "/ 'FocalPlaneResolutionUnit' print. value printNewline.
             ^ self
         ].
+        (tagType == 37393 "0x9211") ifTrue:[
+            "/ 'ImageNumber' print. value printNewline.
+            ^ self
+        ].
+        (tagType == 37394 "0x9212") ifTrue:[
+            "/ 'SecurityClassification' print. value printNewline.
+            ^ self
+        ].
         (tagType == 37398 "0x9216") ifTrue:[
             "/ 'TIFF-EPStandardID' print. value printNewline.
             ^ self
         ].
-        (tagType == 37500) ifTrue:[
+        (tagType == 37500 "0x927C") ifTrue:[
             "/ 'makerNote' print. value printNewline.
             ^ self
         ].
+        (tagType == 37510 "0x9286") ifTrue:[
+            "/ 'UserComment' print. value printNewline.
+            ^ self
+        ].
     ].
 
     (tagType between:42000 and:42999) ifTrue:[
+        (tagType == 42032) ifTrue:[
+            "/ 'CameraOwnerName' print. value printNewline.
+            Verbose == true ifTrue:[ 
+                Logger info:'      CameraOwnerName: %1' with:value
+            ].
+            ^ self
+        ].
+        (tagType == 42033) ifTrue:[
+            "/ 'BodySerialNumber' print. value printNewline.
+            Verbose == true ifTrue:[ 
+                Logger info:'      BodySerialNumber: %1' with:value
+            ].
+            ^ self
+        ].
+        (tagType == 42034) ifTrue:[
+            "/ 'LensSpecification' print. value printNewline.
+            "/ Verbose == true ifTrue:[ 
+            "/     Logger info:'      LensSpecification: %1' with:value
+            "/ ].
+            ^ self
+        ].
+        (tagType == 42035) ifTrue:[
+            "/ 'LensMake' print. value printNewline.
+            ^ self
+        ].
+        (tagType == 42036) ifTrue:[
+            "/ 'LensModel' print. value printNewline.
+            ^ self
+        ].
+        (tagType == 42037) ifTrue:[
+            "/ 'LensSerialNumber' print. value printNewline.
+            Verbose == true ifTrue:[ 
+                Logger info:'      LensSerialNumber: %1' with:value
+            ].
+            ^ self
+        ].
         (tagType == 42112) ifTrue:[
             "/ 'GDAL_METADATA' print. value printNewline.
             Verbose == true ifTrue:[ 
@@ -3472,6 +3630,18 @@
 
     "/ dng tags (see http://wwwimages.adobe.com/content/dam/Adobe/en/products/photoshop/pdfs/dng_spec_1.4.0.0.pdf)
     (tagType between:50000 and:50999) ifTrue:[
+        (tagType == 50215) ifTrue:[
+            "/ OCE Scanjob Descr.
+            ^ self
+        ].
+        (tagType == 50216) ifTrue:[
+            "/ OCE Appl Selector
+            ^ self
+        ].
+        (tagType == 50217) ifTrue:[
+            "/ OCE Identification Number
+            ^ self
+        ].
         (tagType == 50706) ifTrue:[
             "/ DNGVersion
             Verbose == true ifTrue:[