*** TODO ***
-
+Release Plans (subject to change)
+-------------
+
+brown-bag bugs may add intermediate releases. The dates are goals,
+not commitments.
+
+0.45: (march 2005?)
+- audit pnm.c
+- audit tga.c
+- audit rgb.c and add tests
+- capture TIFF read warnings (i_warnings tag?) (done)
+- add Imager::Cookbook with at least 5 recipes
+- implement i_incomplete for bmp files
+- store floating point tags in an appropriate precision (done)
+- allow image creation to fail on malloc() failure for the image data
+ rather than aborting. The current behaviour could be a denial of
+ service attack. This has limited utility because of the way memory
+ over commitment works on Linux (reverted)
+- eliminate unused variable warning (especially the RETVAL ones in Imager.xs)
+ (done)
+- add META.yml (bypass EU::MM's limited mechanism)
+- check if freetype 2 is faster/slower than freetype 1 with Imager's glyph
+ caching. If FT1 is faster, add caching as a TODO for FT2.
+- handle probing for libraries better (use pkg-config or I<library>-config
+ where possible (freetype2 and libpng)) (done)
+- add concept index to Imager.pm pod (done, still working it)
+- replace testimg/penguin-base.ppm with a smaller image
+- add a sample CGI HTML and image generation scripts that work together,
+ with appropriate security management
+- examples for fountain filter in Imager::Filters
+
+0.46: (june 2005)
+- allow limits to be set on the size of an image read from a file. This is
+ to prevent an attacker supplying huge images that consume all of
+ memory causing a denial of service attack.
+- add Imager::Tutorial (see Tk::UserGuide for a structure)
+ don't cover installation - belongs in README or INSTALL
+ it doesn't need to cover everything - read/write/create/simple drawing
+ and simple text - other stuff belongs in the cookbook or in sample code
+- add 5 more recipes to Imager::Cookbook
+- implement gsamp()/gsampf()/plin() etc methods for those low level image
+ interfaces which don't yet have methods.
+- implement i_incomplete for png and gif files.
+
+Speculation
+-----------
+
+Some of what's listed below has been implemented.
+
+- should i_incomplete be optional? ie. reading a short image results in
+ an error unless the user requests incomplete images.
Iolayer:
- Add scalar/mmap to iolayer
-- Add close() code to iolayer
+- Add close() code to iolayer for fakeseek sources.
- Merge callback interface into iolayer
-- Add interface for writing to all formats but tiff
-- Add interface for reading for png (started),
- gif (merge with cb patch), ppm and raw
-- Add new tests once all formats support io_layer
-- Implment the maxread threshold (Indicates how far
- a library can read before it indicates that it's done).
-
-BUGS:
-- at smaller point sizes (14 pixels) the bottom of a g can be
-lost (using the arial or ImUgly font)
+- and raw
+- Implment the maxread threshold (Indicates how much can
+ be read from a source before it stops reading from its
+ underlying source. For making sure only the relevant
+ data is read from a socket for example.
Enhanched internal structure:
interface design that takes these factors into account.
- define common i_* tags for specifying attribute common among images
like spatial resolution (implement for other image types, especially
- TIFF)
+ TIFF) (Spatial resolution is supported for all types that support
+ it - are there any other common properties we can add?)
+- implement the i_incomplete tag for other formats
New Features:
-- Add mng support.
+- Add mng support, pcx and aalib support.
+ - Windows icon files (.ico)
+ - ILBM (Amiga) images
+ - photoshop files (I think I've seen docs)
+ - XBM
+ - FITS
+ - WMF (extract bitmap data on read)
+ - gzip or bzip2 compressed raw
+ - postscript for output
+ - PAM file support (man pam in recent PNM tools)
- Transforms, interpolated multidimensional lookup tables.
Usefull for CMYK <-> RGB table lookup.
-- Finish antialiased filled polygon function.
-
-- advanced font layout (spacing, kerning, alignment) (sky)
+- advanced font layout (spacing, kerning, alignment) (Artur?)
- ways to check if characters are present in a font, eg. checking if
- ligatures are present
+ ligatures are present (done for FreeType2)
- font synthesis - synthesize a bold or slanted font from a normal font
(or even from an existing bold or slanted font)
- utf8 support for text output
- (available for freetype2)
+ (available for FT1, freetype2, should be easy for Win32)
+
+- easy interfaces for text output:
+ - align text around point, including:
+ - left, center, right horizontal alignment
+ - top, center, baseline, bottom alignment
+ - choose whether to base alignment upon character cells or font
+ metrics to avoid spacing problems between lines
+ - fill a box from text, with newline handling
+ - an option to just return the information that would be used to
+ output the text, so it can be used for sizing calculations
+ - how much text fit in the box/how much space is left in the box
+ - fill a box with rich text (size and font changes)
+ - as above
+ - wrapping around boxes/images
+ - pod2Imager :)
+
+- tools to get more information about fonts/characters:
+ - name of font "Arial Bold Italic" vs "arialbi.ttf"
+ - ABC widths for characters (currently the only way to get the C width
+ for a character is to get the width with a following space and without
+ and then compare)
+ - character names
+
+- encodings for text output (maybe using the Encode module to work
+ between encodings)
- image rotation, 3 ways of doing rotation:
- rotation by shearing, which produces makes lengths in the image larger,
but could be useful
(2 of the 3 have been done)
-- read_multi() needs to handle other multi-image types, such as TIFF
- (probably the most common)
+- read_multi() needs to handle other multi-image types,
+ (handles TIFF and GIF)
+
+- write_multi() to save other multi-image types, (handles TIFF and GIF)
+ - pnm binary formats support multiple images per file
- compose channels - build a new image based on channels from several
images
-- filled polygons
-
- arc outlines
+- complex lines/curves:
+ - thick lines:
+ - dotted/dashed lines
+ - doubled lines?
+ - end-point controls (butt-end, square-end, round-end, pointy, arrows)
+ - brush-lines (as with the Gimp, or Photoshop)
+ - more complex with multiple strokes and various randomness as with
+ Fractal Design Painter (or later versions of Corel Photo Paint)
+ - complex line shapes:
+ - lines
+ - general curves (cubic or bezier, whichever is more general)
+ - easy access to general curves:
+ - points to make a nice curve from
+ - various circular curves (centre, radii, start/end angles,
+ direction)
+ - Complex thick lines are probably more useful than brush-lines for
+ the things I expect Imager to be used for.
+ - http://www.develop-help.com/imager/strokes.png (.jpg for smaller version)
+
+- have Imager::Color{::Float}? use Graphics::ColorNames if present.
+
Clean up:
- Make sure everything is doable with the OO interface
i_flood_fill() for example.
+ - include low-level functions like gsamp() and so on
- Compile with memory debugging enabled and fix all leaks
-- dynaload.c is strongly tied to perl
-
-- Add mycalloc() and myrealloc() to the malloc() wrappers.
+- Add mycalloc() memory allocation wrappers.
- should we overload <=> or cmp for Imager::Color objects?
too many worms, leave it out
standard for this (suggested names)? Remember to preserve the old
interface where possible.
+- try to clean up the inconsistencies between font types:
+ - utf8 (even if we just treat characters over 0xFF as missing for T1)
+ (done for FT2, FT1, T1)
+ - transformations (done for FT2)
+ - has_char() method (done for FT2, FT1, T1)
+
Format specific issues:
- provide patches for libgif and libungif that fix their bugs
and give a useful extension interface. Probe for the
installation of the patches in Makefile.PL to let gif.c
know what features it can use.
-- Add options for pnm, writer to save in any of the p1..P6
+- Add options for pnm writer to save in any of the p1..P6
formats. Even if the input has 1 channel, write 3 and such
cases. Also allow ascii mode. Need to be able to write
pbm images which needs ties to the quantization code.
-- pcx and targa image formats
+- save paletted images as paletted where that's supported. Done
+ for gif/tga/bmp/tiff. Not done for png yet.
-- aalib support
+- read other format paletted images as paletted images. This has
+ been done for gif/tga/bmp/tiff formats but not for png.
-- save other formats as paletted for paletted where that's supported
+- read/write 16-bit/sample images as such for tiff
-- read other format paletted images as paletted images
-
-- have jpeg.c write 2 or 4 channel images as 1 or 3 channels respectively
+- read more metadata from images, esp tiff tags, EXIF format information
+ from TIFF and JPEG.
+- handle 16-bit/sample pgm/ppm files
Documentation:
- Add to the documentation
- Write a tutorial?
- sample code and Imager/Samples.pod describing them
- Imager/Cookbook.pod
-- modify the .pm files to put pod describing a function close to the
- function
- Write a guide to installing the helper libraries
- Go through the entire project and add comments in pod
so doco.perl can be used to read them.
+- see the IRC log in design/doclayout.txt
+- method index?
+- concept index?
+
+Build/configure:
+- use prompt() (from ExtUtils::MakeMaker) for questions in Makefile.PL
+- use the library's mechanism's to find the library if needed, for
+ example, freetype-config for FT2
+- the freetype2 library is built as "freetype.lib" on Win32 and needs
+ to be renamed to be found by the configuration process and included
+ with -lfreetype. Try to work around that.
+- freetype2 and freetype1 tend to be installed in /usr/include/freetype2
+ and /usr/include/freetype directories, or similarly named (somedir/freetype
+ for example), instead of putting these directly into the search path
+ search for the freetype{2}?/someheader and then add the subdirectory if
+ we find the file in that directory.
+- switch to Test::More
+- change headers to use more unique re-include protection macros
+
+Old release checklists
+----------------------
+
+0.44: (december 2004)
+- set i_format for every file type on read and test for it:
+ - bmp - done
+ - jpeg - done
+ - tiff - done
+ - tga - done
+ - rgb - no read function anyway
+ - png - done
+ - gif - done
+ - pnm - done
+ - raw - done
+- check each file reader for possible integer overflows
+ - bmp - done
+ - tiff
+ - tga
+ - rgb
+ - png
+ - gif
+ - pnm
+- check bmp code uses image data offset correctly - done
+- check quant code for integer overflows - done
+- check for old URLs (umich and imager.perl.org/~addi/...) - done
+