- 2013.06.13 16:07 "Re: [Tiff] TIFF Specification Allowance for Multi-Page vs. Reduced Res 2nd IFD", by Scott Ribe
- 2013.06.13 17:57 "Re: [Tiff] TIFF Specification Allowance for Multi-Page vs. Reduced Res 2nd IFD", by Joris Van Damme
- 2013.06.13 19:27 "Re: [Tiff] TIFF Specification Allowance for Multi-Page vs. Reduced Res 2nd IFD", by Chris Cox
2013.06.14 21:06 "Re: [Tiff] TIFF Specification Allowance for Multi-Page vs. Reduced Res 2nd IFD", by Joris Van Damme
Guys,
2013/6/14 Frank Warmerdam <warmerdam@pobox.com>:
I have run tiffinfo on the file and amoung the tags I see:
SubIFD Offsets: 79455156
So this seems to be a subifd pyramid level. It strickes me as slightly odd that there is only one overview level and it is just a 2x2 downsamplingbut it is a pyramid level.
I'm seeing something different, still. I'll try and copy/paste, hope you're viewing this as a HTML mail.
In the main top-level linked list, I'm seeing a single IFD...
*Tag**Datatype**Count**Value*NewSubfileType<http://www.awaresystems.be/imaging/tiff/tifftags/newsubfiletype.html> Long10ImageWidth<http://www.awaresystems.be/imaging/tiff/tifftags/imagewidth.html> Short17760ImageLength<http://www.awaresystems.be/imaging/tiff/tifftags/imagelength.html> Short110328BitsPerSample<http://www.awaresystems.be/imaging/tiff/tifftags/bitspersample.html>
Short38, 8, 8Compression<http://www.awaresystems.be/imaging/tiff/tifftags/compression.html> Short1LZWPhotometricInterpretation<http://www.awaresystems.be/imaging/tiff/tifftags/photometricinterpretation.html>
Short1RGBMake <http://www.awaresystems.be/imaging/tiff/tifftags/make.html> Ascii10"Phase One "Model<http://www.awaresystems.be/imaging/tiff/tifftags/model.html>
Ascii6"IQ180 "StripOffsets<http://www.awaresystems.be/imaging/tiff/tifftags/stripoffsets.html> Long93932382, 103176, 170464, 237880, 304740, 373346, 441212, 510264, 578644, 648884, 716534, 785266,...Orientation<http://www.awaresystems.be/imaging/tiff/tifftags/orientation.html> Short1TopLeftSamplesPerPixel<http://www.awaresystems.be/imaging/tiff/tifftags/samplesperpixel.html> Short13RowsPerStrip<http://www.awaresystems.be/imaging/tiff/tifftags/rowsperstrip.html>
Short111StripByteCounts<http://www.awaresystems.be/imaging/tiff/tifftags/stripbytecounts.html> Long93970794, 67287, 67416, 66859, 68605, 67866, 69051, 68379, 70240, 67650, 68731, 70254, 71849, 72085,...XResolution<http://www.awaresystems.be/imaging/tiff/tifftags/xresolution.html> Rational1300YResolution<http://www.awaresystems.be/imaging/tiff/tifftags/yresolution.html> Rational1300PlanarConfiguration<http://www.awaresystems.be/imaging/tiff/tifftags/planarconfiguration.html> Short1ChunkyResolutionUnit<http://www.awaresystems.be/imaging/tiff/tifftags/resolutionunit.html> Short1InchSoftware<http://www.awaresystems.be/imaging/tiff/tifftags/software.html> Ascii32"Adobe Photoshop CS6 (Macintosh) "DateTime<http://www.awaresystems.be/imaging/tiff/tifftags/datetime.html> Ascii20"2013:06:14 12:14:08 "Predictor<http://www.awaresystems.be/imaging/tiff/tifftags/predictor.html> Short1HorizontalSubIFDs<http://www.awaresystems.be/imaging/tiff/tifftags/subifds.html> Ifd179455156XMP <http://www.awaresystems.be/imaging/tiff/tifftags/xmp.html> Byte1482460, 63, 120, 112, 97, 99, 107, 101, 116, 32, 98, 101, 103, 105, 110, 61, 34, 239, 187, 191, 34,...IPTC<http://www.awaresystems.be/imaging/tiff/tifftags/iptc.html>
Undefined5228, 1, 90, 0, 3, 27, 37, 71, 28, 1, 90, 0, 3, 27, 37, 71, 28, 2, 0, 0, 2, 0, 0, 28, 2, 55, 0, 8,...Photoshop<http://www.awaresystems.be/imaging/tiff/tifftags/photoshop.html> Byte959056, 66, 73, 77, 4, 37, 0, 0, 0, 0, 0, 16, 107, 34, 115, 23, 175, 254, 94, 215, 117, 68, 124, 23,...EXIF<http://www.awaresystems.be/imaging/tiff/tifftags/exififd.html>
Long179454916
So there's a single SubIFD and an EXIF IFD that are directly linked from this main IFD. However, the SubIFD links to a subsequent IFD in its 'next
IFD' final member of the IFD structure, and that one again links to a subsequent IFD in its 'next IFD' final member of the IFD structure. Giving a total of three SubIFDs. Here they are...
SubIFD 0
*Tag**Datatype**Count**Value*NewSubfileType<http://www.awaresystems.be/imaging/tiff/tifftags/newsubfiletype.html> Long1Reduced-resolution imageImageWidth<http://www.awaresystems.be/imaging/tiff/tifftags/imagewidth.html> Short13880ImageLength<http://www.awaresystems.be/imaging/tiff/tifftags/imagelength.html> Short15164BitsPerSample<http://www.awaresystems.be/imaging/tiff/tifftags/bitspersample.html>
Short38, 8, 8Compression<http://www.awaresystems.be/imaging/tiff/tifftags/compression.html> Short1LZWPhotometricInterpretation<http://www.awaresystems.be/imaging/tiff/tifftags/photometricinterpretation.html>
Short1RGBStripOffsets<http://www.awaresystems.be/imaging/tiff/tifftags/stripoffsets.html> Long23579457256, 79523160, 79589880, 79657116, 79727436, 79798936, 79870986, 79944214, 80017288,...Orientation<http://www.awaresystems.be/imaging/tiff/tifftags/orientation.html> Short1TopLeftSamplesPerPixel<http://www.awaresystems.be/imaging/tiff/tifftags/samplesperpixel.html> Short13RowsPerStrip<http://www.awaresystems.be/imaging/tiff/tifftags/rowsperstrip.html>
Short122StripByteCounts<http://www.awaresystems.be/imaging/tiff/tifftags/stripbytecounts.html> Long23565903, 66720, 67236, 70319, 71499, 72050, 73227, 73074, 73669, 76812, 78220, 77316, 78127, 80200,...XResolution<http://www.awaresystems.be/imaging/tiff/tifftags/xresolution.html> Rational1150YResolution<http://www.awaresystems.be/imaging/tiff/tifftags/yresolution.html> Rational1150PlanarConfiguration<http://www.awaresystems.be/imaging/tiff/tifftags/planarconfiguration.html> Short1ChunkyResolutionUnit<http://www.awaresystems.be/imaging/tiff/tifftags/resolutionunit.html> Short1InchPredictor<http://www.awaresystems.be/imaging/tiff/tifftags/predictor.html>
Short1Horizontal
SubIFD 1
*Tag**Datatype**Count**Value*NewSubfileType<http://www.awaresystems.be/imaging/tiff/tifftags/newsubfiletype.html> Long1Reduced-resolution imageImageWidth<http://www.awaresystems.be/imaging/tiff/tifftags/imagewidth.html> Short11940ImageLength<http://www.awaresystems.be/imaging/tiff/tifftags/imagelength.html> Short12582BitsPerSample<http://www.awaresystems.be/imaging/tiff/tifftags/bitspersample.html>
Short38, 8, 8Compression<http://www.awaresystems.be/imaging/tiff/tifftags/compression.html> Short1LZWPhotometricInterpretation<http://www.awaresystems.be/imaging/tiff/tifftags/photometricinterpretation.html>
Short1RGBStripOffsets<http://www.awaresystems.be/imaging/tiff/tifftags/stripoffsets.html> Long58100332806, 100401128, 100472304, 100548608, 100628796, 100707204, 100782604, 100852756,...Orientation<http://www.awaresystems.be/imaging/tiff/tifftags/orientation.html> Short1TopLeftSamplesPerPixel<http://www.awaresystems.be/imaging/tiff/tifftags/samplesperpixel.html> Short13RowsPerStrip<http://www.awaresystems.be/imaging/tiff/tifftags/rowsperstrip.html>
Short145StripByteCounts<http://www.awaresystems.be/imaging/tiff/tifftags/stripbytecounts.html> Long5868322, 71175, 76304, 80188, 78407, 75400, 70152, 70075, 81075, 89267, 90603, 79357, 78536, 77992,...XResolution<http://www.awaresystems.be/imaging/tiff/tifftags/xresolution.html> Rational175YResolution<http://www.awaresystems.be/imaging/tiff/tifftags/yresolution.html> Rational175PlanarConfiguration<http://www.awaresystems.be/imaging/tiff/tifftags/planarconfiguration.html> Short1ChunkyResolutionUnit<http://www.awaresystems.be/imaging/tiff/tifftags/resolutionunit.html> Short1InchPredictor<http://www.awaresystems.be/imaging/tiff/tifftags/predictor.html>
Short1Horizontal
SubIFD 2
*Tag**Datatype**Count**Value*NewSubfileType<http://www.awaresystems.be/imaging/tiff/tifftags/newsubfiletype.html> Long1Reduced-resolution imageImageWidth<http://www.awaresystems.be/imaging/tiff/tifftags/imagewidth.html> Short1970ImageLength<http://www.awaresystems.be/imaging/tiff/tifftags/imagelength.html> Short11291BitsPerSample<http://www.awaresystems.be/imaging/tiff/tifftags/bitspersample.html>
Short38, 8, 8Compression<http://www.awaresystems.be/imaging/tiff/tifftags/compression.html> Short1LZWPhotometricInterpretation<http://www.awaresystems.be/imaging/tiff/tifftags/photometricinterpretation.html>
Short1RGBStripOffsets<http://www.awaresystems.be/imaging/tiff/tifftags/stripoffsets.html> Long15105692834, 105765240, 105837202, 105922548, 106000364, 106091912, 106209670, 106319770,...Orientation<http://www.awaresystems.be/imaging/tiff/tifftags/orientation.html> Short1TopLeftSamplesPerPixel<http://www.awaresystems.be/imaging/tiff/tifftags/samplesperpixel.html> Short13RowsPerStrip<http://www.awaresystems.be/imaging/tiff/tifftags/rowsperstrip.html>
Short190StripByteCounts<http://www.awaresystems.be/imaging/tiff/tifftags/stripbytecounts.html> Long1572406, 71961, 85345, 77815, 91547, 117757, 110099, 110182, 116882, 111710, 108627, 84815, 89589,...XResolution<http://www.awaresystems.be/imaging/tiff/tifftags/xresolution.html> Rational137.5YResolution<http://www.awaresystems.be/imaging/tiff/tifftags/yresolution.html>
Rational137.5PlanarConfiguration<http://www.awaresystems.be/imaging/tiff/tifftags/planarconfiguration.html> Short1ChunkyResolutionUnit<http://www.awaresystems.be/imaging/tiff/tifftags/resolutionunit.html> Short1InchPredictor<http://www.awaresystems.be/imaging/tiff/tifftags/predictor.html>
Short1Horizontal
Finally, for what it's worth, here's the EXIF IFD tag list.
*Tag**Datatype**Count**Value*Tag 306Ascii20"2013:06:11 18:10:55 " ExposureTime<http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/exposuretime.html> Rational10.1249999999ISOSpeedRatings<http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/isospeedratings.html> Short135ExifVersion<http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/exifversion.html> Undefined448, 50, 50, 48DateTimeOriginal<http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/datetimeoriginal.html> Ascii20"2013:06:11 18:10:55 "DateTimeDigitized<http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/datetimedigitized.html> Ascii20"2013:06:11 18:10:55 "ShutterSpeedValue<http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/shutterspeedvalue.html> SRational13Tag 37384Short1255ColorSpace<http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/colorspace.html> Short1UncalibratedPixelXDimension<http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/pixelxdimension.html> Long17760PixelYDimension<http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif/pixelydimension.html> Long110328Tag 41728Undefined13Tag 41729Undefined11
I observe that my GDAL library does *not* honour this sort of overview via SubIFD which is sad.
It is, in my humble opinion. I regret that I was incomplete in my comments on SubFileType and NewSubFileType schemes a couple of mails ago, since I failed to communicate half of the reasons those are real bad. So I'd like to give it another go...
SubFileType and NewSubFileType...
- are ancient
- are badly supported by many readers, at least in my experience
- require an illogical overhead, in the sense that readers need to scan past the IFD they're interested in, in the off chance that a subsequent IFDmight still be related to the
- IFD they're interested in
- make things more complicated when implementing stuff like page reordering, page deleting, etc...
- actually require support from readers. Meaning, if a reader does not support it, it sees multiple pages where there is just one, so it's incorrectly interpreting things.
- The SubIFDs scheme solves all these problems...
- it is more recent
- it is surprisingly well supported by many readers, at least in my experience. Even Windows Explorer, that I've always considered pretty brain-dead when it comes to TIFF, actually does properly use thumbnails encoded as SubIFDs, at least in Windows 7.
- it does not require an illogical overhead. Reading any particular IFD, the reader immediately knows if there's any alternative versions of the image available, and it can scan that child list if needed or completely ignore it otherwise. There is no need for scanning ahead just in case
- it's pretty easy and straightforward to support in operations like page reordering, page deleting, etc...
- it does not actually require support from readers. If a reader does not support the SubIFDs scheme, that's too bad, it's missing out on an opportunity to maybe speed things up if a thumbnail is needed, etc. But it does not actually misinterpret anything, there is no danger of a thumbnail being incorrectly regarded as an independent page.
Best regards,
Joris Van Damme
AWare Systems