]> git.imager.perl.org - imager.git/blob - TODO
- some sub-directory tests depended on files produced by the parent
[imager.git] / TODO
1                          *** TODO ***
2
3 Release Plans (subject to change)
4 -------------
5
6 brown-bag bugs may add intermediate releases.  The dates are goals,
7 not commitments.
8
9 For 0.62: (tentative)
10
11 thick lines
12
13 have alpha channel work treated as coverage for primitives (more
14 general combine parameter)
15
16 For 0.61:
17
18 TIFF improvements (to be detailed) (#20329)
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
26 both contig and non-contiguous
27  - possible extra code for handling 8-bit CMYK (#29353)
28
29 regmach.c fixes/tests (#29296)
30
31 sample: scaling an animated gif (#27591) (done)
32
33 transform2() docs (#29267)
34
35 read DIBS (#29055)
36
37 library search path on 64-bit centos (#29045)
38
39 i_gsamp() chan_count validation (#28985)
40
41 Imager::Font::Wrap doesn't correctly set savepos (#29771)
42
43 testdrive warnings (#29610)
44
45 Imager::Files still refers to rgb file type (#29354) (done)
46
47 t/t01introvert test failure line 495 (#29413)
48
49 Imager::Expr::Infix problem (#29562)
50
51 Makefile.PL --incpath and --libpath should expand ~/ paths (#29484)
52
53 PNG images sometimes get larger (#29268) (maybe 0.62)
54
55 CMYK alpha TIFF problems with old libtiff (#29353) (done)
56
57 matrix_transform() should use fabs() instead of abs() range checking
58 sz (#29936) (done)
59
60 warning compiling datatypes.c on x64 (#30204) (done)
61
62 dynfilt/t/t60dyntest.t relies on a file that may not exist (#30203)
63 (done)
64
65 For 0.60 (hopefully):
66
67 RGB file support (#8666) (done)
68
69 convert() doesn't preserve sample size (#28492) (done)
70
71 be explicit that scale*() doesn't modify the source (#28570) (done)
72
73 repeated text in Imager::Files (#27589) (done)
74
75 error message when loading an unsupported font format is confusing (#27571) (done)
76
77 enable transparency by default for gif (#27615) (done)
78
79 Imager doesn't load on Windows 98 (#27653) (done)
80
81 new color counting code (#28142) (done)
82
83 sample: scaling an animated gif (#27591)
84
85 test getcolorcount() (done)
86
87 do a compiler warning clean up run (done)
88
89 change the ico/cur reader to apply the mask as an alpha channel by
90 default (#29001) (done)
91
92 For 0.58:
93
94 rgb.txt search (and testing) (#26064) (done)
95
96 guassian blur radius (#25645) (done)
97
98 text rendering FT1 (#11972) (done)
99
100 text rendering T1 (#11972) (done)
101
102 For 0.57
103
104 BMP security fix only
105
106 For 0.56:
107
108 checking testing of new ft2 rendering (done)
109
110 possibly: use renderer on other fonts
111
112 check testing of new ppm input (done)
113
114 check testing of new ppm output (done)
115
116 check lbr's font output issue (done)
117
118 tests for monochrome makemap (done)
119
120 correct handling of old Data::Dumper (#24391) (done)
121
122 fix unsharpmask documentation (#25531) (done)
123
124 work around compiler bug on OS X (#25561) (done)
125
126 BEFORE 0.54
127
128 OO interface for i_plin/i_glin (done)
129
130 remove gif query from makefile.pl (done)
131
132 fallback for read/write_multi to read/write
133
134 pnmscale based alternative scale method (done)
135
136 rubthrough 4 on 4 (done)
137
138 replace dummy test script in dynfilt with a real one (done)
139
140 BEFORE 0.50:
141
142 skip t82inline.t tests if directory has spaces in name
143
144 integrate pod coverage tests
145
146 rework iolayers
147
148 add .ico support
149
150 note lack of IRC support
151
152 document parseiptc()
153
154 BEFORE 0.48:
155
156 scale() fixes/docs, Imager::Transformations going over. (done)
157
158 do some more malloc checks (done)
159
160 scan $Config{libspath} for directories if we can. (done)
161
162 0.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
184
185 0.46: (September 2005)
186
187 - check remaining memory allocation calls for integer overflows
188   http://rt.cpan.org/NoAuth/Bug.html?id=8213
189    - check *alloc() calls
190    - check llist_push() calls
191
192 - fix Imager::Color warning when $ENV{HOME} isn't set from
193   _get_gimp_color() (done)
194   http://rt.cpan.org/NoAuth/Bug.html?id=13143
195
196 - module version numbers (done)
197   http://rt.cpan.org/NoAuth/Bug.html?id=13047 
198
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 
201   memory causing a denial of service attack. (done)
202
203 - implement gsamp()/gsampf()/plin() etc methods for those low level image
204   interfaces which don't yet have methods. (done)
205    - code (done)
206    - test (done)
207    - document (done)
208
209 - add Imager::Tutorial (see Tk::UserGuide for a structure) (done)
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
213
214 - rename lib/Imager/Cookbook.pm to lib/Imager/Cookbook.pod (done)
215
216 - add 5 more recipes to Imager::Cookbook
217
218 - implement i_incomplete for png and gif files.
219
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)
226   - multiple examples for writing GIF images.
227   - name arguments and use those names in the documentation
228     http://nntp.perl.org/group/perl.perl5.porters/102434
229   (#1521, #5608, #8231, #11429, #13058(done))
230
231 - have $img->read() act like ($img) = Imager->read_multi() on GIFs (done)
232
233 - figure out what the nearest_color filter does, and document it
234
235 - remove image.h dependency on t1lib.h (done)
236
237 - make sure dynfilt/Makefile.PL gets the same includes that
238   Makefile.PL does.
239
240 0.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
252 0.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
269
270 Speculation
271 -----------
272
273 Some 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.
277
278 Iolayer:
279 - Add scalar/mmap to iolayer
280 - Add close() code to iolayer for fakeseek sources.
281 - Merge callback interface into iolayer
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
288 Enhanched internal structure:
289
290 MultiImage & 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.
299 - define common i_* tags for specifying attribute common among images
300   like spatial resolution (implement for other image types, especially 
301   TIFF)  (Spatial resolution is supported for all types that support 
302   it - are there any other common properties we can add?)
303 - implement the i_incomplete tag for other formats  
304
305 New Features:
306 - Add mng support, pcx and aalib support.
307   - Windows icon files (.ico) (done)
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
314   - postscript for output
315   - PAM file support (man pam in recent PNM tools)
316
317 - Transforms, interpolated multidimensional lookup tables.
318   Usefull for CMYK <-> RGB table lookup.
319
320 - advanced font layout (spacing, kerning, alignment) (Artur?)
321
322 - ways to check if characters are present in a font, eg. checking if
323   ligatures are present (done for FreeType2)
324
325 - font synthesis - synthesize a bold or slanted font from a normal font
326   (or even from an existing bold or slanted font)
327
328 - utf8 support for text output
329   (available for FT1, freetype2, T1, Win32)
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)
355
356 - image rotation, 3 ways of doing rotation:
357   - rotation by shearing, which produces makes lengths in the image larger,
358     but could be useful
359   (2 of the 3 have been done)
360
361 - read_multi() needs to handle other multi-image types,
362    (handles TIFF and GIF)
363
364 - write_multi() to save other multi-image types, (handles TIFF and GIF)
365   - pnm binary formats support multiple images per file
366
367 - compose channels - build a new image based on channels from several
368   images
369
370 - arc outlines
371
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
391 - have Imager::Color{::Float}? use Graphics::ColorNames if present.
392
393 Clean up:
394 - Make sure everything is doable with the OO interface
395   i_flood_fill() for example.
396   - include low-level functions like gsamp() and so on
397
398 - Compile with memory debugging enabled and fix all leaks
399
400 - Add mycalloc() memory allocation wrappers.
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
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.
413
414 - try to clean up the inconsistencies between font types:
415   - utf8 (even if we just treat characters over 0xFF as missing for T1)
416     (done for FT2, FT1, T1)
417   - transformations (done for FT2)
418   - has_char() method (done for FT2, FT1, T1)
419
420 Format specific issues:
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
424   know what features it can use. (no need anymore)
425
426 - Add options for pnm writer to save in any of the p1..P6
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
431 - save paletted images as paletted where that's supported.  Done
432   for gif/tga/bmp/tiff.  Not done for png yet.
433
434 - read other format paletted images as paletted images.  This has 
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
438
439 - read more metadata from images, esp tiff tags, EXIF format information 
440   from TIFF and JPEG.
441
442 - handle 16-bit/sample pgm/ppm files (done)
443
444 - "jpeg lossless rotation" - directly manipulates the JPEG
445   representation to rotate, scale or in some limited cases, crop an
446   image.
447
448 Documentation:
449 - Add to the documentation
450 - Write a tutorial?
451 - sample code and Imager/Samples.pod describing them
452 - Imager/Cookbook.pod
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.
456 - see the IRC log in design/doclayout.txt
457 - method index?
458 - concept index?
459
460 Build/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.
472 - switch to Test::More
473 - change headers to use more unique re-include protection macros
474
475 Old release checklists
476 ----------------------
477
478 0.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
501 0.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