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