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