[gimp-web/gimp-web-static] Porting more tutorials + assets



commit c3a6696510034db25bc2cbe9897754589496ff68
Author: Pat David <patdavid gmail com>
Date:   Tue Aug 18 17:22:35 2015 -0500

    Porting more tutorials + assets

 content/about/meta/file-list.md                    |   12 +-
 content/tutorials/Basic_Perl/basic                 |   33 +
 content/tutorials/Basic_Perl/basic-logo            |   63 ++
 content/tutorials/Basic_Perl/basic-logo-dialog.png |  Bin 0 -> 17386 bytes
 content/tutorials/Basic_Perl/basic-logo.png        |  Bin 0 -> 6880 bytes
 content/tutorials/Basic_Perl/circles               |   60 ++
 content/tutorials/Basic_Perl/circles.png           |  Bin 0 -> 12168 bytes
 content/tutorials/Basic_Perl/hello-world1          |   52 +
 content/tutorials/Basic_Perl/hello-world1.png      |  Bin 0 -> 12702 bytes
 content/tutorials/Basic_Perl/horiz-cat             |   61 ++
 content/tutorials/Basic_Perl/index.md              | 1115 ++++++++++++++++++++
 content/tutorials/Basic_Perl/interact              |    7 +
 content/tutorials/Basic_Perl/paint-select          |   55 +
 content/tutorials/Basic_Perl/paint-select.png      |  Bin 0 -> 7542 bytes
 content/tutorials/Basic_Perl/perl-gimp-from-shell  |    2 +
 content/tutorials/Basic_Perl/pg-shell              |   17 +
 content/tutorials/Basic_Perl/tpix.gif              |  Bin 0 -> 825 bytes
 content/tutorials/Basic_Perl/uni                   |   49 +
 content/tutorials/Basic_Perl/uni-entry.png         |  Bin 0 -> 9748 bytes
 content/tutorials/Basic_Perl/uni-menu.png          |  Bin 0 -> 55891 bytes
 content/tutorials/Basic_Perl/uni-result.png        |  Bin 0 -> 9001 bytes
 content/tutorials/Basic_Scheme/index.md            |  541 ++++++++++
 content/tutorials/Basic_Scheme/pdb-uni-entry.png   |  Bin 0 -> 7309 bytes
 content/tutorials/Basic_Scheme/refresh.png         |  Bin 0 -> 8943 bytes
 content/tutorials/Basic_Scheme/uni-img.png         |  Bin 0 -> 4340 bytes
 content/tutorials/Basic_Scheme/uni-result.png      |  Bin 0 -> 2991 bytes
 content/tutorials/Basic_Scheme2/index.md           |  151 +++
 content/tutorials/Basic_Scheme2/power_01.jpg       |  Bin 0 -> 122115 bytes
 content/tutorials/Basic_Scheme2/power_02.jpg       |  Bin 0 -> 15987 bytes
 content/tutorials/Bezier_Selections/bezier_box.png |  Bin 0 -> 351 bytes
 .../tutorials/Bezier_Selections/bezier_button.png  |  Bin 0 -> 994 bytes
 .../tutorials/Bezier_Selections/bezier_curve.png   |  Bin 0 -> 418 bytes
 content/tutorials/Bezier_Selections/index.md       |   43 +
 .../Blending_Exposures/addmaskoptions.jpg          |  Bin 0 -> 9293 bytes
 content/tutorials/Blending_Exposures/after.jpg     |  Bin 0 -> 44177 bytes
 content/tutorials/Blending_Exposures/airbrush.jpg  |  Bin 0 -> 685 bytes
 content/tutorials/Blending_Exposures/anchor.jpg    |  Bin 0 -> 898 bytes
 .../tutorials/Blending_Exposures/before-dark.jpg   |  Bin 0 -> 43623 bytes
 .../tutorials/Blending_Exposures/before-light.jpg  |  Bin 0 -> 58544 bytes
 content/tutorials/Blending_Exposures/brushes1.jpg  |  Bin 0 -> 13143 bytes
 content/tutorials/Blending_Exposures/brushes2.jpg  |  Bin 0 -> 13321 bytes
 content/tutorials/Blending_Exposures/clone.jpg     |  Bin 0 -> 724 bytes
 content/tutorials/Blending_Exposures/convolve.jpg  |  Bin 0 -> 649 bytes
 content/tutorials/Blending_Exposures/fill.jpg      |  Bin 0 -> 693 bytes
 .../Blending_Exposures/image-composite-align.jpg   |  Bin 0 -> 45098 bytes
 .../Blending_Exposures/image-composite-move.jpg    |  Bin 0 -> 43474 bytes
 .../Blending_Exposures/image-composite-paste.jpg   |  Bin 0 -> 45092 bytes
 .../Blending_Exposures/image-donepainting.jpg      |  Bin 0 -> 51955 bytes
 .../tutorials/Blending_Exposures/image-fill.jpg    |  Bin 0 -> 46388 bytes
 .../Blending_Exposures/image-finished.jpg          |  Bin 0 -> 51533 bytes
 .../Blending_Exposures/image-original-dark.jpg     |  Bin 0 -> 39749 bytes
 .../Blending_Exposures/image-original-light.jpg    |  Bin 0 -> 50572 bytes
 .../tutorials/Blending_Exposures/image-paint1.jpg  |  Bin 0 -> 25573 bytes
 .../tutorials/Blending_Exposures/image-paint2.jpg  |  Bin 0 -> 26214 bytes
 .../Blending_Exposures/image-postclone.jpg         |  Bin 0 -> 33359 bytes
 .../Blending_Exposures/image-preclone.jpg          |  Bin 0 -> 34059 bytes
 .../tutorials/Blending_Exposures/image-select1.jpg |  Bin 0 -> 45585 bytes
 content/tutorials/Blending_Exposures/index.md      |  202 ++++
 content/tutorials/Blending_Exposures/lasso.jpg     |  Bin 0 -> 691 bytes
 content/tutorials/Blending_Exposures/layers1.jpg   |  Bin 0 -> 22622 bytes
 content/tutorials/Blending_Exposures/layers2.jpg   |  Bin 0 -> 23590 bytes
 content/tutorials/Blending_Exposures/layers3.jpg   |  Bin 0 -> 26028 bytes
 content/tutorials/Blending_Exposures/layers4.jpg   |  Bin 0 -> 23644 bytes
 content/tutorials/Blending_Exposures/layers5.jpg   |  Bin 0 -> 24216 bytes
 content/tutorials/Blending_Exposures/layers6.jpg   |  Bin 0 -> 23679 bytes
 content/tutorials/Blending_Exposures/layers7.jpg   |  Bin 0 -> 23713 bytes
 content/tutorials/Blending_Exposures/newlayer.jpg  |  Bin 0 -> 867 bytes
 .../Blending_Exposures/newlayeroptions.jpg         |  Bin 0 -> 13466 bytes
 content/tutorials/Blending_Exposures/paint.jpg     |  Bin 0 -> 679 bytes
 content/tutorials/Blending_Exposures/smudge.jpg    |  Bin 0 -> 693 bytes
 themes/newgimp/static/css/page.css                 |    4 +-
 71 files changed, 2460 insertions(+), 7 deletions(-)
---
diff --git a/content/about/meta/file-list.md b/content/about/meta/file-list.md
index 9beb214..b478502 100644
--- a/content/about/meta/file-list.md
+++ b/content/about/meta/file-list.md
@@ -159,12 +159,12 @@ The main page links go to legacy WGO, the link icon (if there) will go to the po
 <del><http://www.gimp.org/tutorials/Automate_Editing_in_GIMP/index.html></del> [<i class="fa 
fa-link"></i>]({filename}../../tutorials/Automate_Editing_in_GIMP/index.md)  
 <del><http://www.gimp.org/tutorials/AutomatedJpgToXcf/index.html></del> [<i class="fa 
fa-link"></i>]({filename}../../tutorials/AutomatedJpgToXcf/index.md)  
 <del><http://www.gimp.org/tutorials/Basic_Batch/index.html></del> [<i class="fa 
fa-link"></i>]({filename}../../tutorials/Basic_Batch/index.md)  
-<http://www.gimp.org/tutorials/Basic_Color_Curves/index.html>  
-<http://www.gimp.org/tutorials/Basic_Perl/index.html>  
-<http://www.gimp.org/tutorials/Basic_Scheme/index.html>  
-<http://www.gimp.org/tutorials/Basic_Scheme2/index.html>  
-<http://www.gimp.org/tutorials/Bezier_Selections/index.html>  
-<http://www.gimp.org/tutorials/Blending_Exposures/index.html>  
+<del><http://www.gimp.org/tutorials/Basic_Color_Curves/index.html></del> [<i class="fa 
fa-link"></i>]({filename}../../tutorials/Basic_Color_Curves/index.md)  
+<del><http://www.gimp.org/tutorials/Basic_Perl/index.html></del> [<i class="fa 
fa-link"></i>]({filename}../../tutorials/Basic_Perl/index.md)  
+<del><http://www.gimp.org/tutorials/Basic_Scheme/index.html></del> [<i class="fa 
fa-link"></i>]({filename}../../tutorials/Basic_Scheme/index.md)  
+<del><http://www.gimp.org/tutorials/Basic_Scheme2/index.html></del> [<i class="fa 
fa-link"></i>]({filename}../../tutorials/Basic_Scheme2/index.md)  
+<del><http://www.gimp.org/tutorials/Bezier_Selections/index.html></del> [<i class="fa 
fa-link"></i>]({filename}../../tutorials/Bezier_Selections/index.md)  
+<del><http://www.gimp.org/tutorials/Blending_Exposures/index.html></del> [<i class="fa 
fa-link"></i>]({filename}../../tutorials/Blending_Exposures/index.md)  
 <http://www.gimp.org/tutorials/Blown_Out_Highlights/index.html>  
 <http://www.gimp.org/tutorials/Blur_Overlays/index.html>  
 <http://www.gimp.org/tutorials/Borders_On_Selections/index.html>  
diff --git a/content/tutorials/Basic_Perl/basic b/content/tutorials/Basic_Perl/basic
new file mode 100644
index 0000000..bf70bbe
--- /dev/null
+++ b/content/tutorials/Basic_Perl/basic
@@ -0,0 +1,33 @@
+#!/usr/bin/perl -w
+
+use Gimp;
+use Gimp::Fu;
+
+podregister { die "I DIED\n" };
+
+exit main;
+__END__
+
+=head1 NAME
+
+test_exception - exercise gimp-perl filter testing exceptions
+
+=head1 SYNOPSIS
+
+<Image>/Filters/Languages/_Perl/_Test/Exception
+
+=head1 DESCRIPTION
+
+Exercise Gimp-Perl exceptions.
+
+=head1 AUTHOR
+
+The Author.
+
+=head1 DATE
+
+20140310
+
+=head1 LICENSE
+
+The licensing terms.
diff --git a/content/tutorials/Basic_Perl/basic-logo b/content/tutorials/Basic_Perl/basic-logo
new file mode 100644
index 0000000..ed025c8
--- /dev/null
+++ b/content/tutorials/Basic_Perl/basic-logo
@@ -0,0 +1,63 @@
+#!/usr/bin/perl
+
+use Gimp;
+use Gimp::Fu;
+
+podregister {
+  my $img = Gimp::Image->new(100, 100, RGB); # any old size
+  my $background = $img->layer_new(
+    100, 100, RGB, "Background", 100, NORMAL_MODE
+  );
+  $img->insert_layer($background, 0, 0);
+  Gimp::Context->set_foreground($fgcolor); # Choose color of text
+  # Create the text layer. Using -1 as the drawable creates a new layer.
+  my $text_layer = $img->text_fontname(
+    -1, 0, 0, $text, $border, 1, $size, POINTS, $font
+  );
+  # Get size of the text drawable and resize the image and the
+  # background layer to this size.
+  my ($width, $height) = ($text_layer->width, $text_layer->height);
+  $img->resize($width, $height, 0, 0);
+  $background->resize($width, $height, 0, 0);
+  # Fill the background layer now when it has the right size.
+  Gimp::Context->set_background($bgcolor);
+  $background->edit_fill(BACKGROUND_FILL);
+  Gimp::Display->new($img);
+  return $img;
+};
+
+exit main;
+__END__
+
+=head1 NAME
+
+basic_logo - Basic logo
+
+=head1 SYNOPSIS
+
+<Image>/File/Create/Tutorial/Basic Logo
+
+=head1 DESCRIPTION
+
+Make a basic logo.
+
+=head1 PARAMETERS
+
+ [PF_FONT, "font", "Font",   "Utopia Bold"],
+ [PF_INT32, "size", "Font size", 10],
+ [PF_INT32, "border", "Border", 10],
+ [PF_STRING, "text", "Text", "Hello world!"],
+ [PF_COLOR, "bgcolor", "Background color", [40,180,160]],
+ [PF_COLOR, "fgcolor", "Foreground color", [255,255,0]],
+
+=head1 AUTHOR
+
+Dov Grobgeld
+
+=head1 DATE
+
+2004-03-27
+
+=head1 LICENSE
+
+Dov Grobgeld
diff --git a/content/tutorials/Basic_Perl/basic-logo-dialog.png 
b/content/tutorials/Basic_Perl/basic-logo-dialog.png
new file mode 100644
index 0000000..ff344be
Binary files /dev/null and b/content/tutorials/Basic_Perl/basic-logo-dialog.png differ
diff --git a/content/tutorials/Basic_Perl/basic-logo.png b/content/tutorials/Basic_Perl/basic-logo.png
new file mode 100644
index 0000000..4069117
Binary files /dev/null and b/content/tutorials/Basic_Perl/basic-logo.png differ
diff --git a/content/tutorials/Basic_Perl/circles b/content/tutorials/Basic_Perl/circles
new file mode 100644
index 0000000..032721b
--- /dev/null
+++ b/content/tutorials/Basic_Perl/circles
@@ -0,0 +1,60 @@
+#!/usr/bin/perl
+
+use Gimp;
+use Gimp::Fu;
+
+podregister {
+  # Create the background
+  my $img = Gimp::Image->new($size, $size, RGB);
+  $layer = $img->layer_new($size, $size, RGB, "Layer 1", 100, NORMAL_MODE);
+  $img->insert_layer($layer, -1, 0);
+  Gimp::Context->set_background($bgcolor);
+  $layer->edit_fill(BACKGROUND_FILL);
+  my $ncircles = int($size/$radius/2);
+  for ($i=0; $i<$ncircles; $i++) {
+    for ($j=0; $j<$ncircles; $j++) {
+      # Select a circle
+      $img->select_ellipse(
+       CHANNEL_OP_REPLACE, $i*$radius*2, $j*$radius*2, $radius*2, $radius*2
+      );
+      my $color = [$i*30, ($ncircles-$j)*25, ($i+$j)*15]; # mix colors
+      Gimp::Context->set_background($color);
+      $layer->edit_fill(BACKGROUND_FILL);
+    }
+  }
+  Gimp::Display->new($img);
+  return $img;
+};
+
+exit main;
+__END__
+
+=head1 NAME
+
+circles - a loop
+
+=head1 SYNOPSIS
+
+<Image>/File/Create/Tutorial/Circles
+
+=head1 DESCRIPTION
+
+a loop
+
+=head1 PARAMETERS
+
+ [PF_INT32, "size", "Image size", 100],
+ [PF_COLOR, "bgcolor", "Background color", [40,180,60]],
+ [PF_INT32, "radius", "Circle radius", 10]
+
+=head1 AUTHOR
+
+Dov
+
+=head1 DATE
+
+1999-05-14
+
+=head1 LICENSE
+
+Dov
diff --git a/content/tutorials/Basic_Perl/circles.png b/content/tutorials/Basic_Perl/circles.png
new file mode 100644
index 0000000..bc087fb
Binary files /dev/null and b/content/tutorials/Basic_Perl/circles.png differ
diff --git a/content/tutorials/Basic_Perl/hello-world1 b/content/tutorials/Basic_Perl/hello-world1
new file mode 100644
index 0000000..51f0662
--- /dev/null
+++ b/content/tutorials/Basic_Perl/hello-world1
@@ -0,0 +1,52 @@
+#!/usr/bin/perl
+
+use Gimp;
+use Gimp::Fu;
+
+podregister {
+  my $img = Gimp::Image->new(350, 100, RGB);
+  my $drw = $img->layer_new($img->width, $img->height,
+                       RGB, "BG", 100, NORMAL_MODE);
+  $img->insert_layer($drw, -1, 0);
+  Gimp::Context->set_background("black");
+  $drw->edit_fill(BACKGROUND_FILL);
+  Gimp::Context->set_foreground([255,255,0]); # Choose color of text
+  # Create the text
+  my $textlayer = $drw->text_fontname(0, 0, $text, 10, 1, $size, POINTS, $font);
+  $textlayer->floating_sel_anchor;
+  Gimp::Display->new($img);
+  return $img;
+};
+
+exit main;
+__END__
+
+=head1 NAME
+
+hello_world1 - basic text
+
+=head1 SYNOPSIS
+
+<Image>/File/Create/Tutorial/Basic text 1
+
+=head1 DESCRIPTION
+
+basic text
+
+=head1 PARAMETERS
+
+ [PF_FONT, "font", "Font", "Sans"],
+ [PF_INT32, "size", "Font size", 70],
+ [PF_STRING, "text", "Text", "Hello world!"]
+
+=head1 AUTHOR
+
+Dov
+
+=head1 DATE
+
+2004-03-27
+
+=head1 LICENSE
+
+Dov
diff --git a/content/tutorials/Basic_Perl/hello-world1.png b/content/tutorials/Basic_Perl/hello-world1.png
new file mode 100644
index 0000000..5aa37d8
Binary files /dev/null and b/content/tutorials/Basic_Perl/hello-world1.png differ
diff --git a/content/tutorials/Basic_Perl/horiz-cat b/content/tutorials/Basic_Perl/horiz-cat
new file mode 100644
index 0000000..5645dc9
--- /dev/null
+++ b/content/tutorials/Basic_Perl/horiz-cat
@@ -0,0 +1,61 @@
+#!/usr/bin/perl
+
+use Gimp;
+use Gimp::Fu;
+
+podregister {
+  die "Must select layer.\n" unless $drawable->is_layer;
+  $drawable->become('Gimp::Layer');
+  my $image2 = $drawable2->get_image;
+  my ($w1, $h1) = ($drawable->width, $drawable->height);
+  my ($w2, $h2) = ($drawable2->width, $drawable2->height);
+  my $hmax = $h1 > $h2 ? $h1 : $h2; # new height is maximum height of the images
+  $image->undo_group_start; # Create an undo group
+  # Resize the drawable layer to make room for the image
+  $image->resize($w1+$w2, $hmax, 0, ($hmax-$h1)/2);
+  $drawable->resize($w1+$w2, $hmax, 0, ($hmax-$h1)/2);
+  # Copy $drawable2 and paste it into the new space of $drawable1
+  $image2->selection_all; # select all of image2
+  $drawable2->edit_copy;
+  $image2->selection_none;
+  # make a selection in image 1 where $drawable2 is to be pasted
+  $image->select_rectangle(CHANNEL_OP_ADD, $w1, ($hmax-$h2)/2, $w2, $h2);
+  $drawable->edit_paste(0)->floating_sel_anchor; # paste and then anchor it
+  $image->undo_group_end; # Close the undo group
+  return;
+};
+
+exit main;
+__END__
+
+=head1 NAME
+
+horiz_cat - Horizontal concat
+
+=head1 SYNOPSIS
+
+<Image>/Filters/Tutorial/Horizontal Concat
+
+=head1 DESCRIPTION
+
+Horizontal concatenation of images.
+
+=head1 PARAMETERS
+
+ [PF_DRAWABLE,   "drawable2", "Drawable to concatenate", undef],
+
+=head1 IMAGE TYPES
+
+*
+
+=head1 AUTHOR
+
+Dov Grobgeld
+
+=head1 DATE
+
+2004-03-27
+
+=head1 LICENSE
+
+Dov Grobgeld
diff --git a/content/tutorials/Basic_Perl/index.md b/content/tutorials/Basic_Perl/index.md
new file mode 100644
index 0000000..27826f5
--- /dev/null
+++ b/content/tutorials/Basic_Perl/index.md
@@ -0,0 +1,1115 @@
+Title: A Tutorial for GIMP-Perl Users
+Date: 2014-05-02
+Modified: 2014-05-02
+Author: Ed J
+
+
+ Updated for Gimp 2.8 / Gimp-Perl 2.3  
+ <font size="-1">© Ed J</font>  
+ <font size="-1">Last modified: 2014-05-02</font>  
+
+**Table of contents**
+
+[TOC]
+
+
+## 1. Version notes
+
+This work is a slightly modified version of Dov Grobgeld's excellent tutorial. It has been updated to 
Gimp-Perl 2.3 and GIMP 2.8.
+
+## 2. Background
+
+One of the wonderful features of GIMP is that it all its functionality may be accessed through scripting. 
Available scripting environments include Scheme through Script-Fu and Python.
+
+Perl has CPAN, giving access to vast numbers of modules to get things done. Now, GIMP may also be scripted 
in Perl. This tutorial will describe how to write such plug-ins and scripts for Gimp.
+
+As there are several excellent tutorial texts describing the perl language, this tutorial will assume a 
working knowledge of Perl, and will instead concentrate on the use of GIMP together with the perl modules 
Gimp and Gimp::Fu.
+
+## 3. What you need
+
+The tutorial scripts have been tested on Linux (a Windows version is in the works) with the following 
versions:
+
+1.  Gimp version 2.8.10.
+2.  Perl version 5.14 or later.
+3.  The perl module Gtk2, version 1.249, available from 
[http://gtk2-perl.sourceforge.net](http://gtk2-perl.sourceforge.net/)
+4.  The Gimp-Perl module, version 2.3 or later, available from 
[http://search.cpan.org/dist/Gimp/](http://search.cpan.org/dist/Gimp/)
+
+Perl and all its associated modules are available in source form from the Comprehensive Perl Archive 
network, CPAN.
+
+## 4. The Gimp module
+
+Most scripts make use of the simplified interface Gimp::Fu provided with the Gimp module. Gimp::Fu provides 
a framework for entering parameters to the script in a dialog-box interface, just like Script-Fu, but also 
allows running of the script in batch mode from the command line. This tutorial will go into detailed 
descriptions of the construction of a Gimp::Fu script, but before we do this, here is the general framework 
of such a script.
+
+    #!/usr/bin/perl -w 
+
+    use Gimp; 
+    use Gimp::Fu; 
+
+    podregister {
+     # code...
+    }; 
+
+    exit main; 
+    __END__ 
+
+    =head1 NAME 
+
+    test_exception - exercise gimp-perl filter testing exceptions 
+
+    =head1 SYNOPSIS 
+
+    <Image>/Filters/Languages/_Perl/_Test/Exception 
+
+    =head1 DESCRIPTION 
+
+    Exercise Gimp-Perl exceptions. 
+
+    =head1 AUTHOR 
+
+    The Author. 
+
+    =head1 DATE 
+
+    20140310 
+
+    =head1 LICENSE 
+
+    The licensing terms. 
+
+The key points to note in the script are:
+
+*   the use of the two modules `Gimp` and `Gimp::Fu`,
+*   the podregister function, which will be described in detail below,
+*   the way the control is handed over to `Gimp` module on line 8, and
+*   the POD documentation below the `__END__` line.
+
+## 5. The GIMP PDB
+
+Before going into the details of the Gimp::Fu script, we will describe how to access the functionality of 
GIMP. All functions known to GIMP are available through the procedural database (PDB). All the PDB functions 
may be called from perl, as will be seen below. These PDB functions are either internal to GIMP, or have been 
made available through a plug-in or a script extension, but as far as the caller is concerned there is no 
difference. As we will see below, when a perl function is registered through the `podregister` function, it 
will appear in the PDB as well.
+
+Gimp comes with a PDB browser available in **Help/Procedure Browser**. This browser provides a way of seeing 
all the functions in the PDB, as well as their input and output parameters. E.g. the DB Browser entry for 
`plug-in-gauss-iir`, which will be used in the example below looks like this:
+
+<table>
+<tbody><tr><th align="right" valign="top">Name:</th><td colspan="3">plug-in-gauss-iir</td></tr>
+<tr><th align="right" valign="top">Blurb:</th><td colspan="3" valign="top">Apply a gaussian blur</td></tr>
+<tr>
+<th align="right" valign="top">In:</th><td valign="top">INT32</td><td valign="top">run-mode</td><td 
valign="top">The run mode { RUN-INTERACTIVE (0), RUN-NONINTERACTIVE (1) }</td>
+</tr>
+<tr>
+<th valign="top"></th><td valign="top">IMAGE</td><td valign="top">image</td><td valign="top">Input image 
(unused)</td>
+</tr>
+<tr>
+<th valign="top"></th><td valign="top">DRAWABLE</td><td valign="top">drawable</td><td valign="top">Input 
drawable</td>
+</tr>
+<tr>
+<th valign="top"></th><td valign="top">FLOAT</td><td valign="top">radius</td><td valign="top">Radius of 
gaussian blur (in pixels, &gt; 0.0)</td>
+</tr>
+<tr>
+<th valign="top"></th><td valign="top">INT32</td><td valign="top">horizontal</td><td valign="top">Blur in 
horizontal direction</td>
+</tr>
+<tr>
+<th valign="top"></th><td valign="top">INT32</td><td valign="top">vertical</td><td valign="top">Blur in 
vertical direction</td>
+</tr>
+<tr><th valign="top">Help:</th><td colspan="3">Applies a gaussian blur to the drawable, with specified 
radius of affect.  The standard deviation of the normal distribution used to modify pixel values is 
calculated based on the supplied radius.  Horizontal and vertical blurring can be independently invoked by 
specifying only one to run.  The IIR gaussian blurring works best for large radius values and for images 
which are not computer-generated.</td>
+</tr>
+</tbody>
+</table>
+
+All the the constants mentioned in the PDB Explorer have been defined within Gimp::Fu and may be used within 
perl. E.g. a call to blur an image looks as follows:
+
+    Gimp::Plugin->gauss_iir($image, $drawable, 50, 6, 6);
+
+Note that Perl is using underline characters where the DB browser uses hyphens! The PDB entry above shows 
that `plug-in-gauss-iir` is called with various parameters, of various types. These will be explained below.
+
+You will also see that the first parameter, `run-mode`, was omitted. This is a feature of Gimp-Perl, which 
will automatically supply that parameter if you leave it off. This will make your code a lot tidier-looking.
+
+Script-Fu scripts are called just like any other script according to the PDB signature in the PDB browser. 
E.g. to run the script-fu-basic1-logo just do:
+
+    script_fu_basic1_logo("Hello", 72,
+                          "Utopia 72", 
+                          [0,0,0],[255,255,255]);
+
+### 5.1. Gimp::Fu and the podregister function
+
+Gimp::Fu is Perl's answer to Script-Fu. It provides a simplified method for accepting parameters for a 
script through a Gtk2 interface, just like script-fu, but as we shall see below, it has some additional bells 
and whistles.
+
+The main function for a Gimp-Fu script is the <tt>podregister</tt> function. This function declares the 
interface of the script to GIMP. The <tt>podregister</tt> function provides GIMP with the following 
information, from various sections of its [POD (plain old 
documentation)](http://perldoc.perl.org/perlpod.html):
+
+*  The name of the function. It comes from the first part of the <tt>NAME</tt> section, before the dash. 
Tells GIMP the name by which the function will be known in the PDB.
+
+*  A small description, from the <tt>NAME</tt> section, after the dash.
+
+*  A help text, from the <tt>DESCRIPTION</tt> section.
+
+*  The author's name, from the <tt>AUTHOR</tt> section.
+
+*  The copyright of the script, from the <tt>LICENSE</tt> section.
+
+*  Creation date - any text, from the <tt>DATE</tt> section.
+
+*  Menu path - a string, from the <tt>SYNOPSIS</tt> section. The path can take these forms, though there are 
other options:
+    * "&lt;Image&gt;/Filters/Menu/Script Name"
+    * "&lt;Toolbox&gt;/Xtns/Perl/Script Name"If you specify "&lt;Image&gt;", then the script is expecting to 
operate on, or create, an image. In this case Gimp::Fu will add as the first two parameters to the script the 
image and the drawable active when the script was invoked. If, however, the "image types" is left as blank or 
not specified, the plugin is expected to create and therefore return an image (and it will normally be placed 
under the <tt>File/Create</tt> menu).
+
+    If you specify "&lt;Toolbox&gt;", then the script is a standalone script that appears in the menu 
hierarchy under Filters (this is a historical thing) and takes all its inputs through the Gimp::Fu interface 
dialog.
+
+*  The acceptable image types, from the <tt>IMAGE TYPES</tt> section - a string. 
+This list contains a list of image types acceptable.
+This field is only used for scripts that are in the "&lt;Image&gt;" hieararchy. Some possible values are 
listed in the table below:
+
+    <table>
+    <tbody>
+    <tr>
+    <th bgcolor="#dfdfdf">value</th>
+    <th bgcolor="#dfdfdf">meaning</th>
+    </tr>
+    <tr>
+    <td  valign="top">*</td>
+    <td  valign="top">Any images are accepted</td>
+    </tr>
+    <tr>
+    <td  valign="top">RGB</td>
+    <td  valign="top">RGB images</td>
+    </tr>
+    <tr>
+    <td  valign="top">RGBA</td>
+    <td  valign="top">RGB images with alpha channels</td>
+    </tr>
+    <tr>
+    <td  valign="top">GREY</td>
+    <td  valign="top">Grey level images</td>
+    </tr>
+    <tr>
+    <td></td>
+    <td  valign="top">(left empty or no such section) Does not take image as input, **does** return an 
image. <tt>Gimp::Fu</tt> will automatically add that return value.</td>
+    </tr>
+    </tbody>
+    </table>
+
+*  Parameters, from the <tt>PARAMETERS</tt> section. This will be Perl code, which Gimp::Fu evaluates as a 
list of parameters. Each parameter in turn is a reference to an array containing the following four or five 
values (A reference to an array in Perl is simply an array written within square brackets):
+    * The type of the parameter. The types recognized by Gimp::Fu and their Perl counterparts are given in 
the following table:
+
+        <table>
+        <tbody>
+        <tr>
+        <th >Type</th>
+        <th  width="30%">Possible forms</th>
+        <th  width="50%">Comment</th>
+        </tr>
+        <tr>
+        <td  valign="top">PF_INT32  
+         PF_INT16  
+         PF_INT8  
+        </td>
+        <td  valign="top">42</td>
+        <td  valign="top">An integer.</td>
+        </tr>
+        <tr>
+        <td  valign="top">PF_FLOAT  
+        </td>
+        <td  valign="top">3.141</td>
+        <td  valign="top">A floating point number.</td>
+        </tr>
+        <tr>
+        <td  valign="top">PF_TOGGLE</td>
+        <td  valign="top">0  
+        1</td>
+        <td  valign="top">A boolean value.</td>
+        </tr>
+        <tr>
+        <td  valign="top">PF_SLIDER  
+         PF_SPINNER</td>
+        <td  valign="top">An integer value through a slider and a spinner interface. The range parameter 
should be specified and is interpreted as minimum, maximum, and step, e.g. [0,100,1].</td>
+        <td  valign="top">![](tpix.gif)</td>
+        </tr>
+        <tr>
+        <td  valign="top">PF_FONT</td>
+        <td  valign="top">"Arial"</td>
+        <td  valign="top">A font name.</td>
+        </tr>
+        <tr>
+        <td  valign="top">PF_STRING</td>
+        <td  valign="top">"A string"</td>
+        <td  valign="top">A string</td>
+        </tr>
+        <tr>
+        <td  valign="top">PF_COLOR  
+         PF_COLOUR</td>
+        <td  valign="top">[255,127,0]  
+         <tt>#ff7f00</tt></td>
+        <td  valign="top">A color may either be expressed as a reference to an array of three components, or 
as a hexadecimal triple, proceeded by the hash sign.</td>
+        </tr>
+        <tr>
+        <td  valign="top">PF_TOGGLE</td>
+        <td  valign="top">0  
+        1</td>
+        <td  valign="top">A boolean toggle</td>
+        </tr>
+        <tr>
+        <td  valign="top">PF_IMAGE</td>
+        <td  valign="top">-</td>
+        <td  valign="top">An image</td>
+        </tr>
+        <tr>
+        <td  valign="top">PF_DRAWABLE</td>
+        <td  valign="top">-</td>
+        <td  valign="top">A drawable.</td>
+        </tr>
+        <tr>
+        <td  valign="top">PF_BRUSH</td>
+        <td  valign="top">![](tpix.gif)</td>
+        <td  valign="top">A brush</td>
+        </tr>
+        <tr>
+        <td  valign="top">PF_GRADIENT</td>
+        <td  valign="top">![](tpix.gif)</td>
+        <td  valign="top">A gradient</td>
+        </tr>
+        <tr>
+        <td  valign="top">PF_PATTERN</td>
+        <td  valign="top">![](tpix.gif)</td>
+        <td  valign="top">A pattern</td>
+        </tr>
+        </tbody>
+        </table>
+
+    *  The name of the parameter - a string.
+    *  A help text for the parameter.
+    *  Default value for the parameter. This should be given in the form listed in the table above.
+    *  An array defining allowed range for the value. This is only used for PF_SLIDER and PF_SPINNER.
+
+*  Optionally, the return types of the function can be provided, from a <tt>RETURN VALUES</tt> section. This 
is specified in the same way as the Parameters above. There is no default or extra argument required.
+*  The perl code implementing the function - most commonly with a sub-reference, surrounded by "{" and "};", 
as below - thanks to Perl's prototyping, you don't need to specify "sub". 
+This will be called when the associated menu entry declared through the _Menu path_ described above. 
+When the sub is called it is passed a list of parameters as declared in field 9. 
+In the case of a "&lt;Image&gt;..." script, the active image and drawable (layer or channel) will be passed 
as first and second parameters. Thanks to the magic of Perl source filtering, you do not need to declare your 
variables but may simply use them:
+
+        :::perl
+        podregister {
+          $drawable->gauss_iir($radius, $horizontal, $vertical);
+        };
+        # ...
+        =head1 PARAMETERS
+
+          [ PF_FLOAT, 'radius', "Radius", 50.0 ],
+          [ PF_INT32, 'horizontal', 'Horizontal blur', 6 ],
+          [ PF_INT32, 'vertical', 'Vertical blur', 6 ],
+
+    You will also note that "plug_in_" has been omitted from the method call above, and that not all its 
parameters appear to be getting passed! This is thanks to the object-oriented implementation in Gimp-Perl, 
which when given a method name, searches various prefixes for the underlying function including the plug-in 
related ones (including <tt>script_fu_</tt>).
+
+    The code will normally display a new image if it creates one, and also return the new image, in 
accordance with the return types declared in parameter 10 of the <tt>podregister</tt> call described above. 
This enables Gimp::Fu scripts to be used noninteractively by other scripts. More about that behaviour below.
+
+### 5.2. podregister parameters
+
+You will have noticed above that the parameters to the function given to <tt>podregister</tt> used 
parameters either named in the POD, or supplied by <tt>Gimp::Fu</tt>, such as <tt>$drawable</tt>. This is 
because <tt>podregister</tt> automatically makes available to your function all the variables declared either 
in the POD documentation (the "PARAMETERS" section) or added depending on your "image types".
+
+### 5.3. A commented script
+
+The following Gimp::Fu script example shows the steps described in the previous section. It registers a 
script that takes two values, the size of the image and a color, and then produces an image of the requested 
size with the requested color. Quite useless, but it shows the important steps of how to register a script, 
how to create a new image, and how to access some PDB functions.
+
+    #!/usr/bin/perl -w 
+
+    use strict; 
+    use Gimp; 
+    use Gimp::Fu; 
+
+    podregister { 
+     # no need to have my ($size, $color) = @_; 
+     my $img = Gimp::Image->new($size, $size, RGB); # Create a new image 
+      # Create a new layer 
+      my $layer = $img->layer_new($size, $size, RGB, "Layer 1", 100, NORMAL_MODE); 
+      $img->insert_layer($layer, -1, 0); # add the layer to the image 
+      Gimp::Context->set_background($color); # Set background to required color 
+      $layer->edit_fill(BACKGROUND_FILL); # Paint the layer  
+      Gimp::Display->new($img); 
+      return $img; # Return image - return implied by no IMAGE TYPES 
+    }; 
+
+    exit main; 
+    __END__ 
+
+    =head1 NAME 
+
+    img_uni - Create a uniform image 
+
+    =head1 SYNOPSIS 
+
+    <Image>/File/Create/Tutorial/Img Uni 
+
+    =head1 DESCRIPTION 
+
+    A tutorial script. 
+
+    =head1 PARAMETERS 
+
+    [PF_INT32,   "size", "Img size", 100], 
+    [PF_COLOR, "color", "Img color", [255,127,0]] 
+
+    =head1 AUTHOR 
+
+    Dov Grobgeld 
+
+    =head1 DATE 
+
+    2004-03-27 
+
+    =head1 LICENSE 
+
+    Dov Grobgeld (c) 
+
+Most of these commands are directly copied out the PDB.
+
+This script shows the essential steps of producing a stand-alone script:
+
+<table>
+<tbody>
+<tr>
+<th>line(s)</th>
+<th>Description</th>
+</tr>
+<tr>
+<td>7</td>
+<td>Registration of the extension</td>
+</tr>
+<tr>
+<td>9</td>
+<td>Creating a new image.</td>
+</tr>
+<tr>
+<td>11</td>
+<td>Creating one or more layers.</td>
+</tr>
+<tr>
+<td>12</td>
+<td>Attaching the layer to the image.</td>
+</tr>
+<tr>
+<td>13-14</td>
+<td>Do some painting operations in the layers.</td>
+</tr>
+<tr>
+<td>15</td>
+<td>Display the new image</td>
+</tr>
+<tr>
+<td>16</td>
+<td>Return the image to the caller</td>
+</tr>
+</tbody>
+</table>
+
+To test the script, save it in the directory <tt>$HOME/.gimp-2.8/plug-ins</tt>. (A more official way to add 
scripts is to use the <tt>gimptool-2.0 --install-bin</tt> command). It must then be made executable through 
the command:
+
+    chmod +x $HOME/.gimp-2.8/plug-ins/uni
+
+Then start GIMP. It is generally a good idea to test the syntax of the script with <tt>perl -c</tt> before 
starting GIMP.
+
+**Note:** Due to the way GIMP works, it is not possible to add scripts once GIMP is running. On the other 
hand, it is possible to change a script which has already been registered, as long as the parameters don't 
change.
+
+The script is now accessible through the menu system through the **File/Create/Tutorial** top menu:
+
+<figure>
+<img src="uni-menu.png" alt="uni-menu.png" />
+</figure>
+
+When choosing this menu entry the following screen is popped up:
+
+<figure>
+<img src="uni-entry.png" alt="uni-entry.png" />
+</figure>
+
+Choosing the default values results in the image:
+
+<figure>
+<img src="uni-result.png" alt="uni-result.png" />
+</figure>
+
+## 6. Object oriented syntax
+
+Gimp-Perl provides an alternative object-oriented syntax for the image and the drawable commands. Here is a 
table showing the procedural vs the object oriented syntax for a few commands:
+
+<table>
+<tbody>
+<tr>
+<th bgcolor="#E0E0E0">procedural syntax</th>
+<th bgcolor="#E0E0E0">object oriented syntax</th>
+</tr>
+<tr>
+<td >gimp_image_insert_layer($drw,0,0);</td>
+<td >$img->insert_layer($drw,0,0);</td>
+</tr>
+<tr>
+<td >gimp_drawable_width($drw);</td>
+<td >$drw->width;</td>
+</tr>
+</tbody>
+</table>
+
+The substitution rule for converting a PDB into a method is as simple as erasing `gimp_image_` (or sometimes 
`gimp_`) from the beginning of the function call and calling this method through the image object. Similarly 
for the <tt>gimp_drawable_...</tt> functions. See the [Gimp-Perl 
docs](http://search.cpan.org/dist/Gimp/Gimp.pm#OBJECT-ORIENTED_SYNTAX) for more detail.
+
+Note that the object-oriented syntax appears to be only syntactic sugar that makes the calling syntax 
cleaner. The error messages are still given in the procedural format. What is going on is that GIMP, and the 
library on which it is implemented (Glib), use C in an object-oriented fashion.
+
+## 7. Painting areas with selections
+
+In the <tt>uni</tt> script the function <tt>gimp_edit_fill</tt> was called to fill the whole image. Looking 
at the info for <tt>gimp_edit_fill</tt> in the DB browser we find the following:
+
+<table>
+<tbody>
+<tr>
+<th align="right" valign="top">Name:</th>
+<td  colspan="3">gimp_edit_fill</td>
+</tr>
+<tr>
+<th align="right" valign="top">Blurb:</th>
+<td colspan="3" valign="top">Fill selected area of drawable</td>
+</tr>
+<tr>
+<th align="right" valign="top">In:</th>
+<td valign="top">DRAWABLE</td>
+<td valign="top">drawable</td>
+<td valign="top">The drawable to fill from</td>
+</tr>
+<tr>
+<th></th>
+<td valign="top">INT32</td>
+<td valign="top">fill_type</td>
+<td valign="top">The type of fill { FOREGROUND-FILL (0), BACKGROUND-FILL (1), WHITE-FILL (2), 
TRANSPARENT-FILL (3), PATTERN-FILL (4), NO-FILL (5) }</td>
+</tr>
+<tr>
+<th valign="top">Help:</th>
+<td colspan="3">This procedure fills the specified drawable with the fill mode. If the fill mode is 
foreground, the current foreground color is used. If the fill mode is background, the current background 
color is used. Other fill modes should not be used. This procedure only affects regions within a selection if 
there is a selection active. If you want to fill the whole drawable, regardless of the selection, use 
'gimp-drawable-fill'.</td>
+</tr>
+</tbody>
+</table>
+
+Thus, if a selection is active when <tt>gimp_edit_fill</tt> is called, only the selected region of the 
drawable is painted. Note also that you must substitute "\_" for "-" in the names.
+
+There are lots of ways of choosing a selection as can be seen when searching for a "select" in the PDB. The 
example below uses <tt>gimp_image_select_rectangle</tt>, whose entry in the PDB looks as follows:
+
+<table>
+<tbody>
+<tr>
+<td >
+<table>
+<tbody>
+<tr>
+<th align="right" valign="top">Name:</th>
+<td  colspan="3">gimp-image-select-rectangle</td>
+</tr>
+<tr>
+<th align="right" valign="top">Blurb:</th>
+<td colspan="3" valign="top">Create a rectangular selection over the specified image</td>
+</tr>
+<tr>
+<th align="right" valign="top">In:</th>
+<td valign="top">IMAGE</td>
+<td valign="top">image</td>
+<td valign="top">The image</td>
+</tr>
+<tr>
+<th></th>
+<td valign="top">INT32</td>
+<td valign="top">operation</td>
+<td valign="top">The selection operation { CHANNEL-OP-ADD (0), CHANNEL-OP-SUBTRACT (1), CHANNEL-OP-REPLACE 
(2), CHANNEL-OP-INTERSECT (3) }</td>
+</tr>
+<tr>
+<th></th>
+<td valign="top">FLOAT</td>
+<td valign="top">x</td>
+<td valign="top">x coordinate of upper-left corner of rectangle</td>
+</tr>
+<tr>
+<th></th>
+<td valign="top">FLOAT</td>
+<td valign="top">y</td>
+<td valign="top">y coordinate of upper-left corner of rectangle</td>
+</tr>
+<tr>
+<th></th>
+<td valign="top">FLOAT</td>
+<td valign="top">width</td>
+<td valign="top">the width of the rectangle: width >= 0</td>
+</tr>
+<tr>
+<th></th>
+<td valign="top">FLOAT</td>
+<td valign="top">height</td>
+<td valign="top">the height of the rectangle: width >= 0</td>
+</tr>
+<tr>
+<th valign="top">Help:</th>
+<td colspan="3">This tool creates a rectangular selection over the specified image. The rectangular region 
can be either added to, subtracted from, or replace the contents of the previous selection mask. This 
procedure is affected by the following context setters: 'gimp-context-set-feather', 
'gimp-context-set-feather-radius'.</td>
+</tr>
+</tbody>
+</table>
+</td>
+</tr>
+</tbody>
+</table>
+
+A simple use of this function which selects a rectangle in the middle of an image and paints that rectangle 
with a user defined color. This example also introduces a couple of new features we haven't seen before:
+
+*   The script is associated with an image since its menu path starts with "&lt;Image&gt;/...". Note that as 
a result of this the callback sub in line 6 receives two additional parameters, the active image and the 
selected drawable.
+*   The use of the PDB functions <tt>gimp_image_undo_group_start</tt> and 
<tt>gimp_image_undo_group_end</tt>. These functions declare an undo group. When an undo is done on the image, 
instead of having the individual operators undo, all the actions between the undo start and the undo end 
calls will be undone at once.
+
+<table markdown='1'> 
+<tbody>
+<tr>
+<th bgcolor="#E0E0FF">[paint-select](paint-select)</th>
+</tr>
+<tr>
+<td bgcolor="#FFE0E0"><font color="black">
+
+    #!/usr/bin/perl -w 
+
+    use Gimp; 
+    use Gimp::Fu; 
+
+    podregister { 
+     my ($width, $height) = ($image->width, $image->height); 
+     # Select a rectangle inside the image and paint it with color 
+     $image->undo_group_start; 
+      $image->select_rectangle( 
+        CHANNEL_OP_REPLACE, $width/4, $height/4, $width/2, $height/2, 
+      ); 
+      Gimp::Context->set_background($color); 
+      $drawable->edit_fill(BACKGROUND_FILL); 
+      $image->selection_none; 
+      $image->undo_group_end; 
+      (); 
+    }; 
+
+    exit main; 
+    __END__ 
+
+    =head1 NAME 
+
+    img_paint_select - Paints the selection 
+
+    =head1 SYNOPSIS 
+
+    <Image>/Filters/Tutorial/Paint Select 
+
+    =head1 DESCRIPTION 
+
+    Paints the selection 
+
+    =head1 PARAMETERS 
+
+    [PF_COLOR, "color", "Rectangle color", [0,0,255]], 
+
+    =head1 RETURN VALUES 
+
+    =head1 IMAGE TYPES 
+
+    * 
+
+    =head1 AUTHOR 
+
+    Dov Grobgeld 
+
+    =head1 DATE 
+
+    1999-05-14 
+
+    =head1 LICENSE 
+
+    Dov Grobgeld 
+
+</font></td>
+</tr>
+</tbody>
+</table>
+
+The result when run on our previous image:
+
+<figure>
+<img src="paint-select.png" alt="paint-select.png" />
+</figure>
+
+### 7.1. Complex selections
+
+Besides rectangular selections elliptical selections may also be created through the PDB functions 
<tt>gimp_image_select_ellipse</tt> and <tt>gimp_image_select_polygon</tt> which allows the selection of 
ellipses and polygons.
+
+More complex selections may be created through the channel mechanism. The PDB <tt>gimp_channel_new()</tt> 
(<tt>Gimp::Channel->new</tt>) creates a new channel. The channel is a drawable that may be painted into, just 
like any other drawable, but with the difference that it is always a grey level image. Once the channel is 
finished, the channel may be loaded into the selection through the PDB function 
<tt>gimp_image_select_item</tt>.
+
+Search for "select" in the DB Browser to see a list of all the selection related functions.
+
+### 7.2. Loops
+
+In perl it is trivial to write loops that together with the various selection tools gives powerful creative 
possibilities. Here is an example that mixes colors in circles. There is nothing really new here, but it 
shows the power of what we have described above.
+
+<table markdown="1">
+<tbody>
+<tr>
+<th bgcolor="#E0E0FF">[circles](circles)</th>
+</tr>
+<tr>
+<td bgcolor="#FFE0E0"><font color="black">
+
+    #!/usr/bin/perl 
+
+    use Gimp; 
+    use Gimp::Fu; 
+
+    podregister { 
+     # Create the background 
+     my $img = Gimp::Image->new($size, $size, RGB); 
+     $layer = $img->layer_new($size, $size, RGB, "Layer 1", 100, NORMAL_MODE); 
+      $img->insert_layer($layer, -1, 0); 
+      Gimp::Context->set_background($bgcolor); 
+      $layer->edit_fill(BACKGROUND_FILL); 
+      my $ncircles = int($size/$radius/2); 
+      for ($i=0; $i<$ncircles; $i++) { 
+        for ($j=0; $j<$ncircles; $j++) { 
+          # Select a circle 
+          $img->select_ellipse( 
+        CHANNEL_OP_REPLACE, $i*$radius*2, $j*$radius*2, $radius*2, $radius*2 
+          ); 
+          my $color = [$i*30, ($ncircles-$j)*25, ($i+$j)*15]; # mix colors 
+          Gimp::Context->set_background($color); 
+          $layer->edit_fill(BACKGROUND_FILL); 
+        } 
+      } 
+      Gimp::Display->new($img); 
+      return $img; 
+    }; 
+
+    exit main; 
+    __END__ 
+
+    =head1 NAME 
+
+    circles - a loop 
+
+    =head1 SYNOPSIS 
+
+    <Image>/File/Create/Tutorial/Circles 
+
+    =head1 DESCRIPTION 
+
+    a loop 
+
+    =head1 PARAMETERS 
+
+    [PF_INT32, "size", "Image size", 100], 
+    [PF_COLOR, "bgcolor", "Background color", [40,180,60]], 
+    [PF_INT32, "radius", "Circle radius", 10] 
+
+    =head1 AUTHOR 
+
+    Dov 
+
+    =head1 DATE 
+
+    1999-05-14 
+
+    =head1 LICENSE 
+
+    Dov 
+
+</font></td>
+
+</tr>
+
+</tbody>
+
+</table>
+
+The result:
+
+<figure>
+<img src="circles.png" alt="circles.png" />
+</figure>
+
+## 8. Creating text
+
+### 8.1. Hello World - writing text in an image
+
+To create text the PDB function <tt>gimp_text_fontname()</tt> may be used.
+
+Here is an example of a script that creates an image containing "Hello world".
+
+<table markdown="1">
+<tbody>
+<tr>
+<th bgcolor="#E0E0FF">[hello-world1](hello-world1)</th>
+</tr>
+<tr>
+<td bgcolor="#FFE0E0">
+
+    #!/usr/bin/perl 
+
+    use Gimp; 
+    use Gimp::Fu; 
+
+    podregister { 
+     my $img = Gimp::Image->new(350, 100, RGB); 
+     my $drw = $img->layer_new($img->width, $img->height, 
+                RGB, "BG", 100, NORMAL_MODE); 
+      $img->insert_layer($drw, -1, 0); 
+      Gimp::Context->set_background("black"); 
+      $drw->edit_fill(BACKGROUND_FILL); 
+      Gimp::Context->set_foreground([255,255,0]); # Choose color of text 
+      # Create the text 
+      my $textlayer = $drw->text_fontname(0, 0, $text, 10, 1, $size, POINTS, $font); 
+      $textlayer->floating_sel_anchor; 
+      Gimp::Display->new($img); 
+      return $img; 
+    }; 
+
+    exit main; 
+    __END__ 
+
+    =head1 NAME 
+
+    hello_world1 - basic text 
+
+    =head1 SYNOPSIS 
+
+    <Image>/File/Create/Tutorial/Basic text 1 
+
+    =head1 DESCRIPTION 
+
+    basic text 
+
+    =head1 PARAMETERS 
+
+    [PF_FONT, "font", "Font", "Sans"], 
+    [PF_INT32, "size", "Font size", 70], 
+    [PF_STRING, "text", "Text", "Hello world!"] 
+
+    =head1 AUTHOR 
+
+    Dov 
+
+    =head1 DATE 
+
+    2004-03-27 
+
+    =head1 LICENSE 
+
+    Dov 
+
+</td>
+</tr>
+</tbody>
+</table>
+
+The result:
+
+<figure>
+<img src="hello-world1.png" alt="hello-world1.png" />
+</figure>
+
+One thing to note in this script is that the text that is created on line 15 is a _floating layer_, that 
needs to be anchored to its parent layer. This is done in line 16 through the call to 
<tt>gimp_floating_sel_anchor()</tt>.
+
+This script suffers from the problem that the image size is unrelated to the text size. This is taken care 
of in the following more complex example which shows the basic steps for a logo generating script:
+
+*   Creation of an image of arbitrary size
+*   Creation of a background drawable of an arbitrary size
+*   Creation of text layer which exactly fits the text with the command <tt>gimp_text_fontname</tt>.
+*   Resizing the image and the background to the size of the text layer.
+
+The result is an image composed of two layers; a transparent text layer on top of a uniform background.
+
+<table markdown="1">
+<tbody>
+<tr>
+<th bgcolor="#E0E0FF">[basic-logo](basic-logo)</th>
+</tr>
+<tr>
+<td bgcolor="#FFE0E0"><font color="black">
+
+    #!/usr/bin/perl 
+
+    use Gimp; 
+    use Gimp::Fu; 
+
+    podregister { 
+     my $img = Gimp::Image->new(100, 100, RGB); # any old size 
+     my $background = $img->layer_new( 
+       100, 100, RGB, "Background", 100, NORMAL_MODE 
+     ); 
+     $img->insert_layer($background, 0, 0); 
+     Gimp::Context->set_foreground($fgcolor); # Choose color of text 
+     # Create the text layer. Using -1 as the drawable creates a new layer. 
+     my $text_layer = $img->text_fontname( 
+       -1, 0, 0, $text, $border, 1, $size, POINTS, $font 
+     ); 
+     # Get size of the text drawable and resize the image and the 
+     # background layer to this size. 
+     my ($width, $height) = ($text_layer->width, $text_layer->height); 
+     $img->resize($width, $height, 0, 0); 
+     $background->resize($width, $height, 0, 0); 
+     # Fill the background layer now when it has the right size. 
+     Gimp::Context->set_background($bgcolor); 
+     $background->edit_fill(BACKGROUND_FILL); 
+     Gimp::Display->new($img); 
+     return $img; 
+    }; 
+
+    exit main; 
+    __END__ 
+
+    =head1 NAME 
+
+    basic_logo - Basic logo 
+
+    =head1 SYNOPSIS 
+
+    <Image>/File/Create/Tutorial/Basic Logo 
+
+    =head1 DESCRIPTION 
+
+    Make a basic logo. 
+
+    =head1 PARAMETERS 
+
+    [PF_FONT, "font", "Font",   "Utopia Bold"], 
+    [PF_INT32, "size", "Font size", 10], 
+    [PF_INT32, "border", "Border", 10], 
+    [PF_STRING, "text", "Text", "Hello world!"], 
+    [PF_COLOR, "bgcolor", "Background color", [40,180,160]], 
+    [PF_COLOR, "fgcolor", "Foreground color", [255,255,0]], 
+
+    =head1 AUTHOR 
+
+    Dov Grobgeld 
+
+    =head1 DATE 
+
+    2004-03-27 
+
+    =head1 LICENSE 
+
+    Dov Grobgeld 
+
+</font></td>
+
+</tr>
+
+</tbody>
+
+</table>
+
+Note the special syntax of <tt>gimp_image_text_fontname</tt> in line 14 in <tt>basic-logo</tt> with the 
drawable = -1. The special case drawable=-1 means that instead of creating a floating layer, a new image 
layer will be created.
+
+The dialog and the resulting image:
+
+<figure>
+<img src="basic-logo-dialog.png" alt="basic-logo-dialog.png" />
+</figure>
+
+## 9. Floating selections
+
+When a region has been selected through one of the selection routines, the area outlined by the selection 
may be copied to the cut-buffer through the <tt>gimp_edit_copy</tt> command. The cut-buffer may subsequently 
be pasted into a different layer through the <tt>gimp_edit_paste</tt> command. When a layer is pasted it 
becomes a floating selection. This floating selection may be moved to its required position by the command 
<tt>gimp_layer_set_offsets</tt>, and finally it is pasted by the <tt>gimp_floating_sel_anchor</tt> command. 
Another way of determining the position of a pasted layer is to create a selection in the target image before 
the cut-buffer is pasted.
+
+This is illustrated in the following program, which works on one image and takes as a parameter another 
image, which it concatenates to the right of the first image. The lines 28-38 shows how the second image is 
copied and glued into the first image.
+
+<table markdown="1">
+<tbody>
+<tr>
+<th bgcolor="#E0E0FF">[horiz-cat](horiz-cat)</th>
+</tr>
+<tr>
+<td bgcolor="#FFE0E0"><font color="black">
+
+    :::perl
+    #!/usr/bin/perl 
+
+    use Gimp; 
+    use Gimp::Fu; 
+
+    podregister { 
+     die "Must select layer.\n" unless $drawable->is_layer; 
+     $drawable->become('Gimp::Layer'); 
+     my $image2 = $drawable2->get_image; 
+     my ($w1, $h1) = ($drawable->width, $drawable->height); 
+     my ($w2, $h2) = ($drawable2->width, $drawable2->height); 
+     my $hmax = $h1 > $h2 ? $h1 : $h2; # new height is maximum height of the images 
+     $image->undo_group_start; # Create an undo group 
+     # Resize the drawable layer to make room for the image 
+     $image->resize($w1+$w2, $hmax, 0, ($hmax-$h1)/2); 
+     $drawable->resize($w1+$w2, $hmax, 0, ($hmax-$h1)/2); 
+     # Copy $drawable2 and paste it into the new space of $drawable1 
+     $image2->selection_all; # select all of image2 
+     $drawable2->edit_copy; 
+     $image2->selection_none; 
+     # make a selection in image 1 where $drawable2 is to be pasted 
+     $image->select_rectangle(CHANNEL_OP_ADD, $w1, ($hmax-$h2)/2, $w2, $h2); 
+     $drawable->edit_paste(0)->floating_sel_anchor; # paste and then anchor it 
+     $image->undo_group_end; # Close the undo group 
+     return; 
+    }; 
+
+    exit main; 
+    __END__ 
+
+    =head1 NAME 
+
+    horiz_cat - Horizontal concat 
+
+    =head1 SYNOPSIS 
+
+    <Image>/Filters/Tutorial/Horizontal Concat 
+
+    =head1 DESCRIPTION 
+
+    Horizontal concatenation of images. 
+
+    =head1 PARAMETERS 
+
+    [PF_DRAWABLE,   "drawable2", "Drawable to concatenate", undef], 
+
+    =head1 IMAGE TYPES 
+
+    * 
+
+    =head1 AUTHOR 
+
+    Dov Grobgeld 
+
+    =head1 DATE 
+
+    2004-03-27 
+
+    =head1 LICENSE 
+
+    Dov Grobgeld 
+
+</font></td>
+</tr>
+</tbody>
+</table>
+
+You might notice something very important on lines 7 and 8: we "know" that we'll always pass a layer as the 
first drawable, but we're checking that anyway. Then we're telling Gimp-Perl the drawable definitely _is_ a 
layer. The reason for that is that (obviously) <tt>Gimp::Layer</tt> and <tt>Gimp::Drawable</tt> have 
different methods available to them, and what matters here is that <tt>Gimp::Drawable</tt> does not have a 
resize method. (i.e. The PDB does not have a <tt>gimp_drawable_resize</tt> function)
+
+## 10. The Perl Server and stand-alone scripts
+
+So far the scripts have all been started from the menu structure within GIMP. But using <tt>Gimp::Fu</tt> 
there is another possibility, and that is to run the scripts from the command line, as a normal Perl program. 
When run this way the script tries to connect to the Perl-Server, and if it fails it will launch a GIMP of 
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 <tt>Filters/Perl</tt> 
menu.
+
+When a <tt>Gimp::Fu</tt> script is run from the command line, the result is the same as when it is run 
through the menus, except that it may be run with the <tt>--output</tt> parameter. This 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 <tt>--output</tt> has some special magic that allows to set some special image saving 
parameters, like interlace, quality factor, etc. See the [<tt>Gimp::Fu</tt> 
docs](http://search.cpan.org/dist/Gimp/Gimp/Fu.pm#MISCELLANEOUS_FUNCTIONS) for more detail
+
+Here are two invocations of the scripts declared above, but with output written to a jpg file and a png file.
+
+<table border="None">
+<tbody>
+<tr>
+<th bgcolor="#E0E0FF"><a href="perl-gimp-from-shell">perl-gimp-from-shell</a></th>
+</tr>
+<tr>
+<td bgcolor="#FFE0E0"><font color="black">
+<pre> <font color="red" size="-1">1:</font> uni -o /tmp/uni.png --size 100 --color purple 
+ <font color="red" size="-1">2:</font> basic-logo --font 'utopia 100' -o /tmp/bl.ppm --size 20 --text "Perl 
rules" </pre>
+</font></td>
+</tr>
+</tbody>
+</table>
+
+Another important use of this interface is that it enables running the Perl debugger on the perl scripts.
+
+### 10.1. A shell for Gimp-Perl
+
+When using the Perl-Server it is not necessary to use <tt>Gimp::Fu</tt> and the <tt>podregister</tt> 
function. Instead you may call <tt>Gimp::on_net</tt>, which takes as a parameter a reference to a sub routine 
that is called when your script has connected to a GIMP (or started one up).
+
+For a simple but powerful example of the use of the Gimp without Fu, here is a an interactive Gimp-Perl 
shell that may be run from the command line:
+
+<table markdown="1"> 
+<tbody>
+<tr>
+<th bgcolor="#E0E0FF">[pg-shell](pg-shell)</th>
+</tr>
+<tr>
+<td bgcolor="#FFE0E0"><font color="black">
+
+    #!/usr/bin/perl 
+
+    #  An interactive command line shell to GIMP. 
+    use Gimp; 
+    use Term::ReadLine; 
+
+    Gimp::on_net { 
+       $term = new Term::ReadLine("Gimp"); 
+       while( defined ($_ = $term->readline("Gimp> "))) { 
+            $res = eval($_) . "\n"; 
+            print("Error: $@"), next if $@; 
+            print "\n"; 
+            Gimp->displays_flush(); 
+        } 
+     }; 
+     
+     exit Gimp::main; 
+
+</font></td>
+</tr>
+</tbody>
+</table>
+
+Here is an example of an interactive session with this shell:
+
+<table border="None">
+
+<tbody>
+
+<tr>
+
+<th bgcolor="#E0E0FF"><a href="interact">interact</a></th>
+
+</tr>
+
+<tr>
+
+<td bgcolor="#FFE0E0"><font color="black">
+
+<pre> <font color="red" size="-1">1:</font> Gimp> $img = Gimp::Image->new(100,100,RGB) 
+ <font color="red" size="-1">2:</font> Gimp> $drw = $img->layer_new(100,100,RGB_IMAGE, "bg", 100, 
NORMAL_MODE) 
+ <font color="red" size="-1">3:</font> Gimp> $img->insert_layer($drw,-1, 0) 
+ <font color="red" size="-1">4:</font> Gimp> Gimp::Display->new($img) 
+ <font color="red" size="-1">5:</font> Gimp> $drw->edit_clear 
+ <font color="red" size="-1">6:</font> Gimp> print Gimp::Image->list 
+ <font color="red" size="-1">7:</font> Gimp::Image->existing(1) </pre>
+
+</font></td>
+
+</tr>
+
+</tbody>
+
+</table>
+
+## 11. 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 (see 
<tt>[examples/example-no-fu](http://search.cpan.org/dist/Gimp/examples/example-no-fu)</tt> in the Gimp-Perl 
distribution).
+*   Writing fully-fledged plug-ins that manipulate the tile data through the Perl Data Language (PDL) module 
(see <tt>[examples/map_to_gradient](http://search.cpan.org/dist/Gimp/examples/map_to_gradient)</tt> in the 
Gimp-Perl distribution).
+*   Using Gimp-Perl in a CGI environment.
+*   How to fill with gradients in a plugin (see 
<tt>[examples/randomblends](http://search.cpan.org/dist/Gimp/examples/randomblends)</tt> in the Gimp-Perl 
distribution).
+*   How to do polygon selections (see 
<tt>[examples/triangle](http://search.cpan.org/dist/Gimp/examples/triangle)</tt> in the Gimp-Perl 
distribution).
+
+The Gimp-Perl distribution also has over 50 more example scripts supplied. Take a look through those for 
further inspiration!
+
+## 12. Links and references
+
+*   [<tt>Gimp::Fu</tt> documentation](http://search.cpan.org/dist/Gimp/Gimp/Fu.pm)
+*   [The rest of the Gimp-Perl module docs](http://search.cpan.org/dist/Gimp/)
+*   [The GIMP home page](http://www.gimp.org)
+*   [GIMP Registry with Perl plug-ins](http://registry.gimp.org/)
+
+* * *
+
+<address>Please send your comments to [dov grobgeld gmail com](mailto:dovNOSPAM imagic weizmann ac 
il)</address>
+
+<style>
+table {
+max-width: 40rem;
+font-size: 0.85rem;
+margin: 1rem auto;
+}
+table td, table th{
+    padding: 0.25rem;
+}
+</style>
diff --git a/content/tutorials/Basic_Perl/interact b/content/tutorials/Basic_Perl/interact
new file mode 100644
index 0000000..f7d9df6
--- /dev/null
+++ b/content/tutorials/Basic_Perl/interact
@@ -0,0 +1,7 @@
+Gimp> $img = Gimp::Image->new(100,100,RGB)
+Gimp> $drw = $img->layer_new(100,100,RGB_IMAGE, "bg", 100, NORMAL_MODE)
+Gimp> $img->insert_layer($drw,-1, 0)
+Gimp> Gimp::Display->new($img)
+Gimp> $drw->edit_clear
+Gimp> print Gimp::Image->list
+Gimp::Image->existing(1)
diff --git a/content/tutorials/Basic_Perl/paint-select b/content/tutorials/Basic_Perl/paint-select
new file mode 100644
index 0000000..6c426f8
--- /dev/null
+++ b/content/tutorials/Basic_Perl/paint-select
@@ -0,0 +1,55 @@
+#!/usr/bin/perl -w
+
+use Gimp;
+use Gimp::Fu;
+
+podregister {
+  my ($width, $height) = ($image->width, $image->height);
+  # Select a rectangle inside the image and paint it with color
+  $image->undo_group_start;
+  $image->select_rectangle(
+    CHANNEL_OP_REPLACE, $width/4, $height/4, $width/2, $height/2,
+  );
+  Gimp::Context->set_background($color);
+  $drawable->edit_fill(BACKGROUND_FILL);
+  $image->selection_none;
+  $image->undo_group_end;
+  ();
+};
+
+exit main;
+__END__
+
+=head1 NAME
+
+img_paint_select - Paints the selection
+
+=head1 SYNOPSIS
+
+<Image>/Filters/Tutorial/Paint Select
+
+=head1 DESCRIPTION
+
+Paints the selection
+
+=head1 PARAMETERS
+
+ [PF_COLOR, "color", "Rectangle color", [0,0,255]],
+
+=head1 RETURN VALUES
+
+=head1 IMAGE TYPES
+
+*
+
+=head1 AUTHOR
+
+Dov Grobgeld
+
+=head1 DATE
+
+1999-05-14
+
+=head1 LICENSE
+
+Dov Grobgeld
diff --git a/content/tutorials/Basic_Perl/paint-select.png b/content/tutorials/Basic_Perl/paint-select.png
new file mode 100644
index 0000000..ef42d4f
Binary files /dev/null and b/content/tutorials/Basic_Perl/paint-select.png differ
diff --git a/content/tutorials/Basic_Perl/perl-gimp-from-shell 
b/content/tutorials/Basic_Perl/perl-gimp-from-shell
new file mode 100644
index 0000000..605e0a4
--- /dev/null
+++ b/content/tutorials/Basic_Perl/perl-gimp-from-shell
@@ -0,0 +1,2 @@
+uni -o /tmp/uni.png --size 100 --color purple
+basic-logo --font 'utopia 100' -o /tmp/bl.ppm --size 20 --text "Perl rules"
diff --git a/content/tutorials/Basic_Perl/pg-shell b/content/tutorials/Basic_Perl/pg-shell
new file mode 100644
index 0000000..c9eb308
--- /dev/null
+++ b/content/tutorials/Basic_Perl/pg-shell
@@ -0,0 +1,17 @@
+#!/usr/bin/perl
+
+#  An interactive command line shell to GIMP.
+use Gimp;
+use Term::ReadLine;
+
+Gimp::on_net {
+    $term = new Term::ReadLine("Gimp");
+    while( defined ($_ = $term->readline("Gimp> "))) {
+        $res = eval($_) . "\n";
+        print("Error: $@"), next if $@;
+        print "\n";
+        Gimp->displays_flush();
+    }
+};
+
+exit Gimp::main;
diff --git a/content/tutorials/Basic_Perl/tpix.gif b/content/tutorials/Basic_Perl/tpix.gif
new file mode 100644
index 0000000..94185a4
Binary files /dev/null and b/content/tutorials/Basic_Perl/tpix.gif differ
diff --git a/content/tutorials/Basic_Perl/uni b/content/tutorials/Basic_Perl/uni
new file mode 100644
index 0000000..6eb7c3f
--- /dev/null
+++ b/content/tutorials/Basic_Perl/uni
@@ -0,0 +1,49 @@
+#!/usr/bin/perl -w
+
+use strict;
+use Gimp;
+use Gimp::Fu;
+
+podregister {
+  # no need to have my ($size, $color) = @_;
+  my $img = Gimp::Image->new($size, $size, RGB); # Create a new image
+  # Create a new layer
+  my $layer = $img->layer_new($size, $size, RGB, "Layer 1", 100, NORMAL_MODE);
+  $img->insert_layer($layer, -1, 0); # add the layer to the image
+  Gimp::Context->set_background($color); # Set background to required color
+  $layer->edit_fill(BACKGROUND_FILL); # Paint the layer 
+  Gimp::Display->new($img);
+  return $img; # Return image - return implied by no IMAGE TYPES
+};
+
+exit main;
+__END__
+
+=head1 NAME
+
+img_uni - Create a uniform image
+
+=head1 SYNOPSIS
+
+<Image>/File/Create/Tutorial/Img Uni
+
+=head1 DESCRIPTION
+
+A tutorial script.
+
+=head1 PARAMETERS
+
+ [PF_INT32,   "size", "Img size", 100],
+ [PF_COLOR, "color", "Img color", [255,127,0]]
+
+=head1 AUTHOR
+
+Dov Grobgeld
+
+=head1 DATE
+
+2004-03-27
+
+=head1 LICENSE
+
+Dov Grobgeld (c)
diff --git a/content/tutorials/Basic_Perl/uni-entry.png b/content/tutorials/Basic_Perl/uni-entry.png
new file mode 100644
index 0000000..491f487
Binary files /dev/null and b/content/tutorials/Basic_Perl/uni-entry.png differ
diff --git a/content/tutorials/Basic_Perl/uni-menu.png b/content/tutorials/Basic_Perl/uni-menu.png
new file mode 100644
index 0000000..eef8a21
Binary files /dev/null and b/content/tutorials/Basic_Perl/uni-menu.png differ
diff --git a/content/tutorials/Basic_Perl/uni-result.png b/content/tutorials/Basic_Perl/uni-result.png
new file mode 100644
index 0000000..07e8efc
Binary files /dev/null and b/content/tutorials/Basic_Perl/uni-result.png differ
diff --git a/content/tutorials/Basic_Scheme/index.md b/content/tutorials/Basic_Scheme/index.md
new file mode 100644
index 0000000..2dce6ca
--- /dev/null
+++ b/content/tutorials/Basic_Scheme/index.md
@@ -0,0 +1,541 @@
+Title: Basic Scheme
+Date: 2015-08-18T16:27:00-05:00
+Modified: 2015-08-18T16:27:04-05:00
+Author: Dov Grobgeld
+
+
+Text and images Copyright (C) 2002 [Dov Grobgeld](mailto:dovNOSPAM imagic weizmann ac il) and may not be 
used without permission of the author.
+
+_Editor's note: since this tutorial was published, the old GIMP Script-Fu interpreter (SIOD) has been 
replaced by a newer and better one (TinyScheme). A [Script-Fu migration guide](/docs/script-fu-update.html) 
is available._
+
+## Intention
+
+One of the wonderful features of GIMP is that it all its functionality may be accessed through scripting. 
The major scripting language for GIMP that has been attached to it today is Scheme. This document will try to 
be a brief introduction to Scheme, just teaching the essentials in order to write Script-Fu scripts, without 
getting into the programming language theory that is so typical of other Scheme references.
+
+## 1\. Expressions
+
+Scheme is a Lisp variant and all expressions are surrounded by parentheses. E.g. a list which will calculate 
the sum of 3 and 4 is written
+
+    :::scheme
+       (+ 3 4)
+
+
+The + sign is the addition function and 3 and 4 are the first and second parameters to this function. 
Expressions may be nested, so the expression (3+4)*(5/6) would in Scheme be written
+
+    :::scheme
+       (* (+ 3 4) (/ 5 6))
+
+
+White space has no importance so the above expression may as well be written:
+
+    :::scheme
+    (*
+     (+ 3 4)
+     (/ 5 6))
+
+
+## 2\. Functions
+
+Aside from the four arithmetic functions that are represented through the symbols + - * / there are lots of 
other functions built into the language. All of them have the form
+
+    :::scheme
+    (foo param1 param2 ...)
+
+
+Additional functions may be defined by the user through the define keyword. E.g. a function that calculates 
the square value of its single argument may be declared like this
+
+    :::scheme
+    (define (square x) (* x x))
+
+
+and this function may be called through
+
+    :::scheme
+    (square 5)
+
+
+## 3\. Variables and lists
+
+Variables may be declared and set through the set! command. (These variables will be global but this should 
not bother the casual GIMP programmer). Here are a couple of assignments:
+
+    :::scheme
+    (set! grey_value 85)
+    (set! angle (* (/ 30 180) 3.141)
+
+
+Lisp and its variants make heavy use of lists. Script-Fu is no exception and it uses e.g. a list of three 
elements to write a RGB color. E.g. the color orange would be written
+
+    :::scheme
+    '(255 127 0)
+
+
+The ' sign is necessary in order to tell Scheme that this is a literal list. If the ' was omitted Scheme 
would try to look up a function with the name 255 and send it the two parameters 127 and 0, which is 
obviously not what we want.
+
+To create a variable called orange with the above value and then set the background color to it we may do
+
+    :::scheme
+    (set! orange '(255 127 0))
+    (gimp-set-background-color orange)
+
+
+## 3.1 car, cdr and friends (*)
+
+A list in Scheme is always composed of a head and a tail. The head is the first entry in the list, and the 
tail is the rest of the elements in the list. This means that the list (255 127 63) really means (255 (127 
(63 ()))) but Scheme allows the previous form as a shortcut. The car function is used to return the head of 
the list and the cdr (usually pronounced cudder) is used to get the tail of the list.
+
+[The following is a test of the above functions which may be interactively conducted in the Script-Fu 
console.]
+
+    :::scheme
+    => (set! color '(255 127 63))
+    (255 127 63)
+    => (car color)
+    255
+    => (cdr color)
+    (127 63)
+
+
+To get the blue component of a color it is necessary to apply the cdr function twice and then the car 
function.
+
+    :::scheme
+    => (car (cdr (cdr color)))
+    63
+
+
+This is very inconvenient to write. Therefore there have been defined abreviations of the form cadr, cddr, 
caddr, etc that concatenate the operations described above. The previous expression may therefore be much 
more conveniently written:
+
+    :::scheme
+    => (caddr color)
+    63
+
+
+For the Script-Fu writer one of the most important uses of the car function is to access the returned values 
from the built-in GIMP functions. All gimp-functions return a list, and even if the list contains only one 
element it must be accessed by car. This is e.g. the case for the important functions gimp-new-image and 
gimp-new-layer used below.
+
+## 3.2 Local variables (*)
+
+More experienced Scheme programmers mostly use local variables instead of the global variables described 
above. This is considered better programming practice and this construct should be recognized in order to be 
able to read others Script-Fu scripts.
+
+Local variables are declared through the the let keyword as in the following example:
+
+    :::scheme
+    (let* ((a 3)
+           (b 4))
+          ((* a b)))
+
+
+Here a and b have a local scope and retain their values only up to the closing paren matching the one before 
let\* .
+
+## 4\. The GIMP PDB
+
+All functionality of GIMP is available through the procedural database (PDB). Each procedural database 
function has a corresponding Scheme function mapping. E.g.
+
+    :::scheme
+    (gimp-image-new 100 150 RGB)
+
+
+produces a new GIMP image of type RGB and size 100x150.
+
+All the functions of the PDB may be accessed through the Procedure Browser that is available from the main 
menu through <span class="filter">Xtns ->Procedure Browser</span>.... E.g. the Procedure Browser entry for 
uni-img, which we will define in the example below looks like this:
+
+<figure>
+<img src="pdb-uni-entry.png" alt="pdb-uni-entry.png" />
+</figure>
+
+For the Script-Fu programmer this information shows that uni-img may be called with three parameters of the 
types INT32, STRING and COLOR. The different types will be explained below.
+
+## 5\. Registering the script with Script-Fu
+
+After a function has been written it has to be registered with Script-Fu before it can be used. This is done 
through the Scheme function script-fu-register. The registering has following purposes:
+
+1.  Tell Script-Fu the type of parameters the script takes and give these parameters default values.
+2.  Give the script a name to be used as the menu label.
+3.  Register the script as a command in the PDB.
+
+The last point above actually means that a script is from Gimp's viewpoint in no way different from a 
built-in command or a plugin command. As long as a command is registered in the PDB it can be called by any 
script or plugin.
+
+The parameters of script-fu-register may be divided into two groups. The first group of seven parameters 
must always be given. These are:
+
+1.  The name of the function.
+2.  The name of the script to be used as a menu entry.
+3.  A help string describing the function of the script.
+4.  The script author.
+5.  The script copyright.
+6.  Script date.
+7.  List of valid image types for the script. This only has a meaning on scripts operating on images that 
already exist.
+
+After these seven parameters have been given, a list of the parameters required by the script follows. Each 
parameter is given as a group of three items:
+
+1.  The type of the parameter. Some of the valid types are:
+
+    <dl>
+
+    <dt>**SF-COLOR**</dt>
+
+    <dd>An RGB color.</dd>
+
+    <dt>**SF-TOGGLE**</dt>
+
+    <dd>A true or false value.</dd>
+
+    <dt>**SF-STRING**</dt>
+
+    <dd>A string of characters enclosed in double quotes.</dd>
+
+    <dt>**SF-VALUE**</dt>
+
+    <dd>Any scalar value, integer, or floating point.</dd>
+
+    <dt>**SF-IMAGE**</dt>
+
+    <dt>**SF-DRAWABLE**</dt>
+
+    </dl>
+
+2.  A label for Script-Fu to display when querying for the parameter.
+3.  A default value.
+
+## 6\. A commented script
+
+The following script **uni.scm** receives two parameters from the user, the size of the image and a color, 
and goes on to produce a uniform image of the requested size and the requested color. Not very useful, but it 
shows the essential steps in producing a Script-Fu script.
+
+    :::scheme
+    ; Define the function of the script and list its parameters
+    ; The parameters will be matched with the parameters listed
+    ; below in script-fu-register.
+
+    (define (uni-img size color)
+      ; Create an img and a layer
+      (set! img (car (gimp-image-new size size RGB)))
+      (set! layer (car (gimp-layer-new img size size
+                                       RGB "layer 1" 100 NORMAL)))
+
+     ; The following is done for all scripts
+     (gimp-image-undo-disable img)
+     (gimp-image-add-layer img layer 0)
+
+     ; Here is where the painting starts. We now have an image
+     ; and layer and may paint in the layer through the PDB functions.
+     (gimp-palette-set-background color)
+     (gimp-edit-fill layer BG-IMAGE-FILL)
+
+     ; The following is also done for all script
+     (gimp-display-new img)
+     (gimp-image-undo-enable img))
+
+    ; Finally register our script with script-fu.
+    (script-fu-register "uni-img"
+                        "Uniform image"
+                        "Creates a uniform image"
+                        "Dov Grobgeld <dov imagic weizmann ac il>"
+                        "Dov Grobgeld"
+                        "2002-02-12"
+                        ""
+                        SF-VALUE "size" "100"
+                        SF-COLOR "color" '(255 127 0))
+    (script-fu-menu-register "uni-img" "<Toolbox>/Xtns/Script-Fu/Tutorials")
+
+
+To test the script save it in $HOME/.gimp-2.2/scripts/uni.scm and then select <span class="filter">Xtns -> 
Script-Fu -> Refresh</span>:
+
+<figure>
+<img src="refresh.png" alt="refresh.png" />
+</figure>
+
+The script **Uniform image** should now appear in the pulldown menu <span class="filter">Xtns -> Script-Fu 
-> Tutorials -> Uniform image</span>. Selecting this script results in the following popup:
+
+<figure>
+<img src="uni-img.png" alt="uni-img.png" />
+</figure>
+
+Accepting these default parameters through the **OK** button gives us the following new image:
+
+<figure>
+<img src="uni-result.png" alt="uni-result.png" />
+</figure>
+
+It is also possible to access this script through the Script-Fu console by typing the command
+
+    :::scheme
+    (uni-img 100 '(0 255 127))
+
+
+## 6.1 Hanging a script in the image menu
+
+In the **uni-img** script it was placed under **Xtns/...** in the main Gimp window. This is done to create a 
new image that is independant of earlier images. It is also possible to create a script which works on an 
already existing image. If in **script-fu-menu-register** the second argument is written:
+
+&lt;Image&gt;/Script-Fu/...
+
+then the script will be available through the GIMP menu that is launched by the right mouse button over an 
image. Such script must also have as their first and second argument a SF-IMAGE and a SF-DRAWABLE.
+
+Here is an example script which copies the current layer to a new layer, blurs it and inverts it.
+
+    :::scheme
+    ; An example script that blurs an image according to a blur radius.
+    ; It illustrates how to hang a script in the image menu, and
+    ; how a plug-in may be called.
+
+    (define (script-fu-copy-blur img
+                                 drawable
+                                 blur-radius)
+      ; Create a new layer
+      (set! new-layer (car (gimp-layer-copy drawable 0)))
+
+      ; Give it a name
+      (gimp-layer-set-name new-layer "Gauss-blurred")
+
+      ; Add the new layer to the image
+      (gimp-image-add-layer img new-layer 0)
+
+      ; Call a plugin to blur the image
+      (plug-in-gauss-rle 1 img new-layer blur-radius 1 1)
+
+      ; Invert the new layer
+      (gimp-invert new-layer)
+
+      ; Flush the display
+      (gimp-displays-flush)
+    )
+
+    (script-fu-register "script-fu-copy-blur"
+                        "Copy and Blur"
+                        "Copy and blur a layer"
+                        "Dov Grobgeld"
+                        "Dov Grobgeld"
+                        "2002"
+                        "RGB*, GRAY*"
+                        SF-IMAGE    "Image"         0
+                        SF-DRAWABLE "Layer to blur" 0
+                        SF-VALUE    "Blur strength" "5")
+    (script-fu-menu-register "script-fu-copy-blur"
+                             "<Image>/Script-Fu/Tutorials")
+
+
+
+## 7\. Painting areas with selections
+
+In uni-img we called the procedure gimp-edit-fill to fill the whole image. Looking at the info for 
gimp-edit-fill in the Procedure Browser we find the following:
+
+<table>
+<tbody>
+<tr>
+<th align="right" valign="top">Name:</th>
+<td class="emphesize" colspan="3">gimp-edit-fill</td>
+</tr>
+<tr>
+<th align="right" valign="top">Blurb:</th>
+<td colspan="3" valign="top">Fill selected area of drawable</td>
+</tr>
+<tr>
+<th align="right" valign="top">In:</th>
+<td valign="top">DRAWABLE</td>
+<td valign="top">drawable</td>
+<td valign="top">The drawable to fill from</td>
+</tr>
+<tr>
+<th></th>
+<td valign="top">INT32</td>
+<td valign="top">fill_type</td>
+<td valign="top">The type of fill: FG-IMAGE-FILL (0), BG-IMAGE-FILL (1), WHITE-IMAGE-FILL (2), 
TRANS-IMAGE-FILL (3), NO-IMAGE-FILL (4)</td>
+</tr>
+<tr>
+<th valign="top">Help:</th>
+<td colspan="3">This procedure fills the specified drawable with the fill mode. If the fill mode is 
foreground, the current foreground color is used. If the fill mode is background, the current background 
color is used. Other fill modes should not be used. This procedure only affects regions within a selection if 
there is a selection active.</td>
+</tr>
+</tbody>
+</table>
+
+Thus, if we have a selection active when gimp-edit-fill is called, then only the selection is painted. There 
are lots of ways of choosing a selection as can be seen when searching for a "select" in the PDB. We will use 
gimp-rect-select, whose entry in the PDB looks as follows:
+
+<table>
+<tbody>
+<tr>
+<th align="right" valign="top">Name:</th>
+<td class="emphesize" colspan="3">gimp-rect-select</td>
+</tr>
+<tr>
+<th align="right" valign="top">Blurb:</th>
+<td colspan="3" valign="top">Create a rectangular selection over the specified image</td>
+</tr>
+<tr>
+<th align="right" valign="top">In:</th>
+<td valign="top">IMAGE</td>
+<td valign="top">image</td>
+<td valign="top">The image</td>
+</tr>
+<tr>
+<th></th>
+<td valign="top">FLOAT</td>
+<td valign="top">x</td>
+<td valign="top">x coordinate of upper-left corner of rectangle</td>
+</tr>
+<tr>
+<th></th>
+<td valign="top">FLOAT</td>
+<td valign="top">y</td>
+<td valign="top">y coordinate of upper-left corner of rectangle</td>
+</tr>
+<tr>
+<th></th>
+<td valign="top">FLOAT</td>
+<td valign="top">width</td>
+<td valign="top">the width of the rectangle: width > 0</td>
+</tr>
+<tr>
+<th></th>
+<td valign="top">FLOAT</td>
+<td valign="top">height</td>
+<td valign="top">the height of the rectangle: width > 0</td>
+</tr>
+<tr>
+<th></th>
+<td valign="top">INT32</td>
+<td valign="top">operation</td>
+<td valign="top">the selection operation: {ADD (0), SUB(1), REPLACE (2), INTERSECT (3) }</td>
+</tr>
+<tr>
+<th></th>
+<td valign="top">INT32</td>
+<td valign="top">feather</td>
+<td valign="top">feather option for selections</td>
+</tr>
+<tr>
+<th></th>
+<td valign="top">FLOAT</td>
+<td valign="top">feather_radius</td>
+<td valign="top">radius for feather operation</td>
+</tr>
+<tr>
+<th valign="top">Help:</th>
+<td colspan="3">This tool creates a rectangular selection over the specified image. The rectangular region 
can be either added to, subtracted from, or replace the contents of the previous selection mask. If the 
feather option is enabled, the resulting selection is blurred before combining. The blur is a gaussian blur 
with the specified feather radius.</td>
+</tr>
+</tbody>
+</table>
+
+A simple use of this function which selects the rectangle (x,y,width,height) = (0,25,100,50), paints this 
region blue, and releases the selection looks as follows:
+
+    :::scheme
+    (gimp-rect-select img 0 25 100 50 REPLACE 0 0)
+    (gimp-palette-set-background '(0 0 255))
+    (gimp-edit-fill layer BG-IMAGE-FILL)
+    (gimp-selection-none img)
+
+
+## 8\. Loops
+
+The only looping construct that exists in Script-Fu is **while**
+
+[Note: this constraint is due to the current Scheme interpreter SIOD used for Script-Fu.] The while loop 
looks as follows:
+
+    :::scheme
+    (while (condition)
+    (statement1)
+    (statement2)
+    :
+    )
+
+
+Here's an example which draws horizontal lines, 16 pixels high, on an image:
+
+    :::scheme
+    (set! y 0)
+    (while (< y size)
+    (gimp-rect-select img 0 y size 16 REPLACE 0 0)
+    (gimp-edit-fill layer-one BG-IMAGE-FILL)
+    (set! y (+ y 32)))
+
+
+## 9\. Floating selections
+
+When pasting an image from the clipboard, or when creating text in a a drawable, the result is not put 
directly in the drawable. Instead it is put into a special temporary layer known as a floating selection. The 
floating selection may be manipulated in several ways, and finally it is merged into its associated layer, a 
process known as anchoring.
+
+## 9.1 Hello World - writing text in an image
+
+When creating text through the gimp-text command, the text is always put into a temporary layer. This 
temporary layer then has to be anchored. Here is an example of creating some text which is pasted into the 
current drawable:
+
+    :::scheme
+    ; An example script that writes a fixed string in the current
+    ; image.
+    (define (script-fu-hello-world img drawable)
+
+      ; Start an undo group. Everything between the start and the end will
+      ; be carried out if an undo command is issued.
+      (gimp-undo-push-group-start img)
+
+      ; Create the text. See the Procedure Browser for parameters of gimp-text.
+      (set! text-float (car (gimp-text-fontname img drawable
+                                                10 10 "Hello world" 0 1 50 0
+                                                "Sans")))
+
+      ; Anchor the selection
+      (gimp-floating-sel-anchor text-float)
+
+      ; Complete the undo group
+      (gimp-undo-push-group-end img)
+
+      ; Flush output
+      (gimp-displays-flush))
+
+    (script-fu-register "script-fu-hello-world"
+                        "Hello World"
+                        "Write Hello World in the current image"
+                        "Dov Grobgeld <dov imagic weizmann ac il>"
+                        "Dov Grobgeld"
+                        "2002-02-12"
+                        "RGB*, GRAY*"
+                        SF-IMAGE "Input Image" 0
+                        SF-DRAWABLE "Input Drawable" 0)
+    (script-fu-menu-register "script-fu-hello-world"
+                              "<Image>/Script-Fu/Tutorials")
+
+
+This script shows another feature we haven't mentioned before. The possibility of creating an undo group. 
All the commands between the commands gimp-undo-push-group-begin and gimp-undo-push-group-end are undone 
together if the undo command is issued.
+
+## 9.2 Copying a selection
+
+To copy a selection, the command gimp-edit-copy is used. It places a copy of the selection contents in the 
cut-buffer. The contents of the cut-buffer may then be pasted into a layer, the same layer or another one, 
and it is then pasted as a floating layer.
+
+In the following example the selection is copied, pasted into the same layer, offset a fixed distance, 
finally anchored. Try it by drawing a small blob in the middle of the image, select the blob, and then call 
this script.
+
+    :::scheme
+    ; An example of how to create a floating layer and how to ancor it.
+    (define (script-fu-sel-copy img
+                              drawable)
+
+      (gimp-undo-push-group-start img)
+      (gimp-edit-copy drawable)
+      (set! sel-float (car (gimp-edit-paste drawable FALSE)))
+      (gimp-layer-set-offsets sel-float 100 50)
+
+      ; Anchor the selection
+      (gimp-floating-sel-anchor sel-float)
+
+      ; Complete the undo group
+      (gimp-undo-push-group-end img)
+
+      ; Flush output
+      (gimp-displays-flush))
+
+    (script-fu-register "script-fu-sel-copy"
+                        "Selection Copy"
+                        "Copy the selection into the same layer"
+                        "Dov Grobgeld"
+                        "Dov Grobgeld"
+                        "2002-02-12"
+                        "RGB*, GRAY*"
+                        SF-IMAGE "Image" 0
+                        SF-DRAWABLE "Layer" 0)
+    (script-fu-menu-register "script-fu-sel-copy"
+                             "<Image>/Script-Fu/Tutorials")
+
+
+The original tutorial can be found [here](http://imagic.weizmann.ac.il/~dov/gimp/scheme-tut.html).
+
+
+<style>
+table {
+max-width: 40rem;
+font-size: 0.85rem;
+margin: 1rem auto;
+}
+table td, table th{
+    padding: 0.25rem;
+}
+</style>
diff --git a/content/tutorials/Basic_Scheme/pdb-uni-entry.png 
b/content/tutorials/Basic_Scheme/pdb-uni-entry.png
new file mode 100644
index 0000000..969bc80
Binary files /dev/null and b/content/tutorials/Basic_Scheme/pdb-uni-entry.png differ
diff --git a/content/tutorials/Basic_Scheme/refresh.png b/content/tutorials/Basic_Scheme/refresh.png
new file mode 100644
index 0000000..801aed1
Binary files /dev/null and b/content/tutorials/Basic_Scheme/refresh.png differ
diff --git a/content/tutorials/Basic_Scheme/uni-img.png b/content/tutorials/Basic_Scheme/uni-img.png
new file mode 100644
index 0000000..90b81c1
Binary files /dev/null and b/content/tutorials/Basic_Scheme/uni-img.png differ
diff --git a/content/tutorials/Basic_Scheme/uni-result.png b/content/tutorials/Basic_Scheme/uni-result.png
new file mode 100644
index 0000000..d76fb27
Binary files /dev/null and b/content/tutorials/Basic_Scheme/uni-result.png differ
diff --git a/content/tutorials/Basic_Scheme2/index.md b/content/tutorials/Basic_Scheme2/index.md
new file mode 100644
index 0000000..3174a7c
--- /dev/null
+++ b/content/tutorials/Basic_Scheme2/index.md
@@ -0,0 +1,151 @@
+Title: Basic Scheme 2
+Date: 2015-08-18T16:27:00-05:00
+Modified: 2015-08-18T16:27:04-05:00
+Author: Pat David
+
+
+This article was originally published in [Linux Magazine, January 
2002](http://www.linux-mag.com/2002-01/power_01.html).
+
+_Editor's note: since this tutorial was published, the old GIMP Script-Fu interpreter (SIOD) has been 
replaced by a newer and better one (TinyScheme). A [Script-Fu migration guide](/docs/script-fu-update.html) 
is available._
+
+## Intention
+
+Unix (and by association, GNU/Linux) provides the user with an environment full of possibilities. To turn 
these possibilities into reality, a Unix user must be technical in two senses of the word. Of course, he must 
understand _technology_, but to really shine, he must understand and even appreciate good _technique_.
+
+Unix is filled with tools that, through an unspoken yet common understanding of the Unix Philosophy, work 
well with each other. To the creative user who can interconnect and combine these powerful tools, Unix can be 
very rewarding.
+
+With that in mind, welcome to our _Power Tools_ column. Our goal here is to help you discover different ways 
to get the most out of all the useful software that is out there, and to demonstrate how powerful these tools 
can really be in the hands of a skillful and technical user.
+
+We begin this month with a look at GIMP. One of GIMP's strong points has always been its scriptability. In 
fact, it's widely acknowledged to be one of the cooler features of GIMP. But when it comes right down to it, 
there really are not that many people who can honestly say, "I know Script-Fu."
+
+Part of the problem is Scheme, the language used to write scripts for GIMP. It is a Lisp-like language that 
looks funny compared to most mainstream languages, and that's enough to dissuade a lot of people from trying 
it. For anyone who really wants to learn Scheme, though, GIMP is a good place to start, because you'll be 
able to achieve useful results relatively quickly due to the richness of its programming interface. Sometimes 
it's a little too rich, though.
+
+The other problem is that the API for GIMP can seem overwhelmingly large at times. Fortunately, there's a 
way to break down this formidable API into something that is actually comprehensible by mere mortals. But 
we'll get to that in a minute. First, let's take a look at a very small subset of Scheme.
+
+## A Crash Course in Scheme
+
+Scheme has a simple and uniform syntax compared to most other languages, but there's still no way to 
properly explain it in this limited space. With that in mind, we'll cover the bare minimum of Scheme that 
you'll need to get started with GIMP scripting. Fortunately, it's true that a little knowledge can go a long 
way, so if you don't know Scheme, read on.
+
+The first thing people notice when they look at Scheme is all the nested parentheses. Whatever you do, don't 
panic. There's a very simple concept behind this, and chances are good that you already understand it. 
Semantically, it's not that different from HTML. For example, the following:
+
+    :::html
+    <ul><li><b>bold</b></li><li><i>italic</i></li></ul>
+
+
+would look like this in Scheme:
+
+    :::scheme
+    (ul (li (b "bold"))(li (i "italic")))
+
+Each matching pair of parentheses forms what is called an s-expression. The "s" stands for "symbolic," 
because s-expressions usually contain symbolic information (like function and variable names) inside them. 
Literal information (like strings or numbers) is represented in the usual way -- numbers are written in 
decimal notation, and strings are surrounded by a set of double quotes, like "bold" is in the example. An 
s-expression can also contain other s-expressions nested within it, making it a good notation for storing 
data as well as writing code.
+
+When you are using s-expressions to represent code, the first item represents the function you want to use, 
and everything after it is considered a parameter of the function. What surprises many people is that in 
Scheme, nearly _everything_ is done with a function. Even for basic math, what would be:
+
+    5 + 9 / 3
+
+in most other languages is expressed in Scheme as:
+
+    :::scheme
+    (+ 5 (/ 9 3))
+
+This may take a little getting used to. First, the order of things may look strange. If you're used to 
"infix notation" (i.e., the way the first equation is written -- with the operands being separated by the 
operators), then training yourself to use "prefix notation" (the way the second equation is written -- with 
the operators placed before the operands) might take a little practice. Don't worry -- it's not as unsettling 
as it looks once you get the hang of it.
+
+Beyond our simple arithmetic example above, there are two functions in Scheme that you will need to know to 
help you understand the latter half of this article.
+
+**set!:** This is the equivalent of the = (or assignment) operator which is seen in most other languages. 
Its purpose is simply to assign a given value to a particular variable. For example, the following assigns 5 
to the variable a and the list of numbers (1 2 3) to b.
+
+    :::scheme
+    (set! a 5)<
+    (set! b '(1 2 3))
+
+Note that the single-quote before the (1 2 3) is very important. It tells Scheme that the following 
s-expression is actually data and not code. Without the single-quote, the Scheme interpreter would have tried 
to treat the 1 as a function and failed miserably.
+
+**car:** An s-expression is a list of things, but this is no ordinary list. In Scheme, lists are composed of 
only two things -- a _head_, which is the first item in the list, and a _tail_, which is everything else (and 
which is also a list).
+
+car is the function used to grab the head of a list. For example, (car '(3 2 1)) returns 3\. This is very 
useful, because functions in the GIMP API almost always return lists; even when only one thing is returned, 
it's returned in a one-element list, so it's necessary to know this basic list operation.
+
+This is barely a scratch on the surface of what Scheme provides, but it's enough for now. There are already 
many good Scheme tutorials out there anyway, so why not make the most of them? You can take a look at 
_Resources_ for more information.
+
+## The GIMP API
+
+Now that we know a little Scheme, we can start taking a look at how it is applied to GIMP.
+
+The easiest way to do this is to use the _Procedure Browser_, which is available under (<span 
class="filter">Xtns&rarr;Procedure Browser</span>). As you can see, GIMP has literally hundreds of Scheme 
functions tied directly to its internal API.
+
+Although each function is documented, the sheer number of them can be overwhelming. Fortunately, there's a 
nice trick to learning this API.
+
+In the _Procedure Browser_, type the word "new" into the text input box in the bottom left corner and then 
click on the _Search by Name_ button. The list should be much smaller now; the first five functions happen to 
be especially interesting. This search is demonstrated in _Figure One below_
+
+<figure>
+<img src="power_01.jpg" alt="Figure One" />
+<figcaption>
+Figure One: The five constructor functions are listed in the top left of the window.
+</figcaption>
+</figure>
+
+These five functions are constructors for the five objects that the entire GIMP API revolves around. If you 
can understand exactly what each of these objects represents, then you are well on your way to being able to 
script GIMP.
+
+Let's get started by instantiating some of these objects. Be sure to get a Script-Fu console from (<span 
class="filter">Xtns &rarr; Script-Fu &rarr; Console</span>) so that there is a place for you to type in 
Scheme code. Now, let's start by following along with _Listing One_.
+
+    :::scheme
+      ; create an image
+      (set! image (car (gimp-image-new 320 240 RGB)))
+
+      ; images need layers
+      (set! layer
+         (car
+            (gimp-layer-new
+               image 320 240 RGB_IMAGE "layer"  100.0 0)))
+      (gimp-image-add-layer image layer -1)
+
+    ; display our image
+    (set! window (car (gimp-display-new image)))
+    (gimp-edit-clear layer)
+
+    ; let's draw
+    (set! points (cons-array 4 'double))
+    (aset points 0 0)   ; (x0, y0)
+    (aset points 1 0)
+    (aset points 2 320) ; (x1, y1)
+    (aset points 3 240)
+    (gimp-palette-set-foreground '(255 0 0))
+    (gimp-paintbrush-default layer 4 points)
+
+**Image:** The most important object in GIMP is the _Image_ object, without which there would be no "I" in 
"GIMP." On line 2, a 320x240 pixel, RGB image is instantiated and assigned to <small>image</small>.
+
+GIMP has an abstract concept of what an _Image_ object is. Aside from having properties like width and 
height, an image can be thought of as a collection of _Layer_ objects.
+
+**Layer:** Layers are very important because without them, there would be nothing to draw on. On lines 5 
through 9, a _Layer_ object is instantiated and then layer is added to <small>image</small>.
+
+**Channel:** The purpose of channels is to provide a selective view of the coloration of an image. For 
instance, all RGB images come with a red, green, and blue channel.
+
+If you wanted to affect only the "blueness" of an image, you could disable the red and green channels and 
only draw on the blue channel. It's a useful but rather advanced concept, so we'll skip this one for now.
+
+**Display:** Although not strictly required, it would be nice to be able to watch our <small>image</small> 
as graphics are being drawn on it. To do this, a _Display_ object is opened on line 12\. Our layer might be 
filled with garbage, so it's a good idea to use the <small>gimp-edit-clear</small> function to ensure that we 
start with a clean slate. (Hopefully, the layer constructor will behave more consistently in the future.) 
Note that as you write Scheme code into the Script-Fu Console, changes in the image will show up 
interactively.
+
+**Drawable:** In C++ terminology, a _Drawable_ would be an abstract base class which _Layer_ and _Channel_ 
are subclasses of. As the name implies, drawables are anything that can be drawn on. For example, one can 
draw on channels to perform advanced color effects. But for now we'll just stick to drawing on a layer.
+
+There are many, many functions in the GIMP API for manipulating drawables. On lines 16 to 22, 
<small>gimp-paintbrush-default</small> is used to draw a line on <small>layer</small>. Since this function 
needs an array of (x,y) coordinates, the <small>cons-array</small> function is used to allocate an array of 
doubles and the <small>aset</small> function is used to fill it with values. Before the line is drawn, we 
change our default foreground color to a bright red using <small>gimp-palette-set-foreground</small>. If 
you've typed everything in correctly, you should have something that looks like _Figure Two showed below_.
+
+<figure>
+<img src="power_02.jpg" alt="power_02.jpg" />
+<figcaption>
+Figure Two: A simple drawing.
+<figcaption>
+</figure>
+
+
+## Bigger and Better Things...
+
+Now that we have a foundation of knowledge to work from, we can move on to more interesting topics. Study 
Scheme and GIMP on your own. See _Resources_ for good places to start your self-education.
+
+## Resources
+
+*   [Teach Yourself Scheme in Fixnum Days](http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme.html)
+*   [Mike Terry's Black Belt School of Script-Fu](http://www.klaban.torun.pl/help/script-fu-tutorial/)
+*   Richard Stallman: [The 
Coder](http://web.archive.org/web/*/http://www.linuxcare.com/viewpoints/os-interviews/12-14-99.epl) (web 
archive)
+*   [Why Functional Programming Matters](http://www.cs.chalmers.se/~rjmh/Papers/whyfp.html)
+*   [SIOD Scheme](http://web.archive.org/web/20011129110930/http://people.delphi.com/gjc/siod.html) (web 
archive)
+
+This article was originally published in [Linux Magazine, January 
2002](http://www.linux-mag.com/2002-01/power_01.html). It has since then seen some minor updates.
+
diff --git a/content/tutorials/Basic_Scheme2/power_01.jpg b/content/tutorials/Basic_Scheme2/power_01.jpg
new file mode 100644
index 0000000..b29c9ed
Binary files /dev/null and b/content/tutorials/Basic_Scheme2/power_01.jpg differ
diff --git a/content/tutorials/Basic_Scheme2/power_02.jpg b/content/tutorials/Basic_Scheme2/power_02.jpg
new file mode 100644
index 0000000..75b2029
Binary files /dev/null and b/content/tutorials/Basic_Scheme2/power_02.jpg differ
diff --git a/content/tutorials/Bezier_Selections/bezier_box.png 
b/content/tutorials/Bezier_Selections/bezier_box.png
new file mode 100644
index 0000000..cb5f164
Binary files /dev/null and b/content/tutorials/Bezier_Selections/bezier_box.png differ
diff --git a/content/tutorials/Bezier_Selections/bezier_button.png 
b/content/tutorials/Bezier_Selections/bezier_button.png
new file mode 100644
index 0000000..6fc7c2f
Binary files /dev/null and b/content/tutorials/Bezier_Selections/bezier_button.png differ
diff --git a/content/tutorials/Bezier_Selections/bezier_curve.png 
b/content/tutorials/Bezier_Selections/bezier_curve.png
new file mode 100644
index 0000000..a9f3a64
Binary files /dev/null and b/content/tutorials/Bezier_Selections/bezier_curve.png differ
diff --git a/content/tutorials/Bezier_Selections/index.md b/content/tutorials/Bezier_Selections/index.md
new file mode 100644
index 0000000..0446e96
--- /dev/null
+++ b/content/tutorials/Bezier_Selections/index.md
@@ -0,0 +1,43 @@
+Title: Simple Paths (Bezier Selections)
+Date: 2015-08-18T16:27:00-05:00
+Modified: 2015-08-18T16:27:04-05:00
+Author: Tuomas Kuosmanen
+
+
+Text and images Copyright (C) 2002 [Tuomas Kuosmanen](mailto:tigertNOSPAM gimp org) and may not be used 
without permission of the author.
+
+## Intention
+
+The Path tool (previously known as Bezier Selection) is a powerful tool in GIMP. The rectangle- and 
ellipse-selections are not very flexible if you happen to need something more special. And since many of us 
GIMPers don't have a graphics tablet, it's not so easy to make the mouse pointer move the way you want. The 
paths can solve the problem by using smooth mathematical curves instead your own shaky mouse trail. Paths are 
also very useful when used with gradient fills, see [Drawing Shapes with Bezier](/tutorials/Drawing_Shapes/) 
for more information on this great tool.
+
+## What is it?
+
+<figure>
+<img src="bezier_box.png" alt="bezier_box.png" />
+</figure>
+
+![Bezier Button](bezier_button.png)The Path tool can make complex selections by specifying certain points 
that are connected together with a curve. So to make a box you would specify four points, one for each corner 
of the box. Example in image above. The great thing is the corners don't have to be 90 degrees.   
+In older GIMP versions (1.2.x), you had to close all paths by joining the last point of the path to the 
first one. This is not necessary anymore in 2.0 and later versions, but this is still useful to create closed 
shapes such as a box. So after creating the fourth point, press and hold the Ctrl key and click on the first 
point to close the path. Of course you can have as many points as you need.   
+Finally, click the "Stroke Path" button (in the Path Options dialog) or use the menu Edit->Stroke Path... to 
draw the new shape. You can also use the button "Create Selection from Path" if you want to have a selection 
that you can fill or stroke.
+
+## Modifying the curves
+
+<figure>
+<img src="bezier_curve.png" alt="bezier_curve.png" />
+</figure>
+
+Straight lines alone are a useful thing, but it's not all. Actually they are not lines but curves. Cool 
anti-aliased smooth curves.   
+The curves can be modified quite flexibly by adjusting the 'handles' of the nearest points. 'What handles?' 
you say... See the image above? The small circles are those familiar points we used with the box in the 
previous section. The little boxes are those handles. The handles are not visible by default, you must drag 
them 'out' from a point. To make the handles visible 1\. click to a point to make it active, 2\. while 
pressing the Ctrl key, click again on the same point and 3\. drag the handles out with the mousebutton still 
pressed down. You notice the curves between the points are not straight anymore. You can control the shapes 
by dragging the handles around.
+
+## A Few Tips
+
+*   Always before modifying any points or handles, click the handle or a point to make it active.
+*   To have a smooth curve, both handles should be aligned at each point. Press Shift while dragging a 
handle to ensure that the other one remains aligned.
+*   A path can have multiple components. If you have closed a path, you can create a new component by 
clicking where you want to place the first point of the new component.
+*   If you want to create several components without closing them, press Shift and click where you want to 
start a new one.
+*   When you are satisfied with the shape, you can use Stroke Path or Create Selection from Path.
+*   The default GIMP installation creates a dock containing the tabs "Layers, Channels, Paths, Undo". Click 
on the Paths tab to manage your paths.
+
+The original tutorial can be found [here](http://www.tigert.com/gimp/tutorials/bezier/).   
+It was updated for GIMP 2.0 by Raphaël Quinet.
+
diff --git a/content/tutorials/Blending_Exposures/addmaskoptions.jpg 
b/content/tutorials/Blending_Exposures/addmaskoptions.jpg
new file mode 100644
index 0000000..fc081c5
Binary files /dev/null and b/content/tutorials/Blending_Exposures/addmaskoptions.jpg differ
diff --git a/content/tutorials/Blending_Exposures/after.jpg b/content/tutorials/Blending_Exposures/after.jpg
new file mode 100644
index 0000000..107e8cd
Binary files /dev/null and b/content/tutorials/Blending_Exposures/after.jpg differ
diff --git a/content/tutorials/Blending_Exposures/airbrush.jpg 
b/content/tutorials/Blending_Exposures/airbrush.jpg
new file mode 100644
index 0000000..c07ee55
Binary files /dev/null and b/content/tutorials/Blending_Exposures/airbrush.jpg differ
diff --git a/content/tutorials/Blending_Exposures/anchor.jpg b/content/tutorials/Blending_Exposures/anchor.jpg
new file mode 100644
index 0000000..1bc93d2
Binary files /dev/null and b/content/tutorials/Blending_Exposures/anchor.jpg differ
diff --git a/content/tutorials/Blending_Exposures/before-dark.jpg 
b/content/tutorials/Blending_Exposures/before-dark.jpg
new file mode 100644
index 0000000..14c77da
Binary files /dev/null and b/content/tutorials/Blending_Exposures/before-dark.jpg differ
diff --git a/content/tutorials/Blending_Exposures/before-light.jpg 
b/content/tutorials/Blending_Exposures/before-light.jpg
new file mode 100644
index 0000000..f9a7f9d
Binary files /dev/null and b/content/tutorials/Blending_Exposures/before-light.jpg differ
diff --git a/content/tutorials/Blending_Exposures/brushes1.jpg 
b/content/tutorials/Blending_Exposures/brushes1.jpg
new file mode 100644
index 0000000..ad1a4da
Binary files /dev/null and b/content/tutorials/Blending_Exposures/brushes1.jpg differ
diff --git a/content/tutorials/Blending_Exposures/brushes2.jpg 
b/content/tutorials/Blending_Exposures/brushes2.jpg
new file mode 100644
index 0000000..667708e
Binary files /dev/null and b/content/tutorials/Blending_Exposures/brushes2.jpg differ
diff --git a/content/tutorials/Blending_Exposures/clone.jpg b/content/tutorials/Blending_Exposures/clone.jpg
new file mode 100644
index 0000000..07b851d
Binary files /dev/null and b/content/tutorials/Blending_Exposures/clone.jpg differ
diff --git a/content/tutorials/Blending_Exposures/convolve.jpg 
b/content/tutorials/Blending_Exposures/convolve.jpg
new file mode 100644
index 0000000..88e350f
Binary files /dev/null and b/content/tutorials/Blending_Exposures/convolve.jpg differ
diff --git a/content/tutorials/Blending_Exposures/fill.jpg b/content/tutorials/Blending_Exposures/fill.jpg
new file mode 100644
index 0000000..2cf97ee
Binary files /dev/null and b/content/tutorials/Blending_Exposures/fill.jpg differ
diff --git a/content/tutorials/Blending_Exposures/image-composite-align.jpg 
b/content/tutorials/Blending_Exposures/image-composite-align.jpg
new file mode 100644
index 0000000..b90fb80
Binary files /dev/null and b/content/tutorials/Blending_Exposures/image-composite-align.jpg differ
diff --git a/content/tutorials/Blending_Exposures/image-composite-move.jpg 
b/content/tutorials/Blending_Exposures/image-composite-move.jpg
new file mode 100644
index 0000000..2b9a4d4
Binary files /dev/null and b/content/tutorials/Blending_Exposures/image-composite-move.jpg differ
diff --git a/content/tutorials/Blending_Exposures/image-composite-paste.jpg 
b/content/tutorials/Blending_Exposures/image-composite-paste.jpg
new file mode 100644
index 0000000..68ba0a2
Binary files /dev/null and b/content/tutorials/Blending_Exposures/image-composite-paste.jpg differ
diff --git a/content/tutorials/Blending_Exposures/image-donepainting.jpg 
b/content/tutorials/Blending_Exposures/image-donepainting.jpg
new file mode 100644
index 0000000..629d362
Binary files /dev/null and b/content/tutorials/Blending_Exposures/image-donepainting.jpg differ
diff --git a/content/tutorials/Blending_Exposures/image-fill.jpg 
b/content/tutorials/Blending_Exposures/image-fill.jpg
new file mode 100644
index 0000000..5eb588b
Binary files /dev/null and b/content/tutorials/Blending_Exposures/image-fill.jpg differ
diff --git a/content/tutorials/Blending_Exposures/image-finished.jpg 
b/content/tutorials/Blending_Exposures/image-finished.jpg
new file mode 100644
index 0000000..df696b5
Binary files /dev/null and b/content/tutorials/Blending_Exposures/image-finished.jpg differ
diff --git a/content/tutorials/Blending_Exposures/image-original-dark.jpg 
b/content/tutorials/Blending_Exposures/image-original-dark.jpg
new file mode 100644
index 0000000..49b46d8
Binary files /dev/null and b/content/tutorials/Blending_Exposures/image-original-dark.jpg differ
diff --git a/content/tutorials/Blending_Exposures/image-original-light.jpg 
b/content/tutorials/Blending_Exposures/image-original-light.jpg
new file mode 100644
index 0000000..dad86ba
Binary files /dev/null and b/content/tutorials/Blending_Exposures/image-original-light.jpg differ
diff --git a/content/tutorials/Blending_Exposures/image-paint1.jpg 
b/content/tutorials/Blending_Exposures/image-paint1.jpg
new file mode 100644
index 0000000..282865d
Binary files /dev/null and b/content/tutorials/Blending_Exposures/image-paint1.jpg differ
diff --git a/content/tutorials/Blending_Exposures/image-paint2.jpg 
b/content/tutorials/Blending_Exposures/image-paint2.jpg
new file mode 100644
index 0000000..4d50781
Binary files /dev/null and b/content/tutorials/Blending_Exposures/image-paint2.jpg differ
diff --git a/content/tutorials/Blending_Exposures/image-postclone.jpg 
b/content/tutorials/Blending_Exposures/image-postclone.jpg
new file mode 100644
index 0000000..7961016
Binary files /dev/null and b/content/tutorials/Blending_Exposures/image-postclone.jpg differ
diff --git a/content/tutorials/Blending_Exposures/image-preclone.jpg 
b/content/tutorials/Blending_Exposures/image-preclone.jpg
new file mode 100644
index 0000000..2aad1bd
Binary files /dev/null and b/content/tutorials/Blending_Exposures/image-preclone.jpg differ
diff --git a/content/tutorials/Blending_Exposures/image-select1.jpg 
b/content/tutorials/Blending_Exposures/image-select1.jpg
new file mode 100644
index 0000000..290b683
Binary files /dev/null and b/content/tutorials/Blending_Exposures/image-select1.jpg differ
diff --git a/content/tutorials/Blending_Exposures/index.md b/content/tutorials/Blending_Exposures/index.md
new file mode 100644
index 0000000..5452828
--- /dev/null
+++ b/content/tutorials/Blending_Exposures/index.md
@@ -0,0 +1,202 @@
+Title: Blending Exposures
+Date: 2015-08-18T16:27:00-05:00
+Modified: 2015-08-18T16:27:04-05:00
+Author: Eric R. Jeschke
+
+
+Text and images Copyright (C) 2002 [Eric R. Jeschke](mailto:ericNOSPAM redskiesatnight com) and may not be 
used without permission of the author.
+
+## Intention
+
+<figure>
+<img src="before-light.jpg" alt="before-light.jpg" />
+</figure>
+<figure>
+<img src="before-dark.jpg" alt="before-dark.jpg" />
+</figure>
+<figure>
+<img src="after.jpg" alt="after.jpg" />
+</figure>
+
+In this tutorial I'll show you how to do blend two different exposures of the same scene that you would like 
to combine to get the best parts of both images. This procedure works best if you have:
+
+1.  (obviously) have shot two different exposures that would be pleasing to combine,
+2.  had the camera mounted on a tripod (not strictly necessary, but helps greatly in aligning the images),
+3.  the scenes are not too different at the boundaries of the blend. If the scene has changed too much 
(trees blowing, waves, people or cars moving, etc. between the images), especially at or near the "seams" of 
the blend, it will make the blend more difficult.
+
+If you have only one image that needs exposure adjustment, you might look at using the "digital" neutral 
density filter or the contrast masking technique.
+
+Giving credit where credit is due: I did not come up with this method. I adapted it for GIMP from a 
Photoshop tutorial on the luminous-landscape.com photography web site (great web site BTW, I recommend it).
+
+## The Procedure
+
+The basic technique is to create a layer above the image that contains the other exposure of the same scene. 
Finally, we apply a layer mask to the this layer which makes parts of the image transparent that we want to 
show through from below.
+
+## Step 1
+
+<figure>
+<img src="image-original-light.jpg" alt="image-original-light.jpg" />
+</figure>
+<figure>
+<img src="image-original-dark.jpg" alt="image-original-dark.jpg" />
+</figure>
+
+
+Here are the two exposures, loaded into GIMP. I am going to sandwich these on different layers and then 
combine them with a layer mask.
+
+## Step 2
+
+<figure>
+<img src="layers1.jpg" alt="layers1.jpg" />
+</figure>
+<figure>
+<img src="newlayeroptions.jpg" alt="newlayeroptions.jpg" />
+</figure>
+<figure>
+<img src="layers2.jpg" alt="layers2.jpg" />
+</figure>
+
+
+The first decision is which one goes on top. In this case I have decided to put the lighter image on top and 
the darker one on the bottom. The reason is because I hand-held the shots, and they are far from aligned. I'm 
going to have to move the bottom image until the arch is aligned as best I can get it. Also, the top image is 
the composition I want anyway, and I'll have less painting to do that way.
+
+Go the image that is going to be on the bottom. Open the Layers dialog (<kbd>Ctrl+L</kbd>) and click on the 
new layer button (![](newlayer.jpg)) to create a new layer.
+
+## Step 3
+
+<figure>
+<img src="layers3.jpg" alt="layers3.jpg" />
+</figure>
+<figure>
+<img src="layers4.jpg" alt="layers4.jpg" />
+</figure>
+
+
+Go to the image that is going to be on top. Select all and copy (<kbd>Ctrl+A</kbd> then <kbd>Ctrl+C</kbd>). 
In the Layers dialog, make sure the new layer is selected, then go to the bottom image window and paste 
(<kbd>Ctrl+V</kbd>). In the Layers dialog, click on the anchor button (![](anchor.jpg)) to anchor the 
floating image.
+
+## Step 4
+
+<figure>
+<img src="layers5.jpg" alt="layers5.jpg" />
+</figure>
+<figure>
+<img src="image-composite-paste.jpg" alt="image-composite-paste.jpg" />
+</figure>
+
+
+Crank down the opacity of the upper layer so that you can see both images.
+
+If they are perfectly aligned you can skip the next step. Unless you used a digital capture on a tripod, the 
images probably need to be aligned. (Even if you had a film camera on a tripod, it is difficult to get two 
successive scans to feed through in perfect alignment.)
+
+## Step 5
+
+<figure>
+<img src="layers6.jpg" alt="layers6.jpg" />
+</figure>
+
+
+<figure>
+<img src="image-composite-move.jpg" alt="image-composite-move.jpg" />
+</figure>
+<figure>
+<img src="image-composite-align.jpg" alt="image-composite-align.jpg" />
+</figure>
+
+
+In the Layers dialog, select the layer you need to move or rotate. In this case it is the lower layer.
+
+Using the arrow keys, nudge the image into alignment. You may need to rotate the image slightly too.
+
+When you get close to alignment, zoom in to get a good close-up view and get the best possible fit.
+
+## Step 6
+
+![](addmaskoptions.jpg)![](layers7.jpg)
+
+In the Layers dialog, right-click on the upper layer and select Add Layer Mask. In the Add Mask Options 
dialog, select White (Full Opacity) and click OK.
+
+## Step 7
+
+<figure>
+<img src="image-select1.jpg" alt="image-select1.jpg" />
+</figure>
+<figure>
+<img src="image-fill.jpg" alt="image-fill.jpg" />
+</figure>
+
+
+Now I want to paint black (transparency) onto the layer mask wherever I want the lower image to show through.
+
+To minimize painting time, use the hand-select ("lasso"![](lasso.jpg) ) tool to select a large, hand-drawn 
region just inside all the borders of the area you want to paint, as shown at right. Then using the fill tool 
(![](fill.jpg)) fill the selection with black.
+
+## Step 8
+
+<figure>
+<img src="brushes1.jpg" alt="brushes1.jpg" />
+</figure>
+<figure>
+<img src="image-paint1.jpg" alt="image-paint1.jpg" />
+</figure>
+
+
+Next, I select a large opaque brush from the Brushes dialog (Dialogs/Brushes), select the Paint tool 
(![](paint.jpg)) and begin painting into the mask close to the boundaries of the blend.
+
+Notice that I still have the opacity cranked down on the upper layer so that I can see both layers.
+
+## Step 9
+
+<figure>
+<img src="brushes2.jpg" alt="brushes2.jpg" />
+</figure>
+
+
+<figure>
+<img src="image-paint2.jpg" alt="image-paint2.jpg" />
+</figure>
+<figure>
+<img src="image-donepainting.jpg" alt="image-donepainting.jpg" />
+</figure>
+
+
+For the very edges, I switch to a small, feathered brush and very carefully paint the edges.
+
+While I'm painting, I'll zoom in and out frequently ("=" key to zoom in, "-" key to zoom out) to inspect the 
work. Don't worry too much about the borders, since we'll probably have to touch those up anyway.
+
+## Step 10
+
+<figure>
+<img src="image-preclone.jpg" alt="image-preclone.jpg" />
+</figure>
+<figure>
+<img src="image-postclone.jpg" alt="image-postclone.jpg" />
+</figure>
+
+
+Now the most painstaking part: blending the seams. This is a little tricky due to the different tonalities 
of the two exposures.
+
+For blending work, the Clone (![](clone.jpg)), Smudge (![](smudge.jpg)), Airbrush (![](airbrush.jpg)) and 
Blur (![](convolve.jpg)) are my tools of choice.
+
+Since I'm not sure if these tools have the ability to work across layers (as they do in Photoshop), I 
duplicate the image (<kbd>Ctrl+D</kbd>) and flatten the duplicate (<span class="filter"><Image> Layers -> 
Flatten Image</span>) and work on it. This has the additional benefit that if I ever mess up the blending job 
too badly I can always easily start over at this step.
+
+**Note:** see [this tutorial on correcting blown out 
highlights](/tutorials/Photo_Edit/Blown_Out_Highlights/) for another example of using these tools for 
blending and some useful tips on their use.
+
+Here I've used primarily clone and a touch of smudge to blend the seams of the two exposures. I didn't do a 
very thorough job with this image, since it is more of an example and not something I'm planning to display 
at any significant size.
+
+**Note:** notice the chromatic aberration of the lens in the form of purple fringing at the edge of the 
arch. These tools are great for dealing with that even if I were not blending two exposures.
+
+## Final Step
+
+<figure>
+<img src="image-finished.jpg" alt="image-finished.jpg" />
+</figure>
+
+
+Finished. The image still has some problems with blown out highlights in the sunlight of the rock face. It 
is also a little too dark in the foreground shadow.
+
+## Further Reading on Blending Exposures
+
+*   [Dynamic Ranger.](http://www.digitalsecrets.net/secrets/DynamicRanger.html)
+*   [Vincent Bockaert's method of blending in 
Photoshop](http://www.vincentbockaert.com/Tutorials/ImagesFramePST_08_PS.htm)
+*   [Digital Photography For What it's Worth.](http://www.cliffshade.com/dpfwiw/)
+
+The original tutorial used to appear on 
[gimpguru](https://web.archive.org/web/20140704035059/http://gimpguru.org/tutorials/blendingexposures/).
+
diff --git a/content/tutorials/Blending_Exposures/lasso.jpg b/content/tutorials/Blending_Exposures/lasso.jpg
new file mode 100644
index 0000000..2b2d6ed
Binary files /dev/null and b/content/tutorials/Blending_Exposures/lasso.jpg differ
diff --git a/content/tutorials/Blending_Exposures/layers1.jpg 
b/content/tutorials/Blending_Exposures/layers1.jpg
new file mode 100644
index 0000000..b0dafb9
Binary files /dev/null and b/content/tutorials/Blending_Exposures/layers1.jpg differ
diff --git a/content/tutorials/Blending_Exposures/layers2.jpg 
b/content/tutorials/Blending_Exposures/layers2.jpg
new file mode 100644
index 0000000..b2cfd2b
Binary files /dev/null and b/content/tutorials/Blending_Exposures/layers2.jpg differ
diff --git a/content/tutorials/Blending_Exposures/layers3.jpg 
b/content/tutorials/Blending_Exposures/layers3.jpg
new file mode 100644
index 0000000..de750a2
Binary files /dev/null and b/content/tutorials/Blending_Exposures/layers3.jpg differ
diff --git a/content/tutorials/Blending_Exposures/layers4.jpg 
b/content/tutorials/Blending_Exposures/layers4.jpg
new file mode 100644
index 0000000..9a5fe82
Binary files /dev/null and b/content/tutorials/Blending_Exposures/layers4.jpg differ
diff --git a/content/tutorials/Blending_Exposures/layers5.jpg 
b/content/tutorials/Blending_Exposures/layers5.jpg
new file mode 100644
index 0000000..a9e7b8f
Binary files /dev/null and b/content/tutorials/Blending_Exposures/layers5.jpg differ
diff --git a/content/tutorials/Blending_Exposures/layers6.jpg 
b/content/tutorials/Blending_Exposures/layers6.jpg
new file mode 100644
index 0000000..dcfe31f
Binary files /dev/null and b/content/tutorials/Blending_Exposures/layers6.jpg differ
diff --git a/content/tutorials/Blending_Exposures/layers7.jpg 
b/content/tutorials/Blending_Exposures/layers7.jpg
new file mode 100644
index 0000000..8209237
Binary files /dev/null and b/content/tutorials/Blending_Exposures/layers7.jpg differ
diff --git a/content/tutorials/Blending_Exposures/newlayer.jpg 
b/content/tutorials/Blending_Exposures/newlayer.jpg
new file mode 100644
index 0000000..d494712
Binary files /dev/null and b/content/tutorials/Blending_Exposures/newlayer.jpg differ
diff --git a/content/tutorials/Blending_Exposures/newlayeroptions.jpg 
b/content/tutorials/Blending_Exposures/newlayeroptions.jpg
new file mode 100644
index 0000000..c8e9bc7
Binary files /dev/null and b/content/tutorials/Blending_Exposures/newlayeroptions.jpg differ
diff --git a/content/tutorials/Blending_Exposures/paint.jpg b/content/tutorials/Blending_Exposures/paint.jpg
new file mode 100644
index 0000000..162b80a
Binary files /dev/null and b/content/tutorials/Blending_Exposures/paint.jpg differ
diff --git a/content/tutorials/Blending_Exposures/smudge.jpg b/content/tutorials/Blending_Exposures/smudge.jpg
new file mode 100644
index 0000000..d3343b1
Binary files /dev/null and b/content/tutorials/Blending_Exposures/smudge.jpg differ
diff --git a/themes/newgimp/static/css/page.css b/themes/newgimp/static/css/page.css
index 0572f48..6f720cf 100644
--- a/themes/newgimp/static/css/page.css
+++ b/themes/newgimp/static/css/page.css
@@ -99,8 +99,10 @@ figure figcaption {
 
 .toc li ul {
     margin-bottom: 0;
+    margin-top: 0 !important;
 }
 
 .toc > ul > li {
-    margin-top: 1rem;
+    /* margin-top: 1rem;
+     */
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]