1<HTML> 2<HEAD> 3<TITLE> 4Changes in TIFF v3.6.0 5</TITLE> 6</HEAD> 7 8<BODY BGCOLOR=white> 9<FONT FACE="Helvetica, Arial, Sans"> 10<FONT FACE="Helvetica, Arial, Sans"> 11 12<BASEFONT SIZE=4> 13<B><FONT SIZE=+3>T</FONT>IFF <FONT SIZE=+2>C</FONT>HANGE <FONT SIZE=+2>I</FONT>NFORMATION</B> 14<BASEFONT SIZE=3> 15 16<UL> 17<HR SIZE=4 WIDTH=65% ALIGN=left> 18<B>Current Version</B>: v3.6.0<BR> 19<B>Previous Version</B>: <A HREF=v3.5.7.html>v3.5.7</a><BR> 20<B>Master FTP Site</B>: <A HREF="ftp://ftp.remotesensing.org/pub/libtiff">ftp.remotesensing.org</a>, directory pub/libtiff</A><BR> 21<B>Master HTTP Site</B>: <A HREF="http://www.libtiff.org/">http://www.libtiff.org</a> 22<HR SIZE=4 WIDTH=65% ALIGN=left> 23</UL> 24 25<P> 26This document describes the changes made to the software between the 27<I>previous</I> and <I>current</I> versions (see above). 28If you don't find something listed here, then it was not done in this 29timeframe, or it was not considered important enough to be mentioned. 30The following information is located here: 31<UL> 32<LI><A HREF="#hightlights">Major Changes</A> 33<LI><A HREF="#configure">Changes in the software configuration</A> 34<LI><A HREF="#libtiff">Changes in libtiff</A> 35<LI><A HREF="#tools">Changes in the tools</A> 36<LI><A HREF="#lzwkit">Changes in the LZW compression kit</A> 37</UL> 38<p> 39<P><HR WIDTH=65% ALIGN=left> 40 41<!---------------------------------------------------------------------------> 42 43<A NAME="highlights"><B><FONT SIZE=+3>M</FONT>AJOR CHANGES:</B></A> 44 45<ul> 46 <li> New utility <a href=./man/raw2tiff.1.html>raw2tiff</a> 47for converting raw rasters into TIFF files. 48 <li> Lots of new <a href=./man/tiff2ps.1.html>tiff2ps</a> options. 49 <li> Lots of bug fixes for LZW, JPEG and OJPEG compression. 50</ul> 51 52<h3>Custom Tag Support</h3> 53 54The approach to extending libtiff with custom tags has changed radically. 55Previously, all internally supported TIFF tags had a place in the 56private TIFFDirectory structure within libtiff to hold the values (if read), 57and a "field number" (ie. FIELD_SUBFILETYPE) used to identify that tag. 58However, every time a new tag was added to the core, the size of the 59TIFFDirectory structure would changing, breaking any dynamically linked 60software that used the private data structures.<p> 61 62Also, any tag not recognised 63by libtiff would not be read and accessable to applications without some 64fairly complicated work on the applications part to pre-register the tags 65as exemplified by the support for "Geo"TIFF tags by libgeotiff layered on 66libtiff. <p> 67 68Amoung other things this approach required the extension code 69to access the private libtiff structures ... which made the higher level 70non-libtiff code be locked into a specific version of libtiff at compile time. 71This caused no end of bug reports!<p> 72 73The new approach is for libtiff to read all tags from TIFF files. Those that 74aren't recognised as "core tags" (those having an associated FIELD_ value, 75and place for storage in the TIFFDirectory structure) are now read into a 76dynamic list of extra tags (td_customValues in TIFFDirectory). When a new 77tag code is encountered for the first time in a given TIFF file, a new 78anonymous tag definition is created for the tag in the tag definition list. 79The type, and some other metadata is worked out from the instance encountered. 80These fields are known as "custom tags". <p> 81 82Custom tags can be set and fetched normally using TIFFSetField() and 83TIFFGetField(), and appear pretty much like normal tags to application code. 84However, they have no impact on internal libtiff processing (such as 85compression). Some utilities, such as tiffcp will now copy these custom 86tags to the new output files. <p> 87 88As well as the internal work with custom tags, new C API entry points 89were added so that extension libraries, such as libgeotiff, could 90define new tags more easily without accessing internal data structures. 91Because tag handling of extension tags is done via the "custom fields" 92mechanism as well, the definition provided externally mostly serves to provide 93a meaningful name for the tag. 94 95The addition of "custom tags" and the altered approach to extending libtiff 96with externally defined tags is the primary reason for the shift to the 973.6.x version number from 3.5.x.<p> 98 99<P><HR WIDTH=65% ALIGN=left> 100<!---------------------------------------------------------------------------> 101 102<A NAME="configure"><B><FONT SIZE=+3>C</FONT>HANGES IN THE SOFTWARE CONFIGURATION:</B></A> 103 104<UL> 105<li> configure, config.site: Fix for large files (>2GiB) support. New 106option in the config.site: LARGEFILE="yes". Should be enougth for the large 107files I/O. 108 109<li> configure: Set -DPIXARLOG_SUPPORT option along with -DZIP_SUPPORT. 110 111<li> html/Makefile.in: Updated to use groffhtml for generating html pages 112from man pages. 113 114<li> configure, libtiff/Makefile.in: Added SCO OpenServer 5.0.6 support 115from John H. DuBois III. 116 117<li> libtiff/{Makefile.vc, libtiff.def}: Missed declarations added. 118 119<li> libtiff/Makefile.in, tools/Makefile.in: Shared library will not be 120stripped when installing, utility binaries will do be stripped. As per bug 93. 121 122<li> man/Makefile.in: Patch DESTDIR handling as per bug 95. 123 124<li> configure: OpenBSD changes for Sparc64 and DSO version as per bug 96. 125 126<li> config.site/configure: added support for OJPEG=yes option to enable 127OJPEG support from config.site. 128 129<li> config.guess, config.sub: Updated from ftp.gnu.org/pub/config. 130 131<li> configure: Modify CheckForBigEndian so it can work in a cross 132compiled situation. 133 134<li> configure, libtiff/Makefile.in: Changes for building on MacOS 10.1 135as per bug 94. 136 137<li> html/Makefile.in: added missing images per bug 92. 138 139<li> port/Makefile.in: fixed clean target per bug 92. 140</UL> 141 142<P><HR WIDTH=65% ALIGN=left> 143 144<!---------------------------------------------------------------------------> 145 146<A NAME="libtiff"><B><FONT SIZE=+3>C</FONT>HANGES IN LIBTIFF:</B></A> 147 148 149<UL> 150<li> libtiff/tif_jpeg.c: modified segment_height calculation to always 151be a full height tile for tiled images. Also changed error to just 152be a warning. 153 154<li> libtiff/tif_lzw.c: fixed so that decoder state isn't allocated till 155LZWSetupDecode(). Needed to read LZW files in "r+" mode. 156 157<li> libtiff/tif_dir.c: fixed up the tif_postdecode settings responsible 158for byte swapping complex image data. 159 160<li> libtiff/tif_open.c: Removed error if opening a compressed file 161in update mode bug (198). 162 163<li> libtiff/tif_write.c: TIFFWriteCheck() now fails if the image is 164a pre-existing compressed image. That is, image writing to pre-existing 165compressed images is not allowed. 166 167<li> html/man/*.html: Web pages regenerated from man pages. 168 169<li> libtiff/tif_jpeg.c: Hack to ensure that "boolean" is defined properly 170on Windows so as to avoid the structure size mismatch error from libjpeg 171(bug 188). 172 173<li> libtiff/tiff.h: #ifdef USING_VISUALAGE around previous Visual Age 174AIX porting hack as it screwed up gcc. (bug 39) 175 176<li> libtiff/tiff.h: added COMPRESSION_JP2000 (34712) for LEAD tools 177custom compression. 178 179<li> libtiff/tif_dirread.c: Another fix for the fetching SBYTE arrays 180by the TIFFFetchByteArray() function. (bug 52) 181 182<li> libtiff/tif_dirread.c: Expand v[2] to v[4] in TIFFFetchShortPair() 183as per bug 196. 184 185<li> libtiff/tif_lzw.c: Additional consistency checking added in 186LZWDecode() and LZWDecodeCompat() fixing bugs 190 and 100. 187 188<li> libtiff/tif_lzw.c: Added check for valid code lengths in LZWDecode() 189and LZWDecodeCompat(). Fixes bug 115. 190 191<li> tif_getimage.c: Ensure that TIFFRGBAImageBegin() returns the 192return code from the underlying pick function as per bug 177. 193 194<li> libtiff/{tif_jpeg.c,tif_strip.c,tif_print.c}: Hacked tif_jpeg.c to 195fetch TIFFTAG_YCBCRSUBSAMPLING from the jpeg data stream if it isn't 196present in the tiff tags as per bug 168. 197 198<li> libtiff/tif_jpeg.c: Fixed problem with setting of nrows in 199JPEGDecode() as per bug 129. 200 201<li> libtiff/tif_read.c, libtiff/tif_write.c: TIFFReadScanline() and 202TIFFWriteScanline() now set tif_row explicitly in case the codec has 203fooled with the value as per bug 129. 204 205<li> libtiff/tif_ojpeg.c: Major upgrade from Scott. Details in bug 156. 206 207<li> libtiff/tif_open.c: Pointers to custom procedures 208in TIFFClientOpen() are checked to be not NULL-pointers. 209 210<li> libtiff/tif_lzw.c: Assertions in LZWDecode and LZWDecodeCompat 211replaced by warnings. Now libtiff should read corrupted LZW-compressed 212files by skipping bad strips as per bug 100. 213 214<li> libtiff/: tif_dirwrite.c, tif_write.c, tiffio.h: 215<a href=./man/TIFFWriteDirectory.3t.html>TIFFCheckpointDirectory()</a> 216routine added as per bug 124. The 217<a href=./man/TIFFWriteDirectory.3t.html>TIFFWriteDirectory</a> 218man page discusses this new function as well as the related 219<a href=./man/TIFFWriteDirectory.3t.html>TIFFRewriteDirectory()</a>. 220 221<li> libtiff/: tif_codec.c, tif_compress.c, tiffiop.h, tif_getimage.c: 222Introduced 223additional members tif->tif_decodestatus and tif->tif_encodestatus 224for correct handling of unconfigured codecs (we should not try to read 225data or to define data size without correct codecs). See bug 119. 226 227<li> tif_dirread.c: avoid div-by-zero if rowbytes is zero in chop func as 228per bug 111. 229 230<li> libtiff/: tiff.h, tif_dir.c, tif_dir.h, tif_dirinfo.c, tif_dirread.c, 231tif_dirwrite.c: Dwight Kelly added get/put code for new tag XMLPACKET as 232defined in Adobe XMP Technote. Added missing INKSET tag value from TIFF 6.0 233spec INKSET_MULTIINK (=2). Added missing tags from Adobe TIFF technotes: 234CLIPPATH, XCLIPPATHUNITS, YCLIPPATHUNITS, OPIIMAGEID, OPIPROXY and 235INDEXED. Added PHOTOMETRIC tag value from TIFF technote 4 ICCLAB (=9). 236 237<li> libtiff/tif_getimage.c: Additional check for supported codecs added in 238TIFFRGBAImageOK, TIFFReadRGBAImage, TIFFReadRGBAStrip and TIFFReadRGBATile now 239use TIFFRGBAImageOK before reading a per bug 110. 240 241<li> libtiff/: tif_dir.c, tif_dir.h, tif_dirinfo.c, tif_dirread.c, 242tif_dirwrite.c: Added routine 243<a href=./man/TIFFDataWidth.3t.html>TIFFDataWidth</a> for determining 244TIFFDataType sizes instead of working with tiffDataWidth array 245directly as per bug 109. 246 247<li>libtiff/: tif_dirinfo.c, tif_dirwrite.c: Added possibility to 248read broken TIFFs with LONG type used for TIFFTAG_COMPRESSION, 249TIFFTAG_BITSPERSAMPLE, TIFFTAG_PHOTOMETRIC as per bug 99. 250 251<li> libtiff/{tiff.h,tif_fax3.c}: Add support for __arch64__ as per bug 94. 252 253<li> libtiff/tif_read.c: Fixed TIFFReadEncodedStrip() to fail if the 254decodestrip function returns anything not greater than zero as per bug 97. 255 256<li> libtiff/tif_jpeg.c: fixed computation of segment_width for 257tiles files to avoid error about it not matching the 258cinfo.d.image_width values ("JPEGPreDecode: Improper JPEG strip/tile 259size.") for ITIFF files. Apparently the problem was incorporated since 2603.5.5, presumably during the OJPEG/JPEG work recently. 261 262<li> libtiff/tif_getimage.c: If DEFAULT_EXTRASAMPLE_AS_ALPHA is 1 263(defined in tiffconf.h - 1 by default) then the RGBA interface 264will assume that a fourth extra sample is ASSOCALPHA if the 265EXTRASAMPLE value isn't set for it. This changes the behaviour of 266the library, but makes it work better with RGBA files produced by 267lots of applications that don't mark the alpha values properly. 268As per bugs 93 and 65. 269 270<li> libtiff/tif_jpeg.c: allow jpeg data stream sampling values to 271override those from tiff directory. This makes this work with 272ImageGear generated files. 273 274</UL> 275 276<P><HR WIDTH=65% ALIGN=left> 277 278<!--------------------------------------------------------------------------> 279 280<A NAME="tools"><B><FONT SIZE=+3>C</FONT>HANGES IN THE TOOLS:</B></A> 281 282<UL> 283<li> <a href=./man/tiffcmp.1.html>tiffcmp</a>: Fixed problem with unused data 284comparing (bug 349). `-z' option now can be used to set the number of reported 285different bytes. 286 287<li> <a href=./man/tiffcp.1.html>tiffcp</a>: Added possibility to specify 288value -1 to -r option to get the entire image as one strip (bug 343). 289 290<li> <a href=./man/tiffcp.1.html>tiffcp</a>: Set the correct RowsPerStrip 291and PageNumber values (bug 343). 292 293<li> <a href=./man/fax2tiff.1.html>fax2tiff</a>: Page numbering fixed (bug 294341). 295 296<li> <a href=./man/ppm2tiff.1.html>ppm2tiff</a>: PPM header parser improved: 297now able to skip comments. 298 299<li> <a href=./man/tiff2ps.1.html>tiff2ps</a>: Force deadzone printing when 300EPS output specified (bug 325). 301 302<li> <a href=./man/tiff2ps.1.html>tiff2ps</a>: Add ability to generate 303PS Level 3. It basically allows one to use the /flateDecode filter for ZIP 304compressed TIFF images. Patch supplied by Tom Kacvinsky (bug 328). 305 306<li> <a href=./man/tiffcp.1.html>tiffcp</a>: Fixed problem with colorspace 307conversion for JPEG encoded images (bugs 23 and 275) 308 309<li> <a href=./man/fax2tiff.1.html>fax2tiff</a>: Applied patch from 310Julien Gaulmin. More switches for fax2tiff tool for better control 311of input and output (bugs 272 and 293). 312 313<li> <a href=./man/raw2tiff.1.html>raw2tiff</a>: 314New utility for turning raw raster images into TIFF files 315written by Andrey Kiselev. 316 317<li> <a href=./man/tiff2ps.1.html>tiff2ps</a>: 318Sebastian Eken provided patches (bug 200) to add new these new 319switches: 320 <ul> 321 <li> <b>-b #</b>: for a bottom margin of # inches 322 <li> <b>-c</b>: center image 323 <li> <b>-l #</b>: for a left margin of # inches 324 <li> <b>-r</b>: rotate the image by 180 degrees 325 </ul> 326 327Also, new features merged with code for shrinking/overlapping. 328 329<li> <a href=./man/tiff2ps.1.html>tiff2ps</a>: Don't emit BeginData/EndData 330DSC comments since we are unable to properly include the amount to skip 331as per bug 80. 332 333<li> <a href=./man/tiff2ps.1.html>tiff2ps</a>: Added workaround for some 334software that may crash when last strip of image contains fewer number 335of scanlines than specified by the `/Height' variable as per bug 164. 336 337<li> <a href=./man/tiff2ps.1.html>tiff2ps</a>: Patch from John Williams to add new 338functionality for tiff2ps utility splitting long images in several pages as 339per bug 142. New switches: 340 <ul> 341 <li> <b>-H #</b>: split image if height is more than # inches 342 <li> <b>-L #</b>: overLap split images by # inches 343 </ul> 344 345<li> <a href=./man/tiff2ps.1.html>tiff2ps</a>: New commandline 346switches to override resolution units obtained from the input file per bug 131: 347 <ul> 348 <li> <b>-x</b>: override resolution units as centimeters 349 <li> <b>-y</b>: override resolution units as inches 350 </ul> 351 352<li> <a href=./man/fax2tiff.1.html>fax2tiff</a>: Updated to reflect 353latest changes in libtiff per bug 125. 354 355<li> tiff2ps: Division by zero fixed as per bug 88. 356 357<li> <a href=./man/tiffcp.1.html>tiffcp<a>: 358Added support for 'Orientation' tag. 359 360<li> <a href=./man/tiffdump.1.html>tiffdump</a>: 361include TIFFTAG_JPEGTABLES in tag list. 362 363<li> tiffset: fix bug in error reporting. 364 365</UL> 366 367<P><HR WIDTH=65% ALIGN=left> 368 369<!---------------------------------------------------------------------------> 370 371<A NAME="contrib"><B><FONT SIZE=+3>C</FONT>HANGES IN THE CONTRIB AREA:</B></A> 372<UL> 373 374<li> Fixed distribution to include contrib/addtiffo/tif_ovrcache.{c,h}. 375<li> libtiff/contrib/win95: renamed to contrib/win_dib. Added new 376Tiffile.cpp example of converting TIFF files into a DIB on Win32 as per 377bug 143. 378 379</UL> 380 381<A HREF="index.html"><IMG SRC="images/back.gif"></A> TIFF home page.<BR> 382 383<HR> 384 385Last updated $Date: 2003-06-18 20:31:09 $. 386 387</BODY> 388</HTML> 389