]> git.imager.perl.org - imager.git/blobdiff - Changes
PNG re-work: improve error reporting for PNG read/write
[imager.git] / Changes
diff --git a/Changes b/Changes
index 1511f27270ea2104717ab053811cb0fd08e5156e..6889d76726598b42ae662a3d4e06b49d90cbc3d8 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,6 +1,433 @@
 Imager release history.  Older releases can be found in Changes.old
 
-Imager 0.84 (** update GIF, TIFF, W32, PNG, JPEG, FT2 versions!)
+ - PNG rework
+   - improve error reporting
+
+Imager 0.90 - unreleased
+===========
+
+Bug fixes:
+
+ - Imager::Test::is_imaged() attempted to process an "epsilon"
+   parameter but the prototype didn't allow for the extra parameter.
+   Corrected the prototype.
+
+ - when downconverting samples (eg. from floating point to 8 bit)
+   Imager now rounds the sample value rather than attempting to
+   allocate input values over output values equally.  The old
+   behaviour had the probably surprising effect of converting a
+   floating point 2.1/255.0 into an 8-bit 3 rather than the expected
+   2.
+   This may result in slightly different 8 or 16-bit output images.
+
+ - BI_BITFIELD BMP images were handled incorrectly, both in
+   incorrectly calculating the space required for the masks and in
+   processing the image data itself.
+   https://rt.cpan.org/Ticket/Display.html?id=76736
+
+ - some odd width BMP BI_RLE4 images use run lengths that run one off
+   the edge of the image.  Imager now allows this, discarding the
+   extra column.
+
+ - odd length RLE4 runs in BMP images were decoded incorrectly.
+
+ - pkg-config could sometimes return a library that was in a directory
+   EU::MM / $Config{libpth} doesn't know about, but the compiler did.
+   If no -L is included in the pkg-config library information check if
+   EU::MM can find the library, and if not, search our configured
+   directories and insert that into the library flags.
+   https://rt.cpan.org/Ticket/Display.html?id=75869
+
+ - Imager::Probe can now probe for libraries with dependent libraries,
+   common for static linking, eg. libpng requires libz.
+   https://rt.cpan.org/Ticket/Display.html?id=74043
+
+ - libpng 1.5 specific probes were looking for libpng 1.4 filenames.
+
+ - added alternative probe configurations that try to link libz, to
+   handle a statically linked libpng.
+   https://rt.cpan.org/Ticket/Display.html?id=74043
+
+ - if a probe includes testcode, Imager::Probe now checks that code as
+   part of the process of checking each configuration rather than as a
+   post test of the found configuration.  This allows alternate
+   configurations to be checked if a matching but non-working
+   configuration is found.
+   https://rt.cpan.org/Ticket/Display.html?id=74043
+
+Other changes:
+
+ - when reading or writing images via callbacks, the default callbacks
+   now push an error message indicating that a required callback was
+   called but not supplied.
+   https://rt.cpan.org/Ticket/Display.html?id=76782
+
+ - clarify which callbacks are required for reading and writing TIFF
+   images.
+
+ - improve logging for creation of callback I/O layers.
+
+ - a little more documentation for Imager::Probe.
+
+ - the i_get_file_background() and i_get_file_backgroundf() APIs now
+   return int to indicate whether the i_background tag was found.
+
+Imager 0.89 - 18 Mar 2012
+===========
+
+Bug fixes:
+
+ - getpixel(..., type => "float") and the API i_gpixf() have been
+   broken on paletted images since they were implemented.
+   https://rt.cpan.org/Ticket/Display.html?id=75258
+
+Other changes:
+
+ - links in the METHOD INDEX now point at the method documentation
+   rather than the heading you can find them under.
+   https://rt.cpan.org/Ticket/Display.html?id=71495
+
+ - Imager (and the bundled dynamic modules) no longer fallback to
+   using DynaLoader if loading via XSLoader fails.
+   For the bundled modules this could hide useful error messages.
+   https://rt.cpan.org/Ticket/Display.html?id=75560
+
+ - IM_DEBUG_MALLOC mymalloc() no longer sn?printfs() a string to a
+   buffer in the array of allocations, but just stores the filename
+   pointer and line number.
+   https://rt.cpan.org/Ticket/Display.html?id=70388
+
+Imager 0.88 - 22 Feb 2012
+===========
+
+ - describe how to build libgif etc on OS X in such a way as to be
+   compatible with a fat binary perl (such as the system perl), in
+   README.
+   https://rt.cpan.org/Ticket/Display.html?id=73371
+
+ - update the change notes for 0.77_01 to indicate that libungif
+   support was removed.
+
+ - add some other imaging modules to SEE ALSO
+   https://rt.cpan.org/Ticket/Display.html?id=73906
+
+ - note that the generator of the apparently non-DFSG-free postscript
+   in MMOne.pfb is a Debian package.
+
+ - setsamples() is now a true complement to getsamples() - it can
+   write 8-bit or floating point samples from a scalar or array
+   reference.  This adds i_psamp() and i_psampf() to the C level API.
+
+ - the XS interfaces to i_gsamp(), i_gsampf() and i_gsamp_bits() have
+   changed to make better use of the typemap, but these aren't part of
+   the perl level API anyway.  There were no changes to the C level
+   interfaces to these functions.
+
+ - getpixel() and setpixel() now accept a mix of scalar and array
+   references for the x and y parameters, and unequal array lengths is
+   no longer an error.
+   https://rt.cpan.org/Ticket/Display.html?id=73697
+
+Bug fixes:
+
+ - correctly calculate the size of a rotated image
+   https://rt.cpan.org/Ticket/Display.html?id=69261
+
+ - fix incorrect rounding of color values for matrix_transform() and
+   rotate().
+   https://rt.cpan.org/Ticket/Display.html?id=69261
+
+ - Win32 text output is now done in normal combine mode, the alpha
+   component of the color is now significant.
+   https://rt.cpan.org/Ticket/Display.html?id=70014
+
+ - remove long unused gif case from read()
+   https://rt.cpan.org/Ticket/Display.html?id=69244 (partial)
+
+ - the getsamples() target parameter was being treated as a hashref
+   when it's meant to be an array reference.
+   https://rt.cpan.org/Ticket/Display.html?id=74882
+
+ - getpixel() and setpixel() now returns an empty list when invalid
+   parameters are supplied.
+   Invalid values for type now result in an error for getpixel().
+   https://rt.cpan.org/Ticket/Display.html?id=73697
+
+Imager 0.87 - 03 Jan 2012
+===========
+
+ - document the return value of the filter() method.
+   https://rt.cpan.org/Ticket/Display.html?id=72369
+
+ - document i_gsamp_bits() and i_psamp_bits().
+   https://rt.cpan.org/Ticket/Display.html?id=68815
+
+ - properly increment the Imager::Matrix2d $VERSION.
+
+ - actually include the Imager::Test tests in the dist
+
+ - correctly read and write 256x256 pixel ICO files
+   https://rt.cpan.org/Ticket/Display.html?id=69599
+
+ - make the error message from read() or read_multi() when they can't
+   identify the file type match reality.
+   https://rt.cpan.org/Ticket/Display.html?id=72475
+
+ - read() now uses $FORMATGUESS if it can't determine the file type
+   based on the file header, to match read_multi().
+
+ - re-work and add tests for def_guess_type().  def_guess_type() no
+   longer returns any random file extension as the file type.
+
+ - add gray4, gray16 and gray as presets for make_colors.
+   https://rt.cpan.org/Ticket/Display.html?id=67911
+
+ - add make_palette() method that produces a palette from one or more
+   images.
+
+ - fix the Imager dependency for the separately distributed font
+   drivers.
+   https://rt.cpan.org/Ticket/Display.html?id=72643
+
+ - fix i_render_color() to properly draw in "normal" mode - ie. when
+   writing to a 1 or 3 channel image the second or fourth channel of
+   the source color was being ignored, it is now significant.
+   https://rt.cpan.org/Ticket/Display.html?id=71564
+
+Imager 0.86 - 31 Oct 2011
+===========
+
+ - improve error reporting for W32 tests
+
+Imager 0.85_02 - 24 Oct 2011
+==============
+
+Bug fixes:
+
+ - eliminate unused i_gif_opts type (clean-up)
+   https://rt.cpan.org/Ticket/Display.html?id=69245
+
+ - fix combine=0 fill color anti-aliasing on the double/sample path
+   https://rt.cpan.org/Ticket/Display.html?id=71309
+
+ - make default text color non-transparent
+   https://rt.cpan.org/Ticket/Display.html?id=71469
+
+ - apply the last of the Debian unforwarded spelling fixes
+   https://rt.cpan.org/Ticket/Display.html?id=70656
+
+ - the log() method used its message parameter as a C level format
+   string.
+   https://rt.cpan.org/Ticket/Display.html?id=71653
+
+ - provide our own STRLEN typemap entry for older perls.
+   https://rt.cpan.org/Ticket/Display.html?id=71641
+
+ - add extra ppport.h configuration to support older perls.
+
+ - depend on Scalar::Util, since we use it and older perls don't have
+   it.
+
+ - add overloaded eq to Imager::Matrix2d, since older perls don't seem
+   to synthesize it from overloaded "".
+
+  - use T1_StrError() for error messages on modern libt1
+    https://rt.cpan.org/Ticket/Display.html?id=69879
+
+ - actually load the font rather than just adding it to the catalog on
+   creation.
+
+ - Imager::Font->new now produces better error messages for the T1
+   engine.
+
+ - the font has_chars() method now returns perl's true and false
+   values in list context rather than integers, which should be more
+   efficient.
+   https://rt.cpan.org/Ticket/Display.html?id=69158
+
+ - the btm data structure used by the flood_fill code is now
+   initialized more efficiently.
+   https://rt.cpan.org/Ticket/Display.html?id=68994
+
+ - updated the Thanks list in README
+   https://rt.cpan.org/Ticket/Display.html?id=71607
+
+ - check there's at least one coefficient for the convolution filter
+   https://rt.cpan.org/Ticket/Display.html?id=68993
+
+ - make the APIRef synopsis ordering consistent, older versions of
+   perl could order it differently.
+   https://rt.cpan.org/Ticket/Display.html?id=71675
+
+ - we rely on Config.pm's d_vsnprintf as to whether we use
+   vsnprintf/snprintf, which is defined in the Win32 Config.pm even
+   though it only has _ prefixed versions of these.  Define our own
+   prefixed names on Win32.
+   https://rt.cpan.org/Ticket/Display.html?id=71642
+
+ - fix library detection with MSVC
+
+ - search a few more library directories, so EU::MM doesn't discard
+   them.  Hopefully fixes:
+   https://rt.cpan.org/Ticket/Display.html?id=71643
+
+Imager 0.85_01 - 10 Oct 2011
+==============
+
+ - add simple tests for the Imager::Test test_image generators
+
+ - io_glue I/O buffering re-work:
+
+   - reorganize io_glue to do it's own buffering by default
+
+   - the unbuffered functions are available as i_io_raw_read() (or
+     raw_read() from perl) etc but are not recommended for typical
+     use.
+
+   - use the new i_io_peekn() when checking for file magic to avoid
+     seek, allowing Imager to detect the file type and read the file
+     from an unseekable stream (for formats that don't use random
+     access)
+
+   - added several new I/O layer API functions.
+
+   - fix the TGA performance problem, most noticably on Win32
+     https://rt.cpan.org/Ticket/Display.html?id=70037
+
+   - TIFF now uses wrapper functions of the correct types to avoid casts
+     https://rt.cpan.org/Ticket/Display.html?id=69912
+
+   - the callback IO object did its own buffering, controlled by the
+     maxbuffer parameter supplied to the read() and write() methods.
+     This buffering has been removed, to avoid redundancy with the
+     common io_glue buffering.  This also avoids a bug in that code
+     which could rarely pass a zero length to the read callback and
+     then panic about the result.
+
+   - the callback IO object now tests the result of calling the close
+     callback, which should return true for success.
+
+   - the PNM reader did its own buffering.  This buffering has been
+     removed to avoid redundancy with the common io_glue buffering.
+
+   - previously the read handlers for fd and callback I/O layers would
+     call the underlying interface (POSIX read or your supplied callback)
+     until it filled the buffer.  It now only makes one call.
+
+   - added public constructors for I/O layer objects (see Imager::IO)
+
+   - all core file handlers now use the i_io_foo() wrappers to gain
+     access to buffered I/O rather than calling the I/O layer
+     callbacks directly.
+
+   - all core file handlers now check for error on close.
+
+   - Backward compatibility: if you hava custom file handlers, you can
+     use i_io_write() etc since they're available as macros in older
+     versions of Imager.
+
+   - eliminate the final remnants of io_glue_commit_types().
+
+   - bump IMAGER_API_VERSION, since the above may break assumptions.
+
+ - removed the long unused i_gen_reader() and i_gen_writer() utility
+   functions.
+
+Imager 0.85 - 29 Aug 2011
+===========
+
+The main changes in the release versus 0.84 are:
+
+ - on 64-bit systems, 64-bit types are consistently used for image
+   dimensions and co-ordinated, and for memory block sizes.
+
+ - handle IFD loops in TIFF files correctly.  Previously this would
+   lead to an infinite loop.
+
+Bug fixes:
+
+ - fix the link in the getheight() entry in the method index
+
+Imager 0.84_02 - 22 Aug 2011
+==============
+
+Development release, this will become 0.85 if CPAN testers is
+favourable.
+
+Bug fixes:
+
+ - the image file limits set by set_file_limits() weren't being
+   checked when reading TIFF files.
+   https://rt.cpan.org/Ticket/Display.html?id=69915
+
+ - Provide more information about file format module load errors on a
+   failed image file read() or write().
+   https://rt.cpan.org/Ticket/Display.html?id=69194
+
+ - use TIFFReadDirectory() instead of TIFFSetDirectory() to iterate
+   through TIFF images, since it checks for IFD loops.
+   https://rt.cpan.org/Ticket/Display.html?id=69914
+
+ - don't leak memory when out of range palette indexes are supplied to
+   setscanline().
+   https://rt.cpan.org/Ticket/Display.html?id=69242
+
+ - require a later version of CPAN::Meta to ensure JSON::PP and
+   CPAN::Meta::YAML are available.
+   https://rt.cpan.org/Ticket/Display.html?id=69008
+
+ - hoist the per-line calculations for the flines implementations, and
+   modernize the tests a bit.
+   https://rt.cpan.org/Ticket/Display.html?id=70126
+
+ - detect snprintf()/vsnprintf() (cheat by using Config.pm) and use
+   them when available.
+   https://rt.cpan.org/Ticket/Display.html?id=69147
+
+ - if t1lib failed to reinitialize it would be left as marked
+   initialized.
+   https://rt.cpan.org/Ticket/Display.html?id=69877
+
+ - update the bundled (and still modified) Devel::CheckLib
+   https://rt.cpan.org/Ticket/Display.html?id=69170
+
+Imager 0.84_01 - 8 Aug 2011
+==============
+
+Development release as a sanity check for the types re-work.
+
+Massive types re-work:
+
+ - the type used internally for pixel co-ordinates and image sizes is
+   now 64-bit on 64-bit platforms (at least sane ones).
+
+ - size_t is now used consistently for memory block sizes.
+
+ - since this changes the binary interface, the Imager API version has
+   been incremented.  Any module that uses the API will need to be
+   rebuilt.  In most cases that will be enough, but calls to any APIs
+   that take a pointer to image sizes may need source changes.
+
+ - you should be able to create very large images on 64-bit systems,
+   if you have enough memory.  Successfully created a 32768 x 49192 x
+   3 channel image, filled with a tiled image and scaled it.  The
+   unscaled image was also successfully saved to a JPEG.
+
+ - check the image size before attempting to write BMP, GIF, JPEG,
+   PNG, SGI, TGA, TIFF images.
+
+ - correctly handle reading TGA images over 32767 pixels wide or tall.
+
+Incidental changes:
+
+ - the gif_left and gif_top tags are now clamped to non-negative
+   values when writing a GIF image.
+
+ - removed dead callback read/write code
+
+The default maximum memory size when reading files is now 1G.
+
+Imager 0.84 - 20 Jun 2011
 ===========
 
  - Imager no longer inherits from Exporter (unless you're running an
@@ -252,6 +679,8 @@ Imager 0.77_01 - 13 Sep 2010
    preparation for separate distribution.
    https://rt.cpan.org/Ticket/Display.html?id=49616 (partial)
 
+   Note: this removed support for libungif from Imager.
+
  - optimize filled box drawing (color, not fill)
 
 Bug fixes: