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