9. The Perl Server and stand-alone scripts
So far the scripts have all been started from the menu structure within
menu. But there is another possibility and that is to run the scripts from
the command line, as a normal perl program.
A D V E R T I S E M E N T
When run this way the script
tries to connect to the Perl-Server, and if it fails it will launch gimp on
its own. If you plan to run several scripts this way, it is obviously much
faster to run the Perl-Server since launching gimp takes quite a bit of
time. The perl-server may be started from the Xtns menu.
When a perl-fu script is run from the command line, the result is the
same as when it is run through the menus, except of the fact that it may be
run with the --output parameter in case it will save the result to
a file instead of displaying it within gimp. This is great for batch
creation of logos, etc.
The filename for the --output has some special magic that allows
to set some special image saving parameters, like interlace, quality factor,
etc. See the Gimp::Fu man page for details. Note that the normal rules about
image and file types are still valid, thus e.g. in order to save an image as
a gif file, it must be converted from RGB to an indexed script. Currently
this functionality must be included in each script, but it is possible that
a future version of Gimp::Fu, includes this conversion as an option.
Here are two invocations of the scripts declared above, but with output
written to a jpg file and a png file. As we said above, we can't save them
as gif as the scripts do not index the images.
perl-gimp-from-shell |
1: uni -o /tmp/uni.ppm -size 100 -color "#5050ff"
2: basic-logo -font '-*-utopia-*-r-*-*-100-*-*-*-*-*-*-*'
3: -o /tmp/bl.ppm -text "Perl rules"
|
Note that due to a bug in my version of Gimp/Perl I was not able to
output images in any format but in ppm and gif. Your milage may vary.
Another importent use of this interface is that it enables running the perl
debugger on the perl-fu scripts.
Note: The image is saved to the directory where gimp was started
from and not to the directory in which the scripts were invoked, unless a
complete path is given!
9.1. A shell for gimp-perl
When using the perl-server it is not necessary to use Gimp::Fu and
the register function. Instead a sub named on_net may be
declared, which points to a routine that will be called when gimp starts.
For a simple but powerful example of the use of the Gimp without Fu, here
is a an interactive perl gimp shell that may be run from the command line:
pg-shell |
1: #!/usr/local/bin/perl
2: ######################################################################
3: # An interactive command line shell to gimp.
4: ######################################################################
5: use Gimp ":auto";
6: use Term::ReadLine;
7:
8: sub interact {
9: $term = new Term::ReadLine("Gimp");
10: while( defined ($_ = $term->readline("Gimp> "))) {
11: $res = eval($_) . "\n";
12: print("Error: $@"), next if $@;
13: print "\n";
14: gimp_displays_flush();
15: }
16: }
17:
18: Gimp::on_net(\&interact);
19:
20: exit main();
21:
|
Here is an example of an interactive session with this shell:
interact |
1: Gimp> $img = gimp_image_new(100,100,RGB)
2: Gimp> $drw = $img->layer_new(100,100,RGB_IMAGE, "bg", 100, NORMAL_MODE)
3: Gimp> $img->add_layer($drw,-1)
4: Gimp> $img->display_new
5: Gimp> $drw->edit_clear
6: Gimp> gimp_displays_flush()
|
10. End notes
This tutorial has covered only a small part of the possibilities available
to a script writer. In particular the following issues available to
Gimp::Perl scripts have not been covered:
- The possibility of writing customized Gtk interfaces.
- Writing fullfledged plug-ins that manipulate the tile data through
the Perl Data Language (PDL) module.
- Using Perl::Gimp in a CGI environment.
- How to fill with gradients in a plugin
- How to do "free selections".
|