- set i_format to pnm when reading pnm files and test for it
[imager.git] / Changes
1 Revision history for Perl extension Imager.
2
3 0.01  Thu May  6 15:25:03 1999
4         - original version; created by h2xs 1.18
5
6 0.02  Mon May 10 20:20:20 1999
7         - Added PPM writer, and a new return type to
8         be used to return undef() from a function returning
9         (int)0.
10
11 0.03  Thu May 20 23:23:23 1999
12         - Added Pseudo image handling thingies, now
13         you can use your own get and put pixel routines.
14
15 0.04  Mon May 24 22:14:55 1999
16         - Rewrote parts of jpeg support.
17
18 0.05  Tue May 25 23:40:01 1999
19         - Added png support with libpng
20         fixed error reporting and return types from
21         some format routines.
22
23 0.06  Wed May 26 19:05:39 1999
24         - Fixed Data::Dumper being used when it shouldn't have
25         added feature checking to see at run time if 
26         certain formats are avaliable.
27         removed some ancient C++ style comments that hadn't 
28         been properly removed, some out of bounds errors in ppm.c
29         fixed tests so missing features are skipped.
30
31 0.07  Thu May 27 03:15:00 1999
32         - Fixed the typemap for i_img and i_color so that you can pass
33         a null pointer to them without getting a warning when warnings
34         are enabled. Maybe this is counter perl but it greatly increases
35         the usability of the functions.
36
37 0.08   Fri May 28 14:13:21 1999
38          - Added support for gif via, giflib or libungif.
39          gif is so ridden with patent issues but the user
40          can decide which library to use since they have the same
41          include files and calling interface.
42
43 0.09   Mon May 31 17:52:32 1999
44          - Added image scaling per axis - faster than doing both
45          axes at the same time.  The current method uses lancoz
46          kernel and filtering. But more types should be added -
47          including: nearest neighbor, linear, and bicubic.
48
49 0.10   Mon Jun  7 03:25:54 1999
50          - Added T1 postscript font handling. It's very primitive
51          at the moment but creative people can do nice stuff 
52          with it.  Currently it is not possible to have it 
53          generate an image of the correct size for a given string 
54          but that is on the way.
55
56 0.11   Mon Jun  7 14:43:35 1999
57          - Added T1 features for direct to image rendering in 
58          a single color.  fixed some debug messages going to 
59          stderr instead of a log file.
60
61 0.12   Tue Jun  8 02:58:43 1999
62          - Fixed bugs in jpeg.c when loading images. Also specified
63          prototype behaviour to on in the Imager.xs file. The
64          Makefile.PL step doesn't complain anymore so that is
65          hopefully fixed.
66
67 0.13   Wed Jun  9 06:55:58 1999
68          - Fixed Imager.xs for init_log call.  Minor fixes here
69          and there.
70
71 0.14   Thu Jun 10 14:11:22 1999
72          - Rewrote most of the logging stuff so that it is now
73          possible to remove all logging from the XS part of the
74          module.  Also some primitive check of memory usage was
75          added. Claes Jacobsson sent in some filters, inverter,
76          contrast and a noise filter.
77
78 0.15   Mon Jun 14 08:13:29 1999
79           - Wrote minor enhancement on the calling syntax list.
80           Started on the object interface - added better support
81           for quering avaliable filetypes.  Fixed memory leaks in       
82           most loaders. New filters from Claes in this version
83           are bumpmap, postlevels and mosaic.
84
85 0.16    Wed Jun 16 20:54:33 1999
86           - Added fixes to the BEGIN and END parts, added writer
87           function for the OO interface. Also added basic IPTC 
88           reading support for jpegs.  Also a few filters have been
89           added to the OO interface.
90
91 0.17    Thu Jun 24 11:09:15 1999
92           - Added dynamic loading stuff - It's still missing a nice
93           global symbol table. This will be fixed in next release.
94           also calling the plugins is not all to easy at the moment.
95
96
97 0.18    Mon Jun 28 12:31:33 1999
98           - Added global symbol table - plugins now need a symbol
99           table pointer in them. When the module is loaded it is
100           set to point at the global symbol table. Also some barebones
101           Makefile.PL has been made in the dynfilt directory - it works
102           on my system - I hope it does on yours.
103
104
105 0.19    Fri Jul  1 15:00:03 1999        
106           - Added a way new scaling method for creating easy previews.
107           It only uses nearest neighbor, so it's doesn't look very nice
108           but it may be better for applications like remote sensing.
109
110 0.20    Mon Jul  5 10:15:37 1999
111           - Added and rewrote documentation.
112
113 0.21    Mon Jul  6 19:15:37 1999
114           - Fixed a bug in the scaling routine - it wasn't
115           handling 0< cases.
116
117 0.22    Sat Oct  9 07:04:14 1999
118           - Added a new method to write gif images - now 
119           it is possible to have a part of a palette fixed.
120           this is very usefull if one needs to make sure that
121           some color like white is in the pallete.  This method
122           also allows some ditherding and gives better colormap
123           than the mediancut from the gif libraries.  It does
124           need much more cpu power though.  Hopefully later versions
125           will be faster.
126
127 0.23    **************** Internal release only
128           - Fixed the %instances bug - caused ALL memory to be leaked.
129           Added real noise function - need feedback on how it should
130           be used. Also box(), and polyline are now in place.  Polygon
131           is missing but antialiased line drawing with integer endpoints are
132           done but should be replaced with a version that can have 
133           floating point endvalues. Two noise filters addded.
134
135 0.24    **************** Internal release only
136           - Converted i_color into an object from a reference, so now it's
137         giving an object instead of a void ptr or an integer or something.
138
139 0.25    **************** Internal release only
140           - Added basic Truetype functionality - still needs a rewrite
141         to be decent. Currently it's a port of a demo program that
142         uses an awful amount of global variables and there is much IO since
143         no caching of glyphs is done.
144
145 0.26    Tue Nov 23 03:57:00 1999 > Development release <
146           - Added transformations so that an image can be wrapped.
147         To achive decent speed a C based stackmachine is included. As a result
148         transformations need to be specified in rpn (postfix) notation. It
149         also can use the Affix::Infix2Postfix class to do the conversion for it.
150
151 0.27    Tue Dec 28 03:57:00 1999 > CPAN release <
152           - This is a bugfix version mostly, thanks to claes for pointing
153         out the problems - fixed palette saving wasn't working correctly after
154         version 0.24 - rather surprised this didn't crash everything.
155         Also fixed that for t1 fonts the bounding box wasn't being reported 
156         unless the font had been used before.  This is either a bug in t1lib
157         or a mistake in it's documentation.  Another lingering bug since 0.24
158         what that $img->box() wasn't creating it's default color properly.
159         Added i_tt_text() method and more debuging to the truetype routines.            
160         truetype testcase fixed and old debug rubish removed.
161
162 0.28    Tue Jan  4 05:25:58 2000 > CPAN release <
163           - Only fixes to truetype test and transformation tests.
164         Thanks to schinder of cpan testers for testing and reporting.
165
166 0.29    Tue Jan  4 21:49:57 2000 > CPAN release <
167           - fixes to get rid of warnings under pre 5.005, 
168         Fixed broken preproccessor directives to work on non gnu
169         compilers.  Fixed DSO test on HPUX - both code errors and
170         HPUX creates .sl instead of .so so the tests were failing.
171
172 0.30    Sun Jan  7 05:00:06 2000 > Bunch of Alpha releases <
173           - An attempt to automate installation.
174
175 0.31    Sat Jan 15 03:58:29 2000 > Fixes fixes fixes <
176           - Fixed a bug pointed out by Leolo where loading gifs
177         skips the first line of the imageload() has been
178         by read() - for now load is an alias for read.  It will
179         be removed in the future.  Also, fixes dynamic loading on
180         systems that prepend an underscore to symbols.  At the present
181         the only system that I know of that needs this is OpenBSD.
182         BUT YOU MUST RECOMPILE ALL OF YOUR OLD MODULES AGAINST THIS BUILD.
183         Added getchannels() method ( How did I manage to delay this
184         untill now ).  Some document changes but nothing substantial.
185         Also fixed the png read/write routines to handle all colorspaces
186         and images with alpha information.  Also now it's possible to 
187         have Imager guess the format of the files to load or save 
188         when passing files to read or save from the filename.
189         Also all of the tests except dynamic loading now pass on OS/2.
190
191 0.32    Tue Feb 29 17:26:00 2000 CPAN RELEASE
192           - Added the getcolorcount method.  Fixed interlace handling
193         on png images.  Fixed the missing channel count in crop()
194         method. Rewrote most of t1lib database stuff - created color
195         and font classes.  T1 stuff is mostly done - TT things were
196         rewritten too and now include most of what is needed for
197         pixmap caching.  Added documentation for fonts.  Comments have
198         been added to some of the relevant c-routines.  Added a copy()
199         function in Imager.xs and a corresponding method name.
200         Changed the underlying data type for the raw XS images from
201         pointers to objects - this will hopefully catch the most
202         basic errors and keep the segfaulting down.  This means that
203         all of the underlying XS calls for readjpeg, readgif, readpng 
204         and readraw do not take the first parameter any more.  
205         Made fixes to keep it not spewing warning on 5.004 perl.        
206
207         **** If you had any code that didn't use the OO interface ****
208         ****         It will probably not work any longer         ****
209         
210 0.33    Beta -- No final
211           - Fixed the end message from Imager 0.32.  Destroy called
212         on an empty image.  Did some work on the polygon method.  
213         Some clean up in the Makefile.PL script.  Fixed a buffer
214         overrun in the t_transform in Imager.XS.  Fixed the 
215         error handling in the jpeg loader.  It now correctly
216         returns undef if a load on an image fails.  It also 
217         sends the error messages to the log file.  Added errstr()
218         method to the image object.  Added a new way to read()
219         objects from scalars.  So far this is only implemented for
220         jpeg, png and gif.  ppm and raw soon - as always if someone
221         wants to do an overhaul on the ppm stuff feel free.  It seems
222         like such a basic format that interfacing with a library is more
223         work than implementing all of the needed routines instead.
224
225 0.34    Beta -- No final
226           - Bunch of documentation fixes, backed out ppm code.
227         Put in TonyC's giant transform2 patch.  Fixed the patch
228         to make it ansi compliant.  Fixed a bunch of bugs in the
229         Freetype code with regard to vertical and horizontal 
230         positioning and bounding boxes.  Cleaned up a lot of the
231         code so it runs under -Wall.  Code that is still in 
232         development such as the polygon converter do not compile
233         cleanly.  Fixed the non antialiased versions of truetype
234         dump to image routines.  Also removed the FIXME for the 
235         hardcoding of antialias in the Imager string method.
236         Fixed sign error and a missing cache of the bounding box
237         calculation for the rasterize function.  Removed some
238         debugging code I forgot to remove.  Added iolayer.h
239         and iolayer.c but they don't do anything for now.
240         
241 0.35    pre2 -- No time yet
242           - Fixed some compile warnings for various files under -Wall.
243         Added functionality for jpeg reading of seekable files, it's not
244         really working yet.  This version is pretty much *not* working.
245         Do not install unless you intend to do a lot of development.
246         Repeat - it doesn't even pass tests (but it compiles).  Ok now reading
247         jpegs works from scalars, my guess is that it also works from non
248         seeking sources such as sockets or pipes.
249
250 0.35  pre3 - No time yet
251           - Added the *right* patch from Tony which combines
252         the common code from i_readgif and i_readgif_scalar into
253         i_readgif_low.  Added tiff reading support through iolayer.
254
255 0.35  pre4 - No time yet
256           - Added tiff writing (no options) support through
257         iolayer.  Also made some small fixes for the iolayer reading
258         (was always doing two reads when one was needed).  Patched the
259         Imager::read() call so that it now uses a mixture of old and new
260         functions.  
261
262 0.35  pre5 - No time yet
263           - Fixed various gnu'isms in the c code (some bugs in the link list
264         implmentation).  Fixed missing #skip codes when gif format is not
265         present in any form.  Added fixes for 5.004_04 in the transform2 function.
266         Made sure it compiles cleanly with sun's cc.  Switched from a .jpeg
267         for transform2 check to a .ppm file so it runs when jpeg is not 
268         present.  Added a test for tiff files in t10formats.t.
269
270
271 0.35  pre6 - No time yet
272           - Fixes to Makefile.PL.  Should find freetype includes on more
273         distributions now.  Ran tests on Solaris and Hpux, minor fixes.
274         Compiles with some warnings on with both hpux and solaris' cc.  
275         Made some minor changes to the documentation.  Fixes to tiff.c log
276         code.
277
278 0.35  pre7 - No time yet
279           - Fixes 64 bit bug on freebsd.  While libtiff mirrors the effects of
280         lseek it's toff_t is a uint32, while lseek uses off_t which can be a 64
281         bit quantity.  Added the IM_LFLAGS environment variable to help
282         people with broken libgifs (that want to link with X).
283
284 0.35  Sun Jan 28 19:42:59 EST 2001
285           - More makefile fixes, fixed a few signedness warnings.  
286         Checked to see if it compiled cleanly on Solaris and HPUX.
287         Fixed a 5.004_04 warning and added more ENV flags for makefile.
288
289 0.36    Mon Jan 29 09:36:11 EST 2001
290           - String as 0 or "" caused an error in $img->string().  Fixed a 
291         documentation error invoving string() method syntax.  Merged a patch
292         for non antialised truetype fonts.  Fixed an error in the Makefile.PL
293         which caused a makefile to be generated that bombed with sgi's make.
294
295 0.37    Mon Tue 30 09:36:11 EST 2001
296           - Several documentation fixes.  Pod documentation for almost every
297         function in image.c.  Added sys/types.h include in iolayer which was
298         causing problems on various linux systems.
299
300 0.38    pre1 - No time yet
301           - Fixed a braindamaged fix on the Makefile.PL file.  Moved the 
302         code for Imager::Color into lib/Imager/Color.pm.  Wrote some pod
303         about how it works.  Made the names of Imager::Color XS routines
304         all begin with ICL_ and used the prefix rules of XS to get nice names
305         in perl.  Found a bug (not fixed) in how XS handles 
306         returning an object to an object it had as a parameter (double
307         free).  
308
309 0.38    pre2 - No time yet
310           - Fixes lots of for documentation, patch for freetype bounding
311         box handling.  Split put code for Imager::Font into Font.pm and added
312         more documentation for Font.pm.  Added string local ascender and
313         descender for tt fonts.  Note that this needs to be added to t1 fonts
314         before 0.38 final.
315
316 0.38    pre3 - No time yet
317           - Fixed an in consistency in the bounding box functions for t1
318         fonts.  Now both versions get the 6 argument bounding_box method
319         described in Imager::Font.  Started converting the comments in 
320         font.c so that they are viewable by doco.perl.  Added two examples
321         of filters.  Need to make them more usefull and then add more
322         notes than are in compile.txt.
323
324
325 0.38    pre4 - No time yet
326           - Completed adding pod comments to font.c, tiff.c and iolayer.c.
327         Those along with image.c should now have every single function 
328         described in pod format.
329
330 0.38    pre5 - No time yet
331           - Replaced ppm.c with pnm.c which adds support for pbm/pgm/ppm
332         files ascii and binary formats.  Added patches for the gif routines.
333         Patched some of the color quantizing routines (Leolo and TonyC).
334         There is one bomb and one warning in this test, and frankly I don't
335         see why they are suddenly there.
336
337 0.38    pre6 - No time yet
338           - Patch from Tony that fixes infix when Parse::RecDescent is present.
339         Checked some cases where malloc/free were used instead of mymalloc/myfree.
340         Added bufchain iolayer code.  You can now write to a chain of buffers and
341         later slurp it all into a single perl scalar.  Found some oddity of t/t10
342         test not giving the right return value when malloc debugging was enabled.
343         Fixed some of the logging code and the malloc debugging options.  Added 
344         more tests for tiffs.
345
346 0.38    pre7 - No time yet
347           - Added i_gradgen code and put it into the filters hash.  Think a
348         seperate pod for filters would be a good idea.  Also removed some of the
349         debugging code from the iolayer.  Added pod comments to filters.c and
350         looked over the code.
351
352 0.38    pre8 - No time yet
353           - limited Win32 support, Imager installs and builds using VC++,
354         but there's no image/font format support yet.
355
356 0.38  pre9 - No time yet
357           - Added lots of color quantization code from Tony with benchmarks.
358         Also fixes ugly stack overrun in old version.  Added fixes for the lmfixed
359         problem.  Four of them, let's see which is fastest.  This version adds
360         some voronoi partitioning - it's dog slow but it's a reference implementation
361         to check if faster algorithms are doing the right thing [tm].  Added a check
362         for giflib 3.
363         - Win32 support for libpng
364         - fixed set_internal creating 2 refs to one object
365         - Win32 support for jpeg
366         - Win32 support for tiff
367         - base level error reporting code added, I still need to modify
368           older code to use it
369         - fix translate=>'giflib' handling of single-colour images.  
370           Previously a single colour image would cause an error in 
371           MakeMapObject().
372         - fix t/t10formats.t tests against giflib3
373         - added test for transparent gifs
374         - minor doc fixes for transparent gifs
375         - make it less error-prone to write transparent gifs
376         - documented the options for reading raw images
377         - Changes switched to use spaces for formatting
378         - switch gif.c to new error reporting with related changes to
379           Imager.xs, Imager.pm
380         - each of the image formats now have their own test file,
381           extracted from t10formats.t, usually with som extra tests
382         - Added flip() and docs to Imager.pm and i_flipxy to image.c.
383           Added testcases too.
384         - Fixed an overflow bug in png.c
385         - added the colors parameter to Imager::read() which receives 
386           the arrayref of colours that i_readgif(_scalar) returns
387         - fixed a problem in makemap_addi in quant.c where only the first
388           image was compared against the palette when the palette was being 
389           refined.  I screwed up on this originally (TC).  This is the other
390           half of a fix for Leolo's lmfixed problem <sigh>.
391         - makemap_addi() now only puts colours into the palette that it
392           found while optimizing the palette (so we don't get 256 colour
393           palettes for 2 colour images :)
394         - initial implementation of a row-based interface to low-level
395           images (for performance)
396         - changed Imager::read() for GIF so that the arrayref pointed to 
397           by the ref supplied in colors contains Imager::Color objects 
398           instead of more arrayrefs, keep this interface stable until we 
399           can make an informed choice about i_readgif()
400         - incorporated Micksa's faxable tiff support, treating as a type
401           of tiff rather than a separate format
402         - t/t70newgif.t now checks for gif support
403         - added the convert() method
404         - Added support for transparent to alpha conversion during loading
405           of png files.  Note that libpng 1.0.1 is broken in handling this,
406                 we know that 1.0.5 works.
407         - support for writing PGM (portable gray map) files
408         - Fix for i_gifread_low() for images with only a local and no global
409           colormap and an abort if no colormap is present (which is legal
410           in gif).
411         - several fixes to i_readgif_low()
412         - Fixed crop() method so that it is consistent with documentation.
413         - make clean now removes the testout directory
414         - added tests for the OO interface for tiff, added an option to
415           choose the resolution for fax tiffs, removed some unused code,
416           fixed minor problems with Imager::write() handling of image types
417         - changed README note on libgif bug to refer to t105gif.t instead
418           of t10formats.t
419
420 0.39  pre1
421         - split Imager::Font into a base, *::Type1 and *::Truetype
422         - writing faxable tiff now allows 2 and 4 channel images
423         - virtual image interface - 8-bit/sample images
424         - paletted images
425         - 16-bit/sample images
426         - masked images
427         - writing non-8bit images to raw
428         - writing   ''       ''   to tiff
429         - i_convert support for high-bit images and paletted images
430         - i_copy for high-bit and paletted images
431         - tests for rubthru
432         - rubthru can now rub a 2 channel image over a 1 or 3 channel 
433           image
434         - rubthru for high-bit images
435         - i_readgif_multi functions, which return all the frames from a
436           GIF file, along with a bunch of meta-information as tag
437         - OO interface to tags
438         - OO interface read_multi() to read multi-image files (just GIF
439           so far)
440         - documentation for the multi-image GIF reading and tags
441         - rotate() method with rotate by steps of 90 degrees (and docs)
442         - fixed a bug in i_img_pal_new_low()
443         - added gaussian to the filters list
444         - documented the individual filters
445         - fixed the right-hand side of bounding boxes for TT fonts 
446           where the last character overlaps the advance width (eg. 
447           italic fonts)
448         - added rotation by exact amounts in degrees or radians,
449           implemented using the matrix idea from Addi.  The procedural
450           matrix transformer is exposed, but still needs testing (as XS)
451           and needs an OO interface, hopefully with some helper tools,
452           like the preset interface with ->convert().
453         - MY::postamble() in Makefile.PL included a broken rule 
454           (Makefile.PL 1.13.2.5)
455         - support for GDI fonts under Win32
456         - made that work for cygwin too (needs the w32api package)
457         - freetype1 support under Win32
458         - t1lib support under Win32
459         - fixed a minor bug in font.c (invalid font files caused a SEGV)
460         - checked cygwin for both t1lib and freetype1
461         - freetype 2 support
462         - exposed the matrix_transform() function to the OO interface
463         - added Imager::Matrix2d convenience class
464         - support for setting the resolution when writing to PNG
465         - retrieve physical resolution to tags when reading from PNG
466         - found an XS bug in the interface to i_tags_add()
467         - fixed handling of writing text to a channel with freetype2 
468           (sometimes the edge of a character would damage the edge of the 
469           previous character)
470         - some utf8 support for freetype2
471         - some vertical layout support for freetype2
472         - named parameters for specifying colors, with quite a few options.
473         - glyph size issues for freetyp2
474         - minor problem in handling of canon option
475         - low-level bmp writing (moving it to laptop)
476         - Windows BMP reading and writing
477         - added OO interfaces for the mosaic, bumpmap, postlevels and
478           watermark filters
479         - added t/t61filters.t to test the filters
480         - fixed some problems in jpeg handling from the exp_represent merge
481         - fixed buffer flushing for wiol jpeg code
482         - added some tests that will hopefully catch it in the future
483         - added the OO interfaces to the mosaic, bumpmap, postlevels and
484           watermark filters, and documented them
485         - fixed a sample size conversion problem in i_gpixf_d() etc.
486         - added simple color representation conversion functions (used
487           in i_fountain().)
488         - added the fountain filter:
489           - creates gradients similar to paint software
490           - 90% support for GIMP gradient files
491           - OO interface and documentation
492           - Imager::Fountain for building/loading fill definitions
493           - named value translation for filters
494         - added a generic fill mechanism
495           - created versions of i_box() and i_arc() that can fill using
496             generic fills
497           - solid generic fills (with alpha blending if asked for)
498           - hatched generic fills (with some options)
499           - fountain generic fills
500           - sample code to generate an examples page
501         - improved the scale* hatches a bit
502         - add the flood_fill() method (using the existing i_flood_fill)
503         - implement i_flood_cfill() based on i_flood_fill, and 
504           add general fills to the flood_fill() method
505         - generalize the combine parameter to get different ways of 
506           combining the fill with the target
507         - the tt driver (freetype 1) didn't handle the first character
508           hanging off the left of the character cell
509         - the tt driver produces some artifacts when characters
510           overlapped
511         - error handling for writing jpeg images
512         - writing paletted images to GIF now uses the image palette
513           if it's small enough
514         - $img->arc() now calls i_circle_aa() if a complete circle is
515           being drawn in a plain color
516         - image based fills
517         - unsharp mask
518         - make i_conv() clamp the bottom end of the samples range too
519           (makes it useful for sharpening)
520         - adjust ascender/descender values for FT1.x to avoid losing
521           descenders (specifically the bottom of "g" in ImUgly.ttf or
522           arial.ttf at 14pixels)
523         - added tga.c to read targa images
524         - added i_bumpmap_complex to do more accurate bumpmapping
525         - added an image type with doubles as samples
526         - change i_copy() and i_sametype() to handle double/sample images
527         - added basic POD to trans2.c
528         - transform2 now uses the error interface
529         - myrealloc() is implemented for malloc debug mode
530         - now buffer chains are freed when destructor for Imager::IO
531           is called
532         - adjusted the Lanczos window width for the scaling code and
533           added code to normalize the filter generated to preserve
534           intensity scaling.
535         - constant edge extension for scaling operations
536         - better error checking of automatic fill conversions
537         - fix some range checking for the fountain fill segment type
538
539 0.39  pre2
540         - A few scattered mymalloc/free fixes
541         - io_buffer implemented as a source for io layer and
542           XS and perl OO code added.
543         - Test for iolayer t/t07iolayer.t implemented.
544         - Fixed known memory leaks.
545         - gif screen was wasn't being calculated correctly
546
547 0.39    Released: Nov 2 2001.
548
549 0.40  pre1
550         - anti-aliased polygon fill
551         - add general fill to polygon fill
552         - make color values smarter for the drawing functions
553         - implemented reading and writing the TIFF text tags
554         - added prototypes for some of the derivative tags functions
555         - read paletted tiff images into Imager paletted images
556         - on partial tiff image reads, set the i_incomplete tag
557         - tiff reading now uses the error stack
558         - use the error stack value from reading bmp files
559         - fix an error message in bmp.c
560         - added has_chars() method to Imager::Font::FreeType2
561         - freetype 2 bounding box function didn't know UTF8 (doh!)
562         - write paletted images as paletted to tiff
563         - initialize counter for packing 4 bit data
564         - don't allocate hashboxes as locals since it overflows the 
565           stack by default in Darwin
566         - applied T1 afm patch from Claes Jacobsson
567         - split IM_INCPATH and IM_LIBPATH with $Config{path_sep}, so they
568           work on Windows
569         - Added memory pools for easy cleanup of temp buffers
570         - Added read support for sgi .rgb files.
571         - io_new_fd() now creates a FDSEEK io object
572         - implemented i_readgif_wiol()
573         - Imager->read() now uses i_readgif_wiol();
574         - extend callback iolayers at C and Perl levels
575         - implemented i_writegif_wiol()
576         - split out Perl iolayer initialization into private methods
577         - add tests for each type of iolayer in t50basicoo.t
578         - read/write multi-image tiff files
579         - tests in t50basicoo.t for multi-image/file
580         - ASCII PBM files were reading white as dark gray (255 vs 1)
581         - modify the Freetype2 font code to pick it's own encoding
582           rather than using whatever strange translation FT2 happens to 
583           pick
584         - modify the FT1 font code to use the first encoding as a default
585           if we don't find a unicode encoding
586         - use the glyph bbox to calculate the glyph bitmaps for rendering
587           with FT1 rather than the global ascender/descender.  This helps
588           with fonts that have broken metrics.
589         - fix calculation of descender for FT2, it was calculating the
590           minimum decent rather than the maximum for the characters in 
591           the string
592         - didn't set default for bounding_box() utf8 parameter (caused a
593           warning when calling bounding_box() on a FT2 font with no utf8
594           parameter)
595         - Added lib/Imager/Draw.pod documentation of primitives.
596         - Added lib/Imager/Transformations.pod, some docs of simple transforms.
597         - Added lib/Imager/ImageTypes.pod, draft of ImageType pod.
598         - Added lib/Imager/Filters.pod, draft of Filters pod.
599         - Added lib/Imager/Engines.pod, draft of Engines pod.
600         - added getpixel() and setpixel() methods
601         - added Artur's OSX dlload() emulation, with minor changes
602         - modified _color() to work around a 5.6.0 bug
603         - replaced old gif options with tags
604         - we now log which memory block is being freed before giving 
605           an error on it being re-freed
606         - fixed stupid bug in deleting tags
607         - fixed minor pod errors involving &gt;
608
609 0.40pre2
610         - make t1log optional, defaulting to off.  You can enable the log
611           with Imager::init(t1log=>1) (Ticket #369)
612         - quote a few hash key strings to prevent warnings on 5.004
613         - modify quantization code to handle 1 channel images 
614           correctly (Ticket #365)
615         - make channel pointer to i_gsamp() const int * so we can pass
616           const arrays
617         - handle the presence of the default broken giflib better,
618           by giving them some more prose about the problem, and skipping
619           all but the first test that fails with the broken giflib
620         - i_box_cfill() went into an infinite loop on fountain fills
621           or fills on images with more than 8-bits/sample
622         - hide more of our Darwin dlload emulation to prevent runtime
623           symbol conflicts
624         - use INT2PTR() and PTR2IV() macros instead of direct casts to
625           prevent pointer vs int size warnings on 64-bit builds of perl.
626         - add our own INT2PTR and PTR2IV definitions when perl doesn't
627           supply them
628         - difference() method
629         - hide (with static) or rename many symbols that could possibly
630           cause conflicts with other libraries or perl
631         - Fix runaway cache problem for freetype1 font cache.
632         - Added version logging when log is started.
633
634 0.40
635         - difference() wasn't setting an alpha channel when the input
636           image didn't have one
637         - improve crop() documentation, see
638           http://perlmonks.org/index.pl?lastnode_id=155767&node_id=155428
639         - handle the first "buggy giflib" test more portably.  Previously
640           it used fork() which caused problems on systems that didn't have
641           a real fork().
642
643 0.41
644         - skip() in testtools should be skipn() and it should use the 
645           loop variable for the test number
646
647 0.42
648         - quote the 'min' parameter to scale in Imager::Transformations
649           and at least mention it in the docs beyond the examples
650         - document the values for the read() and write() method type 
651           parameter
652         - support UTF8 text with Freetype 1.x 
653         - second parameter to SvPV() must be of type STRLEN
654         - Doc pathces from cogent.
655         - Fixed out of bounds access on bitmap for flood fills.
656         - some char * vs unsigned char * casts missing on OSF1 v4.0
657         - some enums had , on the last item in datatypes.h, which OSF1
658           didn't like
659         - Compaq C 6.4 (OSF1) claims to be C99 but doesn't provide 
660           stdint.h, don't try to use it under OSF
661         - fix missing initialization in tags.c
662         - Change i_draw to i_line and have it use Bresenham's line
663           drawing algorithm.
664         - support has_chars() method for Freetype 1.x
665         - fixed log message for i_ft2_has_chars()
666         - fixed some broken checking for UTF8 in FT2 code
667         - handle UTF8 strings passed to T1 low-level functions
668         - handle flags for underline, strikethrough and overline for T1
669           low-level output functions
670         - OO interfaces to UTF8 and flags, for now leaving the flags as
671           specific to Imager::Font::Type1
672         - mc_web_map was storing colors with an alpha of 0
673         - update the URLs for libpng and zlib
674         - Fixed empty string handling for tt font driver.
675         - Fixed tiff handling of images all contained in a 
676           single strip (rowsperstrip = -1) and added a hack
677           for images missing the rowsperstrip tag.
678         - Fixed default parameters for crop()
679         - Added Preliminary specialized scaling code.
680         - Added image type detection.
681         - added smoke test for win32 font bounding_box() method, and
682           fixed the problem reported in ticket #1748.
683         - update t37w32font.t to use i_line() instead of i_draw()
684         - replaced non-portable call to rint() with (int)(dy+0.5) (so we
685           can build on Win32)
686         - the default tifflib warning handler was crashing on Win32
687           under ActivePerl, when an unrecognized tag was read from the 
688           file.  For now we'll just drop the warnings in the bit bucket.
689           (Ticket #1513)
690         - the code to read multiple tiffs didn't handle files with more
691           than five images correctly, causing a memory overrun.
692         - fix some minor test code hiccups
693         - implemented i_t1_has_chars(), tests for same
694         - added ExistenceTest.{pfb,afm,ttf} for testing $font->has_chars
695         - tests for Imager::Font::Type1::has_chars();
696         - tests for Imager::Font::Truetype::has_chars();
697         - internal and external bounding box calculations now use
698           the same hint flags as text output for Freetype 2.x
699         - made the i_foo_bbox() interface more expandable by using
700           symbolic constants for the sizes and array offsets
701         - added a / character to the ExistenceTest.foo fonts that 
702           overlaps the right side of the character cell, to test the 
703           advance width reporting.
704         - added advance width to the i_foo_bbox() interface, and 
705           implemented it for FT2, FT1 and Type 1
706         - Imager::Font::bounding_box() now returns an Imager::Font::BBox
707           object in scalar context.
708         - implemented $font->align() text output method, for simple output
709           of aligned text
710         - created Imager::Font::Wrap::wrap_text to perform simple text 
711           wrapping
712         - FT1, FT2 and T1 fonts now support the face_name method
713         - FT1, FT2 and T1 now support the glyph_names() method
714         - Debian woody supplied FT2.0.9, which didn't support 
715           FT_Has_PS_Names(), so we use the FT_HAS_GLYPH_NAMES() macro 
716           instead.
717         - some older FT1 don't define TT_MS_LANGID_ENGLISH_GENERAL,
718           which we use, define it if freetype doesn't.
719         - Added extra options to rubthrough() so only a subpart of
720           source image is used.
721         - the image fills didn't handle filling with source images of
722           less than four channels correctly
723         - added comment support the postfix transform2() expression
724           parser
725         - transform2() can now produce images with other than 3 channels.
726         - added a correct T_AVREF input mapping to the typemap to 
727           simplify parameter lists
728         - shut off one of the align subtests in the ft2 test.  The triggering
729           is likely an ft2 bug.
730         - removed some half written scaling optimization code.
731         - added /sw/lib and /sw/include to the Makefile.PL code for osX.
732         - removed all references to the www.eecs.umich.edu page and changed
733           them to imager.perl.org ones.
734
735 0.43
736         - added log() and exp() functions to transform2()
737         - change the getpN() functions in transform2() to set a 
738           reasonable alpha if the input image has no alpha
739         - document the constants that transform2() defines
740         - skip the right number of tests when FT2 isn't available
741         - This version pushed to CPAN because of skip problem in FT2 test.
742
743 0.43_01 Fri 8 Oct 2004
744         - only call FT_Get_Postscript_Name() on FT 2.0.6 and later
745         - put the IM_LIBPATH and IM_INCPATH values first in the search
746           path so the builder gets their local versions if desired rather
747           than the system versions they might be trying to avoid
748         - document the exp() and log() transform2() functions
749         - document the constants normally set by transform2().
750         - refer the user to appropriate documents in the example in 
751           Imager.pm
752         - change the list of documents in Imager.pm to move the document 
753           names out of the =item lines so we can make them into links
754         - the scale() method now produces a warning when called in
755           void context.
756         - font.c now only uses the defined T1Lib error codes
757         - update ppport.h and remove the duplicate definitions from
758           Imager.xs.  Had to mangle ppport.h to prevent duplicate global
759           function definitions.
760         - newer versions of tifflib require that all of the function
761           pointers passed to TIFFClientOpen be non-NULL, the mmap() and
762           munmap() pointers were always NULL and the sizeproc was
763           sometimes NULL.
764         - there would be a link or load time error on m_init_log() if
765           Imager was built with IM_NOLOG, fixed by renamed init_log()
766           to m_init_log() in log.c (thanks to Takumi Yamani)
767         - moved some variable definitions to the right place
768         - the Win32 font driver bounding box function now returns the 
769           right number of values (both thanks to Takumi Yamani)
770         - the Win32 font driver now uses DEFAULT_CHARSET rather than
771           ANSI_CHARSET are the lfCharSet value for the LOGFONT,
772           as suggested by Takumi Yamani.
773         - fontfiles/ExistenceTest.{pfb,ttf} weren't marked as
774           binary in the CVS repository (caused test failures if you
775           built from CVS on Win32)
776         - Makefile.PL should now handle INCLUDE or LIB with spaces in them
777           correctly on Win32.
778         - the pnm reader read maxval for ppm/pgm files and then ignored it,
779           it's now validated (0 < maxval < 65536) and used to scale
780           samples.  Note that binary ppm/pgm files (P6/P5) with maxval >
781           255 result in an error, since I didn't want to add new features
782           just yet, just get the code that's there working correctly.
783           Thanks to Elthek on rhizo for reporting this and help in 
784           tracking it down.
785           Resolves https://rt.cpan.org/Ticket/Display.html?id=7465
786         - added a bunch of tests for reading pnm files.
787         - previously, if you supplied to_paletted and empty color map
788           and set make_colors to 'none', quant_translate() would segfault.
789           This was because it was making the reasonable assumption that
790           you'd have colors to map to.  quant_translate() now checks there
791           is at least one color and return NULL if there isn't.
792         - i_img_to_pal() now does error checking of the value returned by
793           quant_translate().
794         - Imager::to_paletted() now checks for success/failure of 
795           i_img_to_pal() correctly and does appropriate error handling.
796         - i_writegif_low() did no error checking on the result of
797           quant_translate(), it now does
798         - we now test that trying to write a GIF image with no palette
799           allowable by the quant options is a failure.
800         - Imager::write() was doing nothing with the result of the call 
801           to i_writegif_gen(), in particular it wasn't returning () on 
802           failure.
803         - added tests for paletted image handling and the methods
804           specific to those images
805         - the XS for i_setcolors() was missing the OUTPUT clause for
806           RETVAL, and hence wasn't returning failure on failure.
807         - supplying a sufficiently small scaling value could make the
808           scale() method return an image with zero height or width.
809           Several of the above together resolve 
810           https://rt.cpan.org/Ticket/Display.html?id=7467
811         - the void context warning for scale() now includes the callers
812           filename/line (instead of the default of Imager.pm line 15xx)
813         - Imager->new will now return undef if the dimensions or number of
814           channels specified for an image are out of range.  An error
815           message can be retrieved with Imager->errstr.
816         - added the C<builtin> color specifier and the 
817           Imager::Color::Table class which defines those colors.
818           Resolves https://rt.cpan.org/Ticket/Display.html?id=2593
819         - added the equals() method to Imager::Color.
820           Resolves https://rt.cpan.org/Ticket/Display.html?id=2238
821         - prevent a test warning introduced by the above
822         - the rotate() and matrix_transform() methods now accept a 'back'
823           parameter specifying a background color.  This is only used
824           where there is no source data (think of the corners around an
825           image rotated 45 degrees) and it not combined with transparent
826           pixels from the source image.
827           Resolves https://rt.cpan.org/Ticket/Display.html?id=6140
828         - removed a warning generated by the new matrix_transform() test
829         - added a method index to Imager.pm
830         - corrected "flood fill" to "flood_fill" in Imager/Draw.pod
831         - removed compose() method from Imager/Transformations.pod since
832           it isn't implemented yet
833         - the image resulting from a crop is now the same type as the
834           source image (paletted vs direct, bits/sample)
835           Resolves https://rt.cpan.org/Ticket/Display.html?id=7578
836         - the parameters to crop() weren't handled correctly in most 
837           cases other than supplying left,top,right,bottom.
838         - clarified the documentation for crop() providing more detail
839           and more examples
840         - the edges of the cropped area are now cropped against the 
841           edges of the source image
842         - cropping to zero width/height is treated as an error (no
843           image is returned and $src->errstr has a message)
844           Resolves https://rt.cpan.org/Ticket/Display.html?id=7581
845         - built 0.43_01 for testing
846
847 0.43_02 Mon 26 Oct 2004
848
849 - the changes to scale() had some problems with integer vs floating point
850   calculations (only caught in tests under perl 5.8.5 <sigh>)
851 - the FT2 glyph_names() method didn't do correct error handling
852   when the string parameter wasn't supplied
853 - i_ft2_glyph_name() accepted only an unsigned char as the
854   character code to get the name for, which meant it
855   didn't work for unicode characters \x{100} or above
856 - the XS for i_ft2_glyph_name() had a similar problem
857 - added NameTest.ttf to be used in checking unicode glyph
858   names
859 - added reliable_only optional parameter to the glyph_names()
860   method so you can ignore theresult of FT_Has_PS_Glyph_Names()
861 - handle errors given by i_ft2_glyph_name() a bit more
862   correctly
863 - the FT1 glyph_names() method didn't do correct error handling 
864   when the string parameter wasn't supplied
865 - some memory allocated when creating a callback IO object (io_new_cb)
866   wasn't being released (detected with valgrind)
867 - the testtools.pl match[nx]() functions escapes the test string on 
868   test failure a bit better
869 - the XS code for i_tt_glyph_name() used unsigned char to store a 
870   unicode character when it should have used unsigned long.
871 - the XS code for i_t1_glyph_name() used unsigned char to store a 
872   unicode character when it should have used unsigned long.
873 - resolves https://rt.cpan.org/Ticket/Display.html?id=7949
874 - the type 1 glyph_names() method didn't do correct error handling 
875   when the string parameter wasn't supplied
876 - renamed io.h to imio.h to prevent problems building under cygwin.
877   resolve https://rt.cpan.org/Ticket/Display.html?id=7948
878 - i_writegif_low() wasn't setting the returned global palette, which
879   meant a rubbish palette was returned to the user (detected with valgrind)
880 - built 0.43_02 for testing
881
882 0.43_03
883
884 - change the "double-include" protection macro that imio.h uses.
885 - updated download locations for the various libraries that Imager 
886   depends on.  Added some advice for cygwin.
887 - more information on gif library versions in README and Makefile.PL
888 - creating an image where the size of the allocated image buffer would
889   overflow an integer would cause too small a buffer to be allocated.
890   This could potentially be a security hole.
891   partly resolves https://rt.cpan.org/Ticket/Display.html?id=8213
892 - set i_format to jpeg for jpeg files and test for it
893 - set i_format to png when reading png files and test for it
894 - i_yres was being set to the xres when reading a png file
895 - added many bad BMP files to test various code paths in bmp.c, and 
896   made many minor fixes to bmp.c to make them work:
897   - it was possible for various types of read failures to SEGV, both
898     as NULL pointer dereferences and buffer overflows
899   - some errors, like palettes being too large for the number of bits
900     per pixel, were not being caught
901   - failing to read all of a packed data structure would not cause
902     a read failure
903   - invalid compression types were not always caught
904   - error messages are more consistent (still not always great messages,
905     but one step at a time)
906 - added bmp_compression_name, bmp_used_colors, bmp_filesize, bmp_bit_count 
907   tags on reading a BMP file
908 - added tools/imager to the distribution.  This is still very 
909   experimental and untested.  Patches welcome, if you write tests to go
910   with them.
911 - the BMP reader now validates the bfOffBits value from the BMP header
912   and skips to that offset before reading image data.  Previously this
913   value was read but otherwise ignored.
914 - added --palette action to tools/imager
915 - i_img_pal_new() now releases the image object memory if creation
916   fails.
917 - set i_format to gif when reading gif files and test for it
918 - set i_format to pnm when reading pnm files and test for it
919
920 =================================================================
921
922         For latest versions check the Imager-devel pages:
923         http://imager.perl.org/
924
925 =================================================================
926