- tools/imager has been removed from the MANIFEST, it's way too late
[imager.git] / TODO
CommitLineData
b921d414 1 *** TODO ***
b921d414 2
403946c6
TC
3PRE-0.44:
4- set i_format for every file type on read and test for it:
5 - bmp - done
6 - jpeg - done
8c3af7b3 7 - tiff - done
fe055ff6 8 - tga - done
403946c6
TC
9 - rgb
10 - png - done
642a675b
TC
11 - gif - done
12 - pnm - done
f771d0ec 13 - raw
403946c6 14- check each file reader for possible integer overflows
8c3af7b3 15 - bmp - done
403946c6
TC
16 - tiff
17 - tga
18 - rgb
19 - png
20 - gif
21 - pnm
22- check bmp code uses image data offset correctly - done
f771d0ec 23- check quant code for integer overflows - done
403946c6
TC
24- check for old URLs (umich and imager.perl.org/~addi/...)
25
b921d414
AMH
26Iolayer:
27- Add scalar/mmap to iolayer
a106216b 28- Add close() code to iolayer for fakeseek sources.
b921d414 29- Merge callback interface into iolayer
a106216b
AMH
30- and raw
31- Implment the maxread threshold (Indicates how much can
32 be read from a source before it stops reading from its
33 underlying source. For making sure only the relevant
34 data is read from a socket for example.
35
b921d414 36
b921d414
AMH
37Enhanched internal structure:
38
39MultiImage & metadata support:
40- Figure what interface should be between C and perl?
41- How to store data in the C interface for tags/metadata?
42 Support tiff's madness, i.e. tags and options.
43- Error handling, make a general i_errstr object and arrange
44 such that each image has an i_errstr object to hold its
45 local errors?
46- SEE design/represent.txt for proposed new structure and
47 interface design that takes these factors into account.
faa9b3e7
TC
48- define common i_* tags for specifying attribute common among images
49 like spatial resolution (implement for other image types, especially
10461f9a
TC
50 TIFF) (Spatial resolution is supported for all types that support
51 it - are there any other common properties we can add?)
faa6fa9b 52- implement the i_incomplete tag for other formats
b921d414
AMH
53
54New Features:
a106216b 55- Add mng support, pcx and aalib support.
13db6021
TC
56 - Windows icon files (.ico)
57 - ILBM (Amiga) images
58 - photoshop files (I think I've seen docs)
59 - XBM
60 - FITS
61 - WMF (extract bitmap data on read)
62 - gzip or bzip2 compressed raw
10461f9a 63 - postscript for output
ee6f9750 64 - PAM file support (man pam in recent PNM tools)
5f5fe73e 65
b921d414
AMH
66- Transforms, interpolated multidimensional lookup tables.
67 Usefull for CMYK <-> RGB table lookup.
68
a106216b 69- advanced font layout (spacing, kerning, alignment) (Artur?)
faa9b3e7 70
bf9dd17c 71- ways to check if characters are present in a font, eg. checking if
9c5ed9a7 72 ligatures are present (done for FreeType2)
bf9dd17c 73
faa9b3e7
TC
74- font synthesis - synthesize a bold or slanted font from a normal font
75 (or even from an existing bold or slanted font)
bf9dd17c 76
faa9b3e7 77- utf8 support for text output
9a71bc09 78 (available for FT1, freetype2, should be easy for Win32)
c855ad0e
TC
79
80- easy interfaces for text output:
81 - align text around point, including:
82 - left, center, right horizontal alignment
83 - top, center, baseline, bottom alignment
84 - choose whether to base alignment upon character cells or font
85 metrics to avoid spacing problems between lines
86 - fill a box from text, with newline handling
87 - an option to just return the information that would be used to
88 output the text, so it can be used for sizing calculations
89 - how much text fit in the box/how much space is left in the box
90 - fill a box with rich text (size and font changes)
91 - as above
92 - wrapping around boxes/images
93 - pod2Imager :)
94
95- tools to get more information about fonts/characters:
96 - name of font "Arial Bold Italic" vs "arialbi.ttf"
97 - ABC widths for characters (currently the only way to get the C width
98 for a character is to get the width with a following space and without
99 and then compare)
100 - character names
101
102- encodings for text output (maybe using the Encode module to work
103 between encodings)
faa9b3e7
TC
104
105- image rotation, 3 ways of doing rotation:
faa9b3e7
TC
106 - rotation by shearing, which produces makes lengths in the image larger,
107 but could be useful
a010a7d3 108 (2 of the 3 have been done)
faa9b3e7 109
9c5ed9a7
TC
110- read_multi() needs to handle other multi-image types,
111 (handles TIFF and GIF)
b921d414 112
9c5ed9a7 113- write_multi() to save other multi-image types, (handles TIFF and GIF)
8b695554 114 - pnm binary formats support multiple images per file
f62b2d84 115
362e7486
TC
116- compose channels - build a new image based on channels from several
117 images
118
da77e827
TC
119- arc outlines
120
9a71bc09
TC
121- complex lines/curves:
122 - thick lines:
123 - dotted/dashed lines
124 - doubled lines?
125 - end-point controls (butt-end, square-end, round-end, pointy, arrows)
126 - brush-lines (as with the Gimp, or Photoshop)
127 - more complex with multiple strokes and various randomness as with
128 Fractal Design Painter (or later versions of Corel Photo Paint)
129 - complex line shapes:
130 - lines
131 - general curves (cubic or bezier, whichever is more general)
132 - easy access to general curves:
133 - points to make a nice curve from
134 - various circular curves (centre, radii, start/end angles,
135 direction)
136 - Complex thick lines are probably more useful than brush-lines for
137 the things I expect Imager to be used for.
138 - http://www.develop-help.com/imager/strokes.png (.jpg for smaller version)
139
ea9e6c3f
TC
140- have Imager::Color{::Float}? use Graphics::ColorNames if present.
141
b921d414
AMH
142Clean up:
143- Make sure everything is doable with the OO interface
5f5fe73e 144 i_flood_fill() for example.
45a1d9d2 145 - include low-level functions like gsamp() and so on
f1ac5027 146
b921d414
AMH
147- Compile with memory debugging enabled and fix all leaks
148
a106216b 149- Add mycalloc() memory allocation wrappers.
b921d414
AMH
150
151- should we overload <=> or cmp for Imager::Color objects?
152 too many worms, leave it out
153
154- should the interlace option for reading raw images have
155 symbolic names in the OO interface?
156
f2bc9b80
TC
157- improve consistency in the interfaces, both in trying to use named
158 parameters where possible but also in using consistent names, eg.
159 (tx, ty) vs (left, top) in rubthrough() vs paste(). Do we want a (simple)
160 standard for this (suggested names)? Remember to preserve the old
161 interface where possible.
b921d414 162
c855ad0e
TC
163- try to clean up the inconsistencies between font types:
164 - utf8 (even if we just treat characters over 0xFF as missing for T1)
3799c4d1 165 (done for FT2, FT1, T1)
eeaa33fd 166 - transformations (done for FT2)
3799c4d1 167 - has_char() method (done for FT2, FT1, T1)
c855ad0e 168
b921d414 169Format specific issues:
b921d414
AMH
170- provide patches for libgif and libungif that fix their bugs
171 and give a useful extension interface. Probe for the
172 installation of the patches in Makefile.PL to let gif.c
173 know what features it can use.
174
a106216b 175- Add options for pnm writer to save in any of the p1..P6
b921d414
AMH
176 formats. Even if the input has 1 channel, write 3 and such
177 cases. Also allow ascii mode. Need to be able to write
178 pbm images which needs ties to the quantization code.
179
a106216b 180- save paletted images as paletted where that's supported. Done
f62b2d84 181 for gif/tga/bmp/tiff. Not done for png yet.
f873cb01 182
a106216b 183- read other format paletted images as paletted images. This has
f62b2d84
TC
184 been done for gif/tga/bmp/tiff formats but not for png.
185
186- read/write 16-bit/sample images as such for tiff
27d9683e 187
faa6fa9b
TC
188- read more metadata from images, esp tiff tags, EXIF format information
189 from TIFF and JPEG.
190
7ac6a2e9
TC
191- handle 16-bit/sample pgm/ppm files
192
b921d414
AMH
193Documentation:
194- Add to the documentation
195- Write a tutorial?
faa9b3e7
TC
196- sample code and Imager/Samples.pod describing them
197- Imager/Cookbook.pod
b921d414
AMH
198- Write a guide to installing the helper libraries
199- Go through the entire project and add comments in pod
200 so doco.perl can be used to read them.
faa6fa9b 201- see the IRC log in design/doclayout.txt
6d0ed98a
TC
202- method index?
203- concept index?
ea9e6c3f
TC
204
205Build/configure:
206- use prompt() (from ExtUtils::MakeMaker) for questions in Makefile.PL
207- use the library's mechanism's to find the library if needed, for
208 example, freetype-config for FT2
209- the freetype2 library is built as "freetype.lib" on Win32 and needs
210 to be renamed to be found by the configuration process and included
211 with -lfreetype. Try to work around that.
212- freetype2 and freetype1 tend to be installed in /usr/include/freetype2
213 and /usr/include/freetype directories, or similarly named (somedir/freetype
214 for example), instead of putting these directly into the search path
215 search for the freetype{2}?/someheader and then add the subdirectory if
216 we find the file in that directory.
7ac6a2e9 217- switch to Test::More