0.60 release
[imager.git] / TODO
CommitLineData
b921d414 1 *** TODO ***
b921d414 2
b8a4504c
TC
3Release Plans (subject to change)
4-------------
5
6brown-bag bugs may add intermediate releases. The dates are goals,
7not commitments.
8
f84316db 9For 0.60 (hopefully):
ff9c73e9 10
f84316db 11RGB file support (#8666) (done)
ff9c73e9 12
f84316db
TC
13convert() doesn't preserve sample size (#28492) (done)
14
c6828fe4 15be explicit that scale*() doesn't modify the source (#28570) (done)
f84316db 16
baa880ef
TC
17repeated text in Imager::Files (#27589) (done)
18
0561d49c
TC
19error message when loading an unsupported font format is confusing (#27571) (done)
20
d8a39ce0
TC
21enable transparency by default for gif (#27615) (done)
22
5730d6e7 23Imager doesn't load on Windows 98 (#27653) (done)
f84316db 24
4c29ae1e 25new color counting code (#28142) (done)
f84316db 26
f84316db
TC
27sample: scaling an animated gif (#27591)
28
4c29ae1e
TC
29test getcolorcount() (done)
30
a1bd2523 31do a compiler warning clean up run (done)
4c29ae1e
TC
32
33change the ico/cur reader to apply the mask as an alpha channel by
a1bd2523 34default (#29001) (done)
4c29ae1e 35
f7f08473 36For 0.58:
ff9c73e9 37
d034a178 38rgb.txt search (and testing) (#26064) (done)
ff9c73e9 39
8062ca13 40guassian blur radius (#25645) (done)
ff9c73e9 41
8f37efaf 42text rendering FT1 (#11972) (done)
ff9c73e9 43
8f37efaf 44text rendering T1 (#11972) (done)
ff9c73e9 45
f7f08473
TC
46For 0.57
47
48BMP security fix only
49
22709d92
TC
50For 0.56:
51
a4947da7 52checking testing of new ft2 rendering (done)
22709d92
TC
53
54possibly: use renderer on other fonts
55
21dd0ebb 56check testing of new ppm input (done)
22709d92 57
21dd0ebb 58check testing of new ppm output (done)
22709d92 59
fcd96ade 60check lbr's font output issue (done)
22709d92 61
21dd0ebb 62tests for monochrome makemap (done)
22709d92 63
467d3274
TC
64correct handling of old Data::Dumper (#24391) (done)
65
052acec4 66fix unsharpmask documentation (#25531) (done)
467d3274 67
052acec4 68work around compiler bug on OS X (#25561) (done)
42feef3b 69
d93c7764
TC
70BEFORE 0.54
71
4cda4e76 72OO interface for i_plin/i_glin (done)
d93c7764 73
4cda4e76 74remove gif query from makefile.pl (done)
d93c7764
TC
75
76fallback for read/write_multi to read/write
77
658f724e 78pnmscale based alternative scale method (done)
d93c7764 79
ea1ecfee 80rubthrough 4 on 4 (done)
d93c7764 81
485cab1c 82replace dummy test script in dynfilt with a real one (done)
658f724e 83
03a9e7a4
TC
84BEFORE 0.50:
85
86skip t82inline.t tests if directory has spaces in name
87
88integrate pod coverage tests
89
90rework iolayers
91
92add .ico support
93
94note lack of IRC support
95
96document parseiptc()
97
8d89b19c
TC
98BEFORE 0.48:
99
135d30e3 100scale() fixes/docs, Imager::Transformations going over. (done)
8d89b19c 101
135d30e3 102do some more malloc checks (done)
8d89b19c 103
135d30e3 104scan $Config{libspath} for directories if we can. (done)
8d89b19c 105
4b23a851
TC
1060.47:
107
108- more documentation (and corresponding code cleanup)
109
110- external C API access
111
112- hooks for file reading/writing
113
114- hooks for font types
115
116- hooks for filters
117
118- hooks for fills
119
120- filter pre-processor for handling both image access methods
121
122- move existing loadable filters into separate sub-directories
123
124- write Imager::SDL
125
126- maybe Imager::Tk::Photo
127
8d89b19c 128
ee5d34a5 1290.46: (September 2005)
106844eb 130
7a8f05fb
TC
131- check remaining memory allocation calls for integer overflows
132 http://rt.cpan.org/NoAuth/Bug.html?id=8213
ad809a28
TC
133 - check *alloc() calls
134 - check llist_push() calls
7a8f05fb
TC
135
136- fix Imager::Color warning when $ENV{HOME} isn't set from
77157728 137 _get_gimp_color() (done)
7a8f05fb
TC
138 http://rt.cpan.org/NoAuth/Bug.html?id=13143
139
77157728
TC
140- module version numbers (done)
141 http://rt.cpan.org/NoAuth/Bug.html?id=13047
7a8f05fb 142
b8a4504c
TC
143- allow limits to be set on the size of an image read from a file. This is
144 to prevent an attacker supplying huge images that consume all of
77157728 145 memory causing a denial of service attack. (done)
106844eb 146
7a8f05fb 147- implement gsamp()/gsampf()/plin() etc methods for those low level image
f75c1aeb
TC
148 interfaces which don't yet have methods. (done)
149 - code (done)
150 - test (done)
151 - document (done)
7a8f05fb 152
985bda61 153- add Imager::Tutorial (see Tk::UserGuide for a structure) (done)
b8a4504c
TC
154 don't cover installation - belongs in README or INSTALL
155 it doesn't need to cover everything - read/write/create/simple drawing
156 and simple text - other stuff belongs in the cookbook or in sample code
106844eb 157
1611d101
TC
158- rename lib/Imager/Cookbook.pm to lib/Imager/Cookbook.pod (done)
159
b8a4504c 160- add 5 more recipes to Imager::Cookbook
106844eb 161
b8a4504c 162- implement i_incomplete for png and gif files.
106844eb 163
1a19d068
TC
164- documentation audit, check:
165 - every method has at least one example, but if the method is complex
166 (like transform2, to_paletted, string() for example) it should include
167 a range of examples
168 - check each method description to ensure it's reasonably clear.
169 - check POD sections (SEE ALSO in particular)
84960c16 170 - multiple examples for writing GIF images.
75237d28
TC
171 - name arguments and use those names in the documentation
172 http://nntp.perl.org/group/perl.perl5.porters/102434
77c06476 173 (#1521, #5608, #8231, #11429, #13058(done))
106844eb 174
f1adece7 175- have $img->read() act like ($img) = Imager->read_multi() on GIFs (done)
84960c16 176
ad809a28
TC
177- figure out what the nearest_color filter does, and document it
178
f75c1aeb 179- remove image.h dependency on t1lib.h (done)
ca4d914e
TC
180
181- make sure dynfilt/Makefile.PL gets the same includes that
182 Makefile.PL does.
183
84960c16
TC
1840.47:
185
186- rework handling of antialiasing and other transparency against
187 transparent images
188
189 Places to check:
190 - text AA rendering
191 - AA line drawing
192 - anything that uses combine (fills in particular)
193 - image scaling? and matrix_transform()'s interpolation
194 http://rt.cpan.org/NoAuth/Bug.html?id=11972
195
08b5cf78
TC
1960.48:
197
198- fill out handling of large sample (16/double per sample) images
199 - filters
200 - rendering:
201 - lines
202 - text
203 - boxes
204 - polygons
205 - engines
206 - matrix transform
207 - transform()
208 - transform2()
209 - files:
210 - png
211 - tiff
212 - pnm
84960c16 213
b8a4504c
TC
214Speculation
215-----------
216
217Some of what's listed below has been implemented.
218
219- should i_incomplete be optional? ie. reading a short image results in
220 an error unless the user requests incomplete images.
403946c6 221
b921d414
AMH
222Iolayer:
223- Add scalar/mmap to iolayer
a106216b 224- Add close() code to iolayer for fakeseek sources.
b921d414 225- Merge callback interface into iolayer
a106216b
AMH
226- and raw
227- Implment the maxread threshold (Indicates how much can
228 be read from a source before it stops reading from its
229 underlying source. For making sure only the relevant
230 data is read from a socket for example.
231
b921d414
AMH
232Enhanched internal structure:
233
234MultiImage & metadata support:
235- Figure what interface should be between C and perl?
236- How to store data in the C interface for tags/metadata?
237 Support tiff's madness, i.e. tags and options.
238- Error handling, make a general i_errstr object and arrange
239 such that each image has an i_errstr object to hold its
240 local errors?
241- SEE design/represent.txt for proposed new structure and
242 interface design that takes these factors into account.
faa9b3e7
TC
243- define common i_* tags for specifying attribute common among images
244 like spatial resolution (implement for other image types, especially
10461f9a
TC
245 TIFF) (Spatial resolution is supported for all types that support
246 it - are there any other common properties we can add?)
faa6fa9b 247- implement the i_incomplete tag for other formats
b921d414
AMH
248
249New Features:
a106216b 250- Add mng support, pcx and aalib support.
9c106321 251 - Windows icon files (.ico) (done)
13db6021
TC
252 - ILBM (Amiga) images
253 - photoshop files (I think I've seen docs)
254 - XBM
255 - FITS
256 - WMF (extract bitmap data on read)
257 - gzip or bzip2 compressed raw
10461f9a 258 - postscript for output
ee6f9750 259 - PAM file support (man pam in recent PNM tools)
5f5fe73e 260
b921d414
AMH
261- Transforms, interpolated multidimensional lookup tables.
262 Usefull for CMYK <-> RGB table lookup.
263
a106216b 264- advanced font layout (spacing, kerning, alignment) (Artur?)
faa9b3e7 265
bf9dd17c 266- ways to check if characters are present in a font, eg. checking if
9c5ed9a7 267 ligatures are present (done for FreeType2)
bf9dd17c 268
faa9b3e7
TC
269- font synthesis - synthesize a bold or slanted font from a normal font
270 (or even from an existing bold or slanted font)
bf9dd17c 271
faa9b3e7 272- utf8 support for text output
9c106321 273 (available for FT1, freetype2, T1, Win32)
c855ad0e
TC
274
275- easy interfaces for text output:
276 - align text around point, including:
277 - left, center, right horizontal alignment
278 - top, center, baseline, bottom alignment
279 - choose whether to base alignment upon character cells or font
280 metrics to avoid spacing problems between lines
281 - fill a box from text, with newline handling
282 - an option to just return the information that would be used to
283 output the text, so it can be used for sizing calculations
284 - how much text fit in the box/how much space is left in the box
285 - fill a box with rich text (size and font changes)
286 - as above
287 - wrapping around boxes/images
288 - pod2Imager :)
289
290- tools to get more information about fonts/characters:
291 - name of font "Arial Bold Italic" vs "arialbi.ttf"
292 - ABC widths for characters (currently the only way to get the C width
293 for a character is to get the width with a following space and without
294 and then compare)
295 - character names
296
297- encodings for text output (maybe using the Encode module to work
298 between encodings)
faa9b3e7
TC
299
300- image rotation, 3 ways of doing rotation:
faa9b3e7
TC
301 - rotation by shearing, which produces makes lengths in the image larger,
302 but could be useful
a010a7d3 303 (2 of the 3 have been done)
faa9b3e7 304
9c5ed9a7
TC
305- read_multi() needs to handle other multi-image types,
306 (handles TIFF and GIF)
b921d414 307
9c5ed9a7 308- write_multi() to save other multi-image types, (handles TIFF and GIF)
8b695554 309 - pnm binary formats support multiple images per file
f62b2d84 310
362e7486
TC
311- compose channels - build a new image based on channels from several
312 images
313
da77e827
TC
314- arc outlines
315
9a71bc09
TC
316- complex lines/curves:
317 - thick lines:
318 - dotted/dashed lines
319 - doubled lines?
320 - end-point controls (butt-end, square-end, round-end, pointy, arrows)
321 - brush-lines (as with the Gimp, or Photoshop)
322 - more complex with multiple strokes and various randomness as with
323 Fractal Design Painter (or later versions of Corel Photo Paint)
324 - complex line shapes:
325 - lines
326 - general curves (cubic or bezier, whichever is more general)
327 - easy access to general curves:
328 - points to make a nice curve from
329 - various circular curves (centre, radii, start/end angles,
330 direction)
331 - Complex thick lines are probably more useful than brush-lines for
332 the things I expect Imager to be used for.
333 - http://www.develop-help.com/imager/strokes.png (.jpg for smaller version)
334
ea9e6c3f
TC
335- have Imager::Color{::Float}? use Graphics::ColorNames if present.
336
b921d414
AMH
337Clean up:
338- Make sure everything is doable with the OO interface
5f5fe73e 339 i_flood_fill() for example.
45a1d9d2 340 - include low-level functions like gsamp() and so on
f1ac5027 341
b921d414
AMH
342- Compile with memory debugging enabled and fix all leaks
343
a106216b 344- Add mycalloc() memory allocation wrappers.
b921d414
AMH
345
346- should we overload <=> or cmp for Imager::Color objects?
347 too many worms, leave it out
348
349- should the interlace option for reading raw images have
350 symbolic names in the OO interface?
351
f2bc9b80
TC
352- improve consistency in the interfaces, both in trying to use named
353 parameters where possible but also in using consistent names, eg.
354 (tx, ty) vs (left, top) in rubthrough() vs paste(). Do we want a (simple)
355 standard for this (suggested names)? Remember to preserve the old
356 interface where possible.
b921d414 357
c855ad0e
TC
358- try to clean up the inconsistencies between font types:
359 - utf8 (even if we just treat characters over 0xFF as missing for T1)
3799c4d1 360 (done for FT2, FT1, T1)
eeaa33fd 361 - transformations (done for FT2)
3799c4d1 362 - has_char() method (done for FT2, FT1, T1)
c855ad0e 363
b921d414 364Format specific issues:
b921d414
AMH
365- provide patches for libgif and libungif that fix their bugs
366 and give a useful extension interface. Probe for the
367 installation of the patches in Makefile.PL to let gif.c
9c106321 368 know what features it can use. (no need anymore)
b921d414 369
a106216b 370- Add options for pnm writer to save in any of the p1..P6
b921d414
AMH
371 formats. Even if the input has 1 channel, write 3 and such
372 cases. Also allow ascii mode. Need to be able to write
373 pbm images which needs ties to the quantization code.
374
a106216b 375- save paletted images as paletted where that's supported. Done
f62b2d84 376 for gif/tga/bmp/tiff. Not done for png yet.
f873cb01 377
a106216b 378- read other format paletted images as paletted images. This has
f62b2d84
TC
379 been done for gif/tga/bmp/tiff formats but not for png.
380
381- read/write 16-bit/sample images as such for tiff
27d9683e 382
faa6fa9b
TC
383- read more metadata from images, esp tiff tags, EXIF format information
384 from TIFF and JPEG.
385
9c106321 386- handle 16-bit/sample pgm/ppm files (done)
7ac6a2e9 387
fca19321
TC
388- "jpeg lossless rotation" - directly manipulates the JPEG
389 representation to rotate, scale or in some limited cases, crop an
390 image.
391
b921d414
AMH
392Documentation:
393- Add to the documentation
394- Write a tutorial?
faa9b3e7
TC
395- sample code and Imager/Samples.pod describing them
396- Imager/Cookbook.pod
b921d414
AMH
397- Write a guide to installing the helper libraries
398- Go through the entire project and add comments in pod
399 so doco.perl can be used to read them.
faa6fa9b 400- see the IRC log in design/doclayout.txt
6d0ed98a
TC
401- method index?
402- concept index?
ea9e6c3f
TC
403
404Build/configure:
405- use prompt() (from ExtUtils::MakeMaker) for questions in Makefile.PL
406- use the library's mechanism's to find the library if needed, for
407 example, freetype-config for FT2
408- the freetype2 library is built as "freetype.lib" on Win32 and needs
409 to be renamed to be found by the configuration process and included
410 with -lfreetype. Try to work around that.
411- freetype2 and freetype1 tend to be installed in /usr/include/freetype2
412 and /usr/include/freetype directories, or similarly named (somedir/freetype
413 for example), instead of putting these directly into the search path
414 search for the freetype{2}?/someheader and then add the subdirectory if
415 we find the file in that directory.
7ac6a2e9 416- switch to Test::More
5e9890e1 417- change headers to use more unique re-include protection macros
6b64de41
TC
418
419Old release checklists
420----------------------
421
4220.44: (december 2004)
423- set i_format for every file type on read and test for it:
424 - bmp - done
425 - jpeg - done
426 - tiff - done
427 - tga - done
428 - rgb - no read function anyway
429 - png - done
430 - gif - done
431 - pnm - done
432 - raw - done
433- check each file reader for possible integer overflows
434 - bmp - done
435 - tiff
436 - tga
437 - rgb
438 - png
439 - gif
440 - pnm
441- check bmp code uses image data offset correctly - done
442- check quant code for integer overflows - done
443- check for old URLs (umich and imager.perl.org/~addi/...) - done
444
ee5d34a5
TC
4450.45: (march 2005?)
446- resolve fills test failure under 5.8.6/darwin
447 http://www.nntp.perl.org/group/perl.cpan.testers/202802
448 add tests to check if the same problem occurs with other ?: operators
449- stop tga_header_verify() from spewing junk to stdout (done)
450- fix i_setcolors_p bug (done)
451- audit pnm.c (done)
452- audit tga.c (done)
453- audit rgb.c and add tests
454- add META.yml (bypass EU::MM's limited mechanism) (done)
455- implement i_incomplete for bmp files
456- check if freetype 2 is faster/slower than freetype 1 with Imager's glyph
457 caching. If FT1 is faster, add caching as a TODO for FT2.
458- add XS for i_tags_get_string() and test it. It has an apparent problem
459 in C<< sprintf(value, "%d", entry->data); >> since data is a pointer
460 (done)
461- test and fix problem with fallback value for
462 Imager::Font::BBox->advance_width. (done)
463- check handling of string() method align parameter. (done, fixed)
464- i_tt_bbox_inst in font.c uses variable i without ever setting it. (fixed)
465- add sample CGI that handles an uploaded image (done)
466- examples for fountain filter in Imager::Filters (done)
467- allow Imager::Fountain to take color descriptions (eg. blue, FF000)
468 instead of color objects for c0 and c1 (done)
469- support newer GIMP gradient files with the Name line (done)
470- provide access to right-side bearing information from the bounding box
471 function (done for all drivers)
472- capture TIFF read warnings (i_warnings tag?) (done)
473- Imager::Matrix2d rotate method only applies offset if both x and y
474 are non-zero, it should do it if either is non-zero (done)
475- add Imager::Cookbook with at least 5 recipes (done)
476- store floating point tags in an appropriate precision (done)
477- allow image creation to fail on malloc() failure for the image data
478 rather than aborting. The current behaviour could be a denial of
479 service attack. This has limited utility because of the way memory
480 over commitment works on Linux (done but reverted)
481- eliminate unused variable warning (especially the RETVAL ones in Imager.xs)
482 (done)
483- handle probing for libraries better (use pkg-config or I<library>-config
484 where possible (freetype2 and libpng)) (done)
485- add concept index to Imager.pm pod (done, still working it)
486- replace testimg/penguin-base.ppm with a smaller image (done)
487- add a sample CGI HTML and image generation scripts that work together,
488 with appropriate security management (done)
489