ImageMagick version 7 wish list
Posted: 2008-06-18T19:25:39-07:00
The issue was raised that it is time to start thinking about ImageMagick version 7.
NOTHING presented here has been finalized, or programmed. This is just to see what other developers and major users of IM think, and to allow them input into the decision process, and where what they consider to be important directions for the future for ImageMagick.
This presents an opportunity to make some major non-backward compatible changes (not to major) that may have been needed for a long time.
During the last Major Revision IM v5 to IM v6 resulted "convert" and most other IM commands switching to a 'do options in order given' type change. See Why did the command line style change! for details. This in turn allowed for the introduction of things like parenthesis, and image sequence re-ordering operators, as well as the addition of -composite into the convert command.
With IM version 7 development now a possibility, other similar changes can also now be looked at and thought about. The following list is what I consider the most important changes that need to be made.
NOTHING presented here has been finalized, or programmed. This is just to see what other developers and major users of IM think, and to allow them input into the decision process, and where what they consider to be important directions for the future for ImageMagick.
This presents an opportunity to make some major non-backward compatible changes (not to major) that may have been needed for a long time.
During the last Major Revision IM v5 to IM v6 resulted "convert" and most other IM commands switching to a 'do options in order given' type change. See Why did the command line style change! for details. This in turn allowed for the introduction of things like parenthesis, and image sequence re-ordering operators, as well as the addition of -composite into the convert command.
With IM version 7 development now a possibility, other similar changes can also now be looked at and thought about. The following list is what I consider the most important changes that need to be made.
- Data structures modified to handle transparency as ALPHA rather than MATTE.
I consider this vital, as just about ever complex function in IM has to 'negate' matte for correct math color processing. Almost all input and output handling of transparency is also generally given in terms of alpha values rather than matte values.
Currently the only operators that deal with 'matte' data in that form is -separate, -combine, -threshold, and -level. All other operators I know about use 'alpha' values, those operators include -fx and -evaluate. - Rewrite of "convert" so as to, remove the old 'legacy' handling (giving errors), and to allow 'single pass' parsing of the options.
This in turn allows for the use of "convert" scripts, and the possible development 'operation loops' to say loop N times, or even over the current image list, one image at a time.
This may also involve a rename of "convert" to a more generic name such as "magick" which will not have conflicts on the window system. "convert" could be just a symbolic link to "magick". - A fully-defined system of argument processing to allow extraction and use of information from previously read or modified in-memory images, as arguments to settings and operations. For example the use of '@' to read string arguments from files. or to 'include' a list of options for further processing options from other external files and sources.
- If "convert" is modified as described in the previous point, the reason for the two pass option handling will break "mogify". However "mogrify" could be replaced by a "script" to using "convert" to do the in place modification of images.
- Re-structure of image sequence and use of 'global' settings within the core library. That is all library functions has some method of accessing the whole current image sequence, and global settings (image_info) structure, to allow better interaction.
Examples of existing problems include...- Allowing the use of escaped sequences, so as to create a new image the same size or color as some existing image.
- -compose is not regarded as 'global' which means it gets reset on open parenthesis, but will not be cleared on close parenthesis with a the -respect-parenthesis flag set.
- when "-tile image" is used, a -size setting given set AFTER the -tile setting could effect the outcome of -tile, in illogical ways.
- Variable number of arguments for options (only posible in a one pass system option handling system), to allow for optional arguments to different operation 'methods'.
- Complete removal of many old obsolete options, like -pen, -flatten (now -layers flatten) -mosaic (now -layers mosaic)
- addition of -displace, -blend, and -dissolve into "convert"/"magick", and a tiled variation for -composite, allowing for all "composite" to be directly available in "convert".
- A -montage option which provides all the montage image framing methods, though shadow can remain separate. As well as a -array method to layout those 'montage framed' images. As a result the "montage" command itself could be simply a "script" wrapper around "convert"/"magick"
- Consolidation of 'auto-level' type options such as -normalize, -contrast-stretch, -linear-stretch, -equalize into a single option with various methods, to allow for easier expansion with many other automatic image leveling and image enhancement techniques and methods. Many of these have been 'proven' in scripts developed by Fred Weinhaus
- and probably many more small items that would not be compatible with the current system.