#FEATURE by exept
authorClaus Gittinger <cg@exept.de>
Tue, 10 Sep 2019 09:38:36 +0200
changeset 4347 84221b29f234
parent 4346 4dcdd8fd94ef
child 4348 6113e0a7959c
#FEATURE by exept class: TIFFReader class added: #hasValidImageHeader: changed: #isValidImageFile:
TIFFReader.st
--- a/TIFFReader.st	Tue Sep 10 09:38:19 2019 +0200
+++ b/TIFFReader.st	Tue Sep 10 09:38:36 2019 +0200
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  COPYRIGHT (c) 1991 by Claus Gittinger
 	      All Rights Reserved
@@ -21,22 +23,21 @@
 		tileByteCounts tileWidth tileLength sampleFormat minSampleValue
 		maxSampleValue subIfds decodeMetaTags loadFullResolutionImage
 		isDNGImage'
-	classVariableNames:'Verbose COMPRESSION_NONE COMPRESSION_CCITTRLE
-		COMPRESSION_CCITTFAX3 COMPRESSION_CCITTFAX4 COMPRESSION_LZW
-		COMPRESSION_OJPEG COMPRESSION_JPEG COMPRESSION_ADOBE_DEFLATE
-		COMPRESSION_JBIG_T85 COMPRESSION_JBIG_T43 COMPRESSION_NEXT
-		COMPRESSION_CCITTRLEW COMPRESSION_PACKBITS
-		COMPRESSION_THUNDERSCAN COMPRESSION_IT8CTPAD COMPRESSION_IT8LW
-		COMPRESSION_IT8MP COMPRESSION_IT8BL COMPRESSION_PIXARFILM
-		COMPRESSION_PIXARLOG COMPRESSION_DEFLATE COMPRESSION_DCS
-		COMPRESSION_JBIG COMPRESSION_JPEG2000 COMPRESSION_NIKON_NEF
-		COMPRESSION_JBIG2 COMPRESSION_NEXT_JPEG SAMPLEFORMAT_UINT
-		SAMPLEFORMAT_INT SAMPLEFORMAT_IEEEFP SAMPLEFORMAT_VOID
-		SAMPLEFORMAT_COMPLEXINT SAMPLEFORMAT_COMPLEXIEEEFP
-		COMPRESSION_SGILOG COMPRESSION_SGILOG24 PLANARCONFIG_CONTIG
-		PLANARCONFIG_SEPARATE FILETYPE_MASK_REDUCEDIMAGE
-		FILETYPE_MASK_PAGE FILETYPE_MASK_MASK FILLORDER_MSB2LSB
-		FILLORDER_LSB2MSB'
+	classVariableNames:'COMPRESSION_ADOBE_DEFLATE COMPRESSION_CCITTFAX3
+		COMPRESSION_CCITTFAX4 COMPRESSION_CCITTRLE COMPRESSION_CCITTRLEW
+		COMPRESSION_DCS COMPRESSION_DEFLATE COMPRESSION_IT8BL
+		COMPRESSION_IT8CTPAD COMPRESSION_IT8LW COMPRESSION_IT8MP
+		COMPRESSION_JBIG COMPRESSION_JBIG2 COMPRESSION_JBIG_T43
+		COMPRESSION_JBIG_T85 COMPRESSION_JPEG COMPRESSION_JPEG2000
+		COMPRESSION_LZW COMPRESSION_NEXT COMPRESSION_NEXT_JPEG
+		COMPRESSION_NIKON_NEF COMPRESSION_NONE COMPRESSION_OJPEG
+		COMPRESSION_PACKBITS COMPRESSION_PIXARFILM COMPRESSION_PIXARLOG
+		COMPRESSION_SGILOG COMPRESSION_SGILOG24 COMPRESSION_THUNDERSCAN
+		FILETYPE_MASK_MASK FILETYPE_MASK_PAGE FILETYPE_MASK_REDUCEDIMAGE
+		FILLORDER_LSB2MSB FILLORDER_MSB2LSB PLANARCONFIG_CONTIG
+		PLANARCONFIG_SEPARATE SAMPLEFORMAT_COMPLEXIEEEFP
+		SAMPLEFORMAT_COMPLEXINT SAMPLEFORMAT_IEEEFP SAMPLEFORMAT_INT
+		SAMPLEFORMAT_UINT SAMPLEFORMAT_VOID Verbose'
 	poolDictionaries:''
 	category:'Graphics-Images-Readers'
 !
@@ -714,18 +715,16 @@
     ^ true
 !
 
-isValidImageFile:aFileName
-    "return true, if aFileName contains a TIFF image"
-
-    |inStream bytes1_2 byte3 byte4 versionLow versionHi|
-
-    inStream := self streamReadingFile:aFileName.
-    inStream isNil ifTrue:[^ false].
-
-    bytes1_2 := inStream next:2.
-    byte3 := inStream nextByte.
-    byte4 := inStream nextByte.
-    inStream close.
+hasValidImageHeader:someHeaderBytes
+    "return true, if someHeaderBytes 
+     (which does not need to be the whole data, but large enough
+      to detect the header) contains a valid TIFF image header"
+
+    |bytes1_2 byte3 byte4 versionLow versionHi|
+
+    bytes1_2 := (someHeaderBytes copyFrom:1 to:2) asString.
+    byte3 := someHeaderBytes at:3.
+    byte4 := someHeaderBytes at:4.
     
     ((bytes1_2 = 'II' "tiff") or:[bytes1_2 = 'PE' "mdi"]) ifTrue:[
         "/ intel byte order (lsb)
@@ -745,6 +744,22 @@
     ^ false.
 
     "Modified: / 26-08-2017 / 15:31:08 / cg"
+!
+
+isValidImageFile:aFileName
+    "return true, if aFileName contains a TIFF image"
+
+    |inStream bytes1To4|
+
+    inStream := self streamReadingFile:aFileName.
+    inStream isNil ifTrue:[^ false].
+
+    bytes1To4 := inStream nextBytes:4.
+    inStream close.
+
+    ^ self hasValidImageHeader:bytes1To4    
+
+    "Modified: / 26-08-2017 / 15:31:08 / cg"
 ! !
 
 !TIFFReader methodsFor:'accessing'!