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