Hacking:GSoC/2011/Ideas

From GIMP Developer Wiki
Jump to: navigation, search

WORK IN PROGRESS!

This page is the official ideas list for GIMP (and GEGL's) application to Google Summer of Code 2011.

GIMP is the Gnu Image Manipulation Program, and GEGL is a Graph based Image Processing Library. GEGL is being designed (mainly, but not only) to be GIMP's new core which will allow better parallelism, better memory management, non-destructive editing and higher bit depths.

For more GEGL ideas, see http://gegl.org/contribute.html

For history of GIMP and GSoC, along with past ideas, see Hacking:GSOC‎

The GSoC timeline for this year can be found at: http://www.google-melange.com/document/show/gsoc_program/google/gsoc2011/timeline

Recommended

Ideas which are generally considered as good for GSoC this year, and are recommended for students

Adaptive Image Cloning (aka Semaless Cloning)

Direct cloning of parts from one image to another, usually ends in bad results because of different lighting conditions and other settings (such as white-balance) which causes the color of the cloned part not to match the source image and look out of place. There are some techniques to solve this, by using poisson equations and some other methods.

It differs from the existing heal tool, since it is meant for taking one area from an image, and paste it smoothly in some other area. The current algorithm implemented by the healing tool allows to remove local irregularities (such as dots, hairs, etc.) very well, but experiments of using it to do "adaptive cloning" of areas (for example copying a person from one image to the other) do not produce good results.

See http://www.cs.huji.ac.il/~danix/mvclone/

Slicing tool

One of the most requested features by web designers and/or interface designers, is the addition of a slice tool. Currently slicing images inside GIMP can only be done in grids (using guides and the guillotine action) and you can't split just one rectangle in the middle.

For example, the following slice can not be achieved:

-----------------------------------
|            |                    |
|            |                    |
|            |--------------------|
|            |                    |
-------------|                    |
|            |                    |
-----------------------------------

A more advanced version will take the slicing idea to a new place, allowing to create general nested rectangles:

-------------------------------------
|          ---------------   ----   |
|          |             |   |  |   |
|          |             |   ----   |
|          ---------------          |
|                                   |
|                                   |
------------------------------------- 

And why stop at rectangles? Maybe allow custom shapes using custom paths?

Porting GIMP plugins to GEGL operations

There are many many GIMP plugins that would need eventually to be converted to GEGL operations, if we want to use them in future versions of GIMP.

Implement the free transform tool

The free-transform tool should a all-in-one transformation tool that will allow fast and easy transformation of images, with all kinds of affine transformations at once. For exact specifications, see: http://gui.gimp.org/index.php/Transformation_tool_specification

Other

Ideas listed here are not recommended for GSoC - either since they are hard to do, or require very in depth knowlege of GIMP. Some don't even have a consensus about them, so they should be discussed more before GSoC.

Implementing an infrastructure to run GIMP plugins on GEGL

The current way of accessing pixel data will be deprecated in GIMP 3.0, so it was suggested to implemnt an infrastructre to manipulate pixels with GIMP's existing API over GEGL. this will make porting plugins easier to GIMP 3.0.

Dynamically resized layers

Allow layers to be resized dynamically as the user paints on them, and save the user the burden of managing layer sizes.

JavaScript scripting in the core and/or plug-ins - using GNOME Java Script infrastructure (GJS)

GIMP scripts and plug-ins can be written in Scheme, Perl, Python and C. Scheme is always available, but limited in its application in regard on image manipulation. Additionally, as a list-processing language, it may appear as weird to most users. Its main purpose is scripting workflows for repetitive work.

The Perl binding is currently the least supported one and not available on platforms other than Unix. The Python binding and the C libraries are current the most powerful ones.

Javascript could take over Scheme's role as the general purpose scripting language for GIMP.

Note: At least for scheme, there are no debuggers for scripting in GIMP, and only tracing is supported. It would be neat if as a part of this project, a javascript debugger will be integrated so scripts could be debugged in a sane way. Again, this is not a part of the original project suggestion (as suggested last year), but this is something that could be helpful.

Replace the GimpSizeEntry widget

Right now both the code and the UI is a mess. The unit should for example be in the text entry itself instead of in a combo box

Brush selector wigdet

More precisely one that is also capable for brush transform input (size/angle/aspect ratio).

Port UI code to a non-low level language

Hacking UI code in C is a resource eater for us, we should use C for quick and efficient pixel processing but not for creating buttons. It would be interesting to make changes to the GIMP codebase that would allow us for example write the Pointer Information Dialog in JavaScript.