Changes in TIFF v3.6.0¶
Current Version |
v3.6.0 (tag Release-v3-6-0) |
Previous Version |
|
Master Download Site |
|
Master HTTP Site |
This document describes the changes made to the software between the previous and current versions (see above). If you don't find something listed here, then it was not done in this timeframe, or it was not considered important enough to be mentioned. The following information is located here:
Major changes¶
New utility raw2tiff for converting raw rasters into TIFF files.
Lots of new tiff2ps options.
Lots of new fax2tiff options.
Lots of bug fixes for LZW, JPEG and OJPEG compression.
Custom Tag Support¶
The approach to extending libtiff with custom tags has changed radically.
Previously, all internally supported TIFF tags had a place in the
private TIFFDirectory
structure within libtiff to hold the values (if read),
and a "field number" (ie. FIELD_SUBFILETYPE
) used to identify that tag.
However, every time a new tag was added to the core, the size of the
TIFFDirectory
structure would change, breaking any dynamically linked
software that used the private data structures.
Also, any tag not recognised by libtiff would not be read and accessible to applications without some fairly complicated work on the applications part to pre-register the tags as exemplified by the support for "Geo"TIFF tags by libgeotiff layered on libtiff.
Among other things this approach required the extension code to access the private libtiff structures ... which made the higher level non-libtiff code be locked into a specific version of libtiff at compile time. This caused no end of bug reports!
The new approach is for libtiff to read all tags from TIFF files. Those that
aren't recognised as "core tags" (those having an associated FIELD_
value,
and place for storage in the TIFFDirectory
structure) are now read into a
dynamic list of extra tags (td_customValues
in TIFFDirectory
). When a new
tag code is encountered for the first time in a given TIFF file, a new
anonymous tag definition is created for the tag in the tag definition list.
The type, and some other metadata is worked out from the instance encountered.
These fields are known as "custom tags".
Custom tags can be set and fetched normally using TIFFSetField()
and
TIFFGetField()
, and appear pretty much like normal tags to application code.
However, they have no impact on internal libtiff processing (such as
compression). Some utilities, such as tiffcp will now copy these custom
tags to the new output files.
As well as the internal work with custom tags, new C API entry points were added so that extension libraries, such as libgeotiff, could define new tags more easily without accessing internal data structures. Because tag handling of extension tags is done via the "custom fields" mechanism as well, the definition provided externally mostly serves to provide a meaningful name for the tag.
The addition of "custom tags" and the altered approach to extending libtiff with externally defined tags is the primary reason for the shift to the 3.6.x version number from 3.5.x.
Software configuration changes¶
configure
,config.site
: Fix for large files (>2GiB) support. New option in the config.site:LARGEFILE="yes"
. Should be enough for the large files I/O.configure
: Set-DPIXARLOG_SUPPORT
option along with-DZIP_SUPPORT
.html/Makefile.in
: Updated to use groffhtml for generating html pages from man pages.configure
,libtiff/Makefile.in
: Added SCO OpenServer 5.0.6 support from John H. DuBois III.libtiff/Makefile.vc
,libtiff/libtiff.def
: Missed declarations added.libtiff/Makefile.in
,tools/Makefile.in
: Shared library will not be stripped when installing, utility binaries will do be stripped. As per bug Remote Sensing bugzilla #93 [no longer available].man/Makefile.in
: PatchDESTDIR
handling as per bug Remote Sensing bugzilla #95 [no longer available].configure
: OpenBSD changes for Sparc64 and DSO version as per bug Remote Sensing bugzilla #96 [no longer available].config.site/configure
: added support forOJPEG=yes
option to enable OJPEG support fromconfig.site
.config.gues
,config.sub
: Updated from ftp.gnu.org/pub/config.configure
: ModifyCheckForBigEndian
so it can work in a cross compiled situation.configure
,libtiff/Makefile.in
: Changes for building on MacOS 10.1 as per bug Remote Sensing bugzilla #94 [no longer available].html/Makefile.in
: added missing images per bug Remote Sensing bugzilla #92 [no longer available].port/Makefile.in
: fixed clean target per bug Remote Sensing bugzilla #92 [no longer available].
Library changes¶
libtiff/tif_getimage.c
: New functionTIFFReadRGBAImageOriented()
implemented to retrieve raster array with user-specified origin position.libtiff/tif_fax3.c
: Fix wrong line numbering.libtiff/tif_dirread.c
: Check field counter against number of fields.Store a list of opened IFD to prevent directory looping.
libtiff/tif_jpeg.c
: modified segment_height calculation to always be a full height tile for tiled images. Also changed error to just be a warning.libtiff/tif_lzw.c
: fixed so that decoder state isn't allocated tillLZWSetupDecode()
. Needed to read LZW files in "r+
" mode.libtiff/tif_dir.c
: fixed up thetif_postdecode
settings responsible for byte swapping complex image data.libtiff/tif_open.c
: Removed error if opening a compressed file in update mode bug (Remote Sensing bugzilla #198 [no longer available]).libtiff/tif_write.c
:TIFFWriteCheck()
now fails if the image is a pre-existing compressed image. That is, image writing to pre-existing compressed images is not allowed.html/man/*.html
: Web pages regenerated from man pages.libtiff/tif_jpeg.c
: Hack to ensure that "boolean" is defined properly on Windows so as to avoid the structure size mismatch error from libjpeg (bug Remote Sensing bugzilla #188 [no longer available]).libtiff/tiff.h
:#ifdef USING_VISUALAGE
around previous Visual Age AIX porting hack as it screwed up gcc. (bug Remote Sensing bugzilla #39 [no longer available])libtiff/tiff.h
: addedCOMPRESSION_JP2000
(34712) for LEAD tools custom compression.libtiff/tif_dirread.c
: Another fix for the fetchingSBYTE
arrays by theTIFFFetchByteArray()
function. (bug Remote Sensing bugzilla #52 [no longer available])libtiff/tif_dirread.c
: Expandv[2]
tov[4]
inTIFFFetchShortPair()
as per bug Remote Sensing bugzilla #196 [no longer available].libtiff/tif_lzw.c
: Additional consistency checking added inLZWDecode()
andLZWDecodeCompat()
fixing bugs Remote Sensing bugzilla #190 [no longer available] and Remote Sensing bugzilla #100 [no longer available].libtiff/tif_lzw.c
: Added check for valid code lengths inLZWDecode()
andLZWDecodeCompat()
. Fixes bug Remote Sensing bugzilla #115 [no longer available].tif_getimage.c
: Ensure thatTIFFRGBAImageBegin()
returns the return code from the underlying pick function as per bug Remote Sensing bugzilla #177 [no longer available].libtiff/tif_jpeg.c
,libtiff/tif_strip.c
,libtiff/tif_print.c
: Hackedtif_jpeg.c
to fetchTIFFTAG_YCBCRSUBSAMPLING
from the jpeg data stream if it isn't present in the tiff tags as per bug Remote Sensing bugzilla #168 [no longer available].libtiff/tif_jpeg.c
: Fixed problem with setting ofnrows
inJPEGDecode()
as per bug Remote Sensing bugzilla #129 [no longer available].libtiff/tif_read.c
,libtiff/tif_write.c
:TIFFReadScanline()
andTIFFWriteScanline()
now settif_row
explicitly in case the codec has fooled with the value as per bug Remote Sensing bugzilla #129 [no longer available].libtiff/tif_ojpeg.c
: Major upgrade from Scott. Details in bug Remote Sensing bugzilla #156 [no longer available].libtiff/tif_open.c
: Pointers to custom procedures inTIFFClientOpen()
are checked to be notNULL
pointers.libtiff/tif_lzw.c
: Assertions inLZWDecode()
andLZWDecodeCompat()
replaced by warnings. Now libtiff should read corrupted LZW-compressed files by skipping bad strips as per bug Remote Sensing bugzilla #100 [no longer available].libtiff/tif_dirwrite.c
,libtiff/tif_write.c
,libtiff/tiffio.h
:TIFFCheckpointDirectory()
routine added as per bug Remote Sensing bugzilla #124 [no longer available]. The TIFFWriteDirectory man page discusses this new function as well as the relatedTIFFRewriteDirectory()
.libtiff/tif_codec.c
,libtiff/tif_compress.c
,libtiff/tiffiop.h
,libtiff/tif_getimage.c
: Introduced additional memberstif->tif_decodestatus
andtif->tif_encodestatus
for correct handling of unconfigured codecs (we should not try to read data or to define data size without correct codecs). See bug Remote Sensing bugzilla #119 [no longer available].tif_dirread.c
: avoid div-by-zero ifrowbytes
is zero in chop func as per bug Remote Sensing bugzilla #111 [no longer available].libtiff/tiff.h
,libtiff/tif_dir.c
,libtiff/tif_dir.h
,libtiff/tif_dirinfo.c
,libtiff/tif_dirread.c
,libtiff/tif_dirwrite.c
: Dwight Kelly added get/put code for new tagXMLPACKET
as defined in Adobe XMP Technote. Added missingINKSET
tag value from TIFF 6.0 specINKSET_MULTIINK
(=2). Added missing tags from Adobe TIFF technotes:CLIPPATH
,XCLIPPATHUNITS
,YCLIPPATHUNITS
,OPIIMAGEID
,OPIPROXY
andINDEXED
. AddedPHOTOMETRIC
tag value from TIFF technote 4ICCLAB
(=9).libtiff/tif_getimage.c
: Additional check for supported codecs added inTIFFRGBAImageOK()
,TIFFReadRGBAImage()
,TIFFReadRGBAStrip()
andTIFFReadRGBATile()
now useTIFFRGBAImageOK()
before reading a per bug Remote Sensing bugzilla #110 [no longer available].libtiff/tif_dir.c
,libtiff/tif_dir.h
,libtiff/tif_dirinfo.c
,libtiff/tif_dirread.c
,libtiff/tif_dirwrite.c
: Added routineTIFFDataWidth()
for determiningTIFFDataType
sizes instead of working withtiffDataWidth
array directly as per bug Remote Sensing bugzilla #109 [no longer available].libtiff/tif_dirinfo.c
,libtiff/tif_dirwrite.c
: Added possibility to read broken TIFFs withLONG
type used forTIFFTAG_COMPRESSION
,TIFFTAG_BITSPERSAMPLE
,TIFFTAG_PHOTOMETRIC
as per bug Remote Sensing bugzilla #99 [no longer available].libtiff/tiff.h
,libtiff/tif_fax3.c
: Add support for :c:macro:__arch64__
as per bug Remote Sensing bugzilla #94 [no longer available].libtiff/tif_read.c
: FixedTIFFReadEncodedStrip()
to fail if the decodestrip function returns anything not greater than zero as per bug Remote Sensing bugzilla #97 [no longer available].libtiff/tif_jpeg.c
: fixed computation ofsegment_width
for tiled files to avoid error about it not matching thecinfo.d.image_width
values ("JPEGPreDecode: Improper JPEG strip/tile size.") for ITIFF files. Apparently the problem was incorporated since 3.5.5, presumably during the OJPEG/JPEG work recently.libtiff/tif_getimage.c
: IfDEFAULT_EXTRASAMPLE_AS_ALPHA
is 1 (defined intiffconf.h
- 1 by default) then the RGBA interface will assume that a fourth extra sample isASSOCALPHA
if theEXTRASAMPLE
value isn't set for it. This changes the behaviour of the library, but makes it work better with RGBA files produced by lots of applications that don't mark the alpha values properly. As per bugs Remote Sensing bugzilla #93 [no longer available] and Remote Sensing bugzilla #65 [no longer available].libtiff/tif_jpeg.c
: allow jpeg data stream sampling values to override those from tiff directory. This makes this work with ImageGear generated files.
Tools changes¶
tiff2ps:
Added page size setting when creating PS Level 2.
Fixed PS comment emitted when FlateDecode is being used.
tiffsplit: increased the maximum number of pages that can be split.
raw2tiff:
New utility for turning raw raster images into TIFF files written by Andrey Kiselev.
Added option "
-p
" to explicitly select color space of input image data.
tiffmedian: Support for large (> 2GB) images.
ppm2tiff: Fixed possible endless loop.
tiff2rgba: Switched to use :c:func:TIFFReadRGBAImageOriented instead of
TIFFReadRGBAImage()
.tiffcmp: Fixed problem with unused data comparing (bug Remote Sensing bugzilla #349 [no longer available]). "
-z
" option now can be used to set the number of reported different bytes.tiffcp:
Added possibility to specify value -1 to "
-r
" option to get the entire image as one strip (bug Remote Sensing bugzilla #343 [no longer available]).Set the correct
RowsPerStrip
andPageNumber
values (bug Remote Sensing bugzilla #343 [no longer available]).Fixed problem with colorspace conversion for JPEG encoded images (bugs Remote Sensing bugzilla #23 [no longer available] and Remote Sensing bugzilla #275 [no longer available])
Added support for
Orientation
tag.
fax2tiff:
Page numbering fixed (bug Remote Sensing bugzilla #341 [no longer available]).
Applied patch from Julien Gaulmin. More switches for fax2tiff tool for better control of input and output (bugs Remote Sensing bugzilla #272 [no longer available] and Remote Sensing bugzilla #293 [no longer available]).
Updated to reflect latest changes in libtiff per bug Remote Sensing bugzilla #125 [no longer available].
ppm2tiff: PPM header parser improved: now able to skip comments.
tiff2ps:
Sebastian Eken provided patches (bug Remote Sensing bugzilla #200 [no longer available]) to add new these new switches:
- "
-b #
": for a bottom margin of # inches
- "
-c
": center image
- "
-l #
": for a left margin of # inches
- "
-r
": rotate the image by 180 degrees
Also, new features merged with code for shrinking/overlapping.
- "
Force deadzone printing when EPS output specified (bug Remote Sensing bugzilla #325 [no longer available]).
Add ability to generate PS Level 3. It basically allows one to use the
/flateDecode
filter for ZIP compressed TIFF images. Patch supplied by Tom Kacvinsky (bug Remote Sensing bugzilla #328 [no longer available]).Don't emit
BeginData
/EndData
DSC comments since we are unable to properly include the amount to skip as per bug Remote Sensing bugzilla #80 [no longer available].Added workaround for some software that may crash when last strip of image contains fewer number of scanlines than specified by the
/Height
variable as per bug Remote Sensing bugzilla #164 [no longer available].Patch from John Williams to add new functionality for splitting long images in several pages as per bug Remote Sensing bugzilla #142 [no longer available]. New switches:
- "
-H #
": split image if height is more than # inches
- "
-L #
": overLap split images by # inches
- "
New commandline switches to override resolution units obtained from the input file per bug Remote Sensing bugzilla #131 [no longer available]:
- "
-x
": override resolution units as centimeters
- "
-y
": override resolution units as inches
- "
tiff2ps: Division by zero fixed as per bug Remote Sensing bugzilla #88 [no longer available].
tiffdump: include
TIFFTAG_JPEGTABLES
in tag list.tiffset: fix bug in error reporting.
Contributed software changes¶
Fixed distribution to include
contrib/addtiffo/tif_ovrcache.c
,contrib/addtiffo/tif_ovrcache.h
.libtiff/contrib/win95
: renamed tocontrib/win_dib
. Added newTiffile.cpp
example of converting TIFF files into a DIB on Win32 as per bug Remote Sensing bugzilla #143 [no longer available].
LZW compression kit changes¶
LZW compression kit synchronized with actual libtiff version.