[gimp-web/gimp-web-static] Ported Perl-Debugged, Photo_To_Sketch, Quickmask, Red_Eye_Removal, Reducing_CCD_Noise
- From: Pat David <patdavid src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp-web/gimp-web-static] Ported Perl-Debugged, Photo_To_Sketch, Quickmask, Red_Eye_Removal, Reducing_CCD_Noise
- Date: Fri, 25 Sep 2015 19:46:18 +0000 (UTC)
commit ec1c8f1f7db14dbb2fc6d62bcc4ecb4d141246fe
Author: Pat David <patdavid gmail com>
Date: Fri Sep 25 14:46:07 2015 -0500
Ported Perl-Debugged, Photo_To_Sketch, Quickmask, Red_Eye_Removal, Reducing_CCD_Noise
content/about/meta/file-list.md | 18 +-
content/about/meta/index.md | 1 +
content/tutorials/Perl-Debugged/index.md | 253 ++++++++++++++++++++
.../tutorials/Photo_To_Sketch/after_highpass.jpeg | Bin 0 -> 96769 bytes
content/tutorials/Photo_To_Sketch/colour_trick.png | Bin 0 -> 33703 bytes
content/tutorials/Photo_To_Sketch/edges.jpeg | Bin 0 -> 32939 bytes
.../tutorials/Photo_To_Sketch/equalised_sobel.jpeg | Bin 0 -> 81649 bytes
content/tutorials/Photo_To_Sketch/highpass.png | Bin 0 -> 25297 bytes
content/tutorials/Photo_To_Sketch/index.md | 108 +++++++++
content/tutorials/Photo_To_Sketch/original.jpeg | Bin 0 -> 34077 bytes
.../Photo_To_Sketch/pencil_and_paint_sketch.jpeg | Bin 0 -> 60925 bytes
content/tutorials/Photo_To_Sketch/photo_edges.jpeg | Bin 0 -> 87404 bytes
content/tutorials/Photo_To_Sketch/sobel.jpeg | Bin 0 -> 22390 bytes
.../Photo_To_Sketch/starting_colouring.jpeg | Bin 0 -> 71666 bytes
.../Photo_To_Sketch/viewing_colouring.jpeg | Bin 0 -> 82851 bytes
content/tutorials/Quickmask/blur-15.jpg | Bin 0 -> 30376 bytes
content/tutorials/Quickmask/image.1.jpg | Bin 0 -> 75977 bytes
content/tutorials/Quickmask/image.2.jpg | Bin 0 -> 87048 bytes
content/tutorials/Quickmask/image.3.jpg | Bin 0 -> 76964 bytes
content/tutorials/Quickmask/image.4.jpg | Bin 0 -> 69866 bytes
content/tutorials/Quickmask/image.5.jpg | Bin 0 -> 68289 bytes
content/tutorials/Quickmask/image.6.jpg | Bin 0 -> 80877 bytes
content/tutorials/Quickmask/image.7.jpg | Bin 0 -> 67671 bytes
content/tutorials/Quickmask/index.md | 99 ++++++++
content/tutorials/Quickmask/newsprint.png | Bin 0 -> 345765 bytes
content/tutorials/Quickmask/pixelize-10.png | Bin 0 -> 328988 bytes
content/tutorials/Quickmask/spread-11.png | Bin 0 -> 328077 bytes
content/tutorials/Red_Eye_Removal/burnopts-sm.png | Bin 0 -> 15749 bytes
.../Red_Eye_Removal/dialog-channels-sm.png | Bin 0 -> 17556 bytes
content/tutorials/Red_Eye_Removal/dodgeorburn.png | Bin 0 -> 205 bytes
content/tutorials/Red_Eye_Removal/index.md | 64 +++++
content/tutorials/Red_Eye_Removal/swimming2.jpg | Bin 0 -> 10170 bytes
content/tutorials/Red_Eye_Removal/zoom1.png | Bin 0 -> 36147 bytes
content/tutorials/Red_Eye_Removal/zoom2.png | Bin 0 -> 35960 bytes
content/tutorials/Reducing_CCD_Noise/after.jpg | Bin 0 -> 19452 bytes
content/tutorials/Reducing_CCD_Noise/before.jpg | Bin 0 -> 22151 bytes
content/tutorials/Reducing_CCD_Noise/despeckle.jpg | Bin 0 -> 17543 bytes
.../Reducing_CCD_Noise/example2-after.jpg | Bin 0 -> 13133 bytes
.../Reducing_CCD_Noise/example2-before.jpg | Bin 0 -> 17990 bytes
.../image-despeckled-zoom100.jpg | Bin 0 -> 32004 bytes
.../Reducing_CCD_Noise/image-final-zoom100.jpg | Bin 0 -> 33905 bytes
.../tutorials/Reducing_CCD_Noise/image-final.jpg | Bin 0 -> 38933 bytes
.../Reducing_CCD_Noise/image-original-zoom100.jpg | Bin 0 -> 36875 bytes
.../Reducing_CCD_Noise/image-original.jpg | Bin 0 -> 40904 bytes
content/tutorials/Reducing_CCD_Noise/index.md | 83 +++++++
45 files changed, 615 insertions(+), 11 deletions(-)
---
diff --git a/content/about/meta/file-list.md b/content/about/meta/file-list.md
index 3179423..9355e11 100644
--- a/content/about/meta/file-list.md
+++ b/content/about/meta/file-list.md
@@ -177,15 +177,11 @@ The main page links go to legacy WGO, the link icon (if there) will go to the po
<del><http://www.gimp.org/tutorials/Creating_Icons/index.html></del> [<i class="fa
fa-link"></i>]({filename}../../tutorials/Creating_Icons/index.md)
<del><http://www.gimp.org/tutorials/Custom_Brushes/index.html></del> [<i class="fa
fa-link"></i>]({filename}../../tutorials/Custom_Brushes/index.md)
<del><http://www.gimp.org/tutorials/Digital_Black_and_White_Conversion/index.html></del> [<i class="fa
fa-link"></i>]({filename}../../tutorials/Digital_Black_and_White_Conversion/index.md)
-
<del><http://www.gimp.org/tutorials/Draw_A_Paint_Brush/index.html></del> [<i class="fa
fa-link"></i>]({filename}../../tutorials/Draw_A_Paint_Brush/index.md)
-
<http://www.gimp.org/tutorials/Drawables/index.html>
<del><http://www.gimp.org/tutorials/Drawing_Shapes/index.html></del> [<i class="fa
fa-link"></i>]({filename}../../tutorials/Drawing_Shapes/index.md)
-
<del><http://www.gimp.org/tutorials/Film_Grain/index.html></del> [<i class="fa
fa-link"></i>]({filename}../../tutorials/Film_Grain/index.md)
<del><http://www.gimp.org/tutorials/Floating_Logo/index.html></del> [<i class="fa
fa-link"></i>]({filename}../../tutorials/Floating_Logo/index.md)
-
<del><http://www.gimp.org/tutorials/GIMP_Quickies/index.html></del> [<i class="fa
fa-link"></i>](/tutorials/GIMP_Quickies/)
<del><http://www.gimp.org/tutorials/Golden_Text/index.html></del> [<i class="fa
fa-link"></i>]({filename}../../tutorials/Golden_Text/index.md)
<del><http://www.gimp.org/tutorials/Image_Map/index.html></del> [<i class="fa
fa-link"></i>]({filename}../../tutorials/Golden_Text/index.md)
@@ -201,13 +197,13 @@ The main page links go to legacy WGO, the link icon (if there) will go to the po
<del><http://www.gimp.org/tutorials/Lite_Quickies/index.html></del> [<i class="fa
fa-link"></i>]({filename}../../tutorials/Layer_Masks/index.md)
<del><http://www.gimp.org/tutorials/Lite_Quickies/jpegrace.html></del>
<del><http://www.gimp.org/tutorials/Luminosity_Masks/index.html></del> [<i class="fa
fa-link"></i>]({filename}../../tutorials/Luminosity_Masks/index.md)
-<http://www.gimp.org/tutorials/Perl-Debugged/index.html>
-<del><http://www.gimp.org/tutorials/Perlotine/index.html></del> [<i class="fa
fa-link"></i>]({filename}../../tutorials/Luminosity_Masks/index.md)
-<del><http://www.gimp.org/tutorials/Perlotine/nested.html></del> [<i class="fa
fa-link"></i>]({filename}../../tutorials/Luminosity_Masks/index.md)
-<http://www.gimp.org/tutorials/Photo_To_Sketch/index.html>
-<http://www.gimp.org/tutorials/Quickmask/index.html>
-<http://www.gimp.org/tutorials/Red_Eye_Removal/index.html>
-<http://www.gimp.org/tutorials/Reducing_CCD_Noise/index.html>
+<del><http://www.gimp.org/tutorials/Perl-Debugged/index.html></del> [<i class="fa
fa-link"></i>]({filename}../../tutorials/Perl-Debugged/index.md)
+<del><http://www.gimp.org/tutorials/Perlotine/index.html></del>
+<del><http://www.gimp.org/tutorials/Perlotine/nested.html></del>
+<del><http://www.gimp.org/tutorials/Photo_To_Sketch/index.html></del> [<i class="fa
fa-link"></i>]({filename}../../tutorials/Photo_To_Sketch/index.md)
+<del><http://www.gimp.org/tutorials/Quickmask/index.html></del> [<i class="fa
fa-link"></i>]({filename}../../tutorials/Quickmask/index.md)
+<del><http://www.gimp.org/tutorials/Red_Eye_Removal/index.html></del> [<i class="fa
fa-link"></i>]({filename}../../tutorials/Red_Eye_Removal/index.md)
+<del><http://www.gimp.org/tutorials/Reducing_CCD_Noise/index.html></del> [<i class="fa
fa-link"></i>]({filename}../../tutorials/Reducing_CCD_Noise/index.md)
<http://www.gimp.org/tutorials/Selective_Color/index.html>
<http://www.gimp.org/tutorials/Selective_Gaussian_Blur/index.html>
<http://www.gimp.org/tutorials/Sepia_Toning/index.html>
diff --git a/content/about/meta/index.md b/content/about/meta/index.md
index 0fb857b..f885d50 100644
--- a/content/about/meta/index.md
+++ b/content/about/meta/index.md
@@ -16,6 +16,7 @@ I (Pat David) am creating this page to keep notes and information for building/m
* [Using Pelican](./using-pelican/)
* [Markdown Cheatsheet](./markdown.html)
* [Translations (more info)](./translations.html)
+* [Old URL List](./file-list.html)
The work I am doing here is based on a couple of suggestions over the past year (or more, I'm sure) to
refresh the design of WGO.
diff --git a/content/tutorials/Perl-Debugged/index.md b/content/tutorials/Perl-Debugged/index.md
new file mode 100644
index 0000000..53b6d54
--- /dev/null
+++ b/content/tutorials/Perl-Debugged/index.md
@@ -0,0 +1,253 @@
+Title: Perl Debugged
+Date: 2002
+Modified: 2015-09-25T13:33:27-05:00
+Author: Seth Burgess
+
+<small>
+Text and images Copyright (C) 2002 [Seth Burgess](mailto:sjburgesNOSPAM gimp org) and may not be used
without permission of the author.
+</small>
+
+## Intention
+
+The Perl module for GIMP is a nice evolution of the scripting interface of GIMP. It removes the dependence
on the relatively rarely encountered scheme language of script-fu and replaces it with one that is familiar
to a much larger audience. In doing so, the perl interface to GIMP also can take advantage of many of the
features that have been added to perl over the years.
+
+My aim in creating this tutorial is to make debugging scripts easier. We'll touch on the facilities provided
by the Gimp module, and then focus on using the perl debugger to interactively develop scripts.
+
+To illustrate the points in this tutorial, this is a simple script that will change as we progress:
+
+ :::perl
+ #!/usr/bin/perl
+
+ use Gimp qw(:auto);
+ use Gimp::Fu;
+ use Gimp::Util;
+
+ register "example", "Example", "Dumb example for debugging",
+ "Seth Burgess", "Seth Burgess ", "1.0",
+ "/Xtns/Dumb Example", "*", [], sub {
+
+ $fname = "/home/seth/dumb.jpg";
+ $img = gimp_file_load($fname, $fname);
+ $img->display_new();
+
+ return();
+ };
+
+ exit main;
+
+
+## Gimp::set_trace
+
+The Gimp module provides tracing ability, which is a form of debugging. To activate this, start GIMP from an
XTerm, and place the following at the top of the script:
+
+ :::perl
+ #!/usr/bin/perl
+
+ use Gimp qw(:auto);
+ use Gimp::Fu;
+ use Gimp::Util;
+
+ **Gimp::set_trace(TRACE_ALL);**
+
+ register "example", "Example", "Dumb example for debugging",
+ "Seth Burgess", "Seth Burgess ", "1.0",
+ "/Xtns/Dumb Example", "*", [], sub {
+
+ $fname = "/home/seth/dumb.jpg";
+ $img = gimp_file_load($fname, $fname);
+ $img->display_new();
+
+ return();
+ };
+
+ exit main;
+
+This will give the maximum amount of tracing information, displayed on the console window you start GIMP
from. You can cut back on what all gets displayed by using an "or'ed" combination of the following other
options in place of TRACE_ALL:
+
+<table style="background: #CCFFCC none; max-width:34rem;margin:1rem auto;">
+
+<tbody>
+
+<tr>
+
+<td style="width: 20%;">TRACE_NONE</td>
+
+<td style="width: 40%">turn off tracing</td>
+
+</tr>
+
+<tr>
+
+<td>TRACE_CALL</td>
+
+<td>trace only GIMP Procedural Database (PDB) calls (including arguments and return values)</td>
+
+</tr>
+
+<tr>
+
+<td>TRACE_TYPE</td>
+
+<td>also print the parameter types</td>
+
+</tr>
+
+<tr>
+
+<td>TRACE_NAME</td>
+
+<td>print the parameter names</td>
+
+</tr>
+
+<tr>
+
+<td>TRACE_DESC</td>
+
+<td>print the parameter descriptions</td>
+
+</tr>
+
+</tbody>
+
+</table>
+
+Using TRACE_ALL can let you see easily what parameters are wrong so you can fix misbehaviour in scripts. It
provides a powerful history of what could be going wrong in your script.
+
+## Perl Debugger
+
+Perl comes with a debugger built in, which we can effectively utilize for interactive execution of our
scripts. To invoke this, put a -d on the invocation line for the script as follows:
+
+ :::perl
+ #!/usr/bin/perl **-d**
+
+ use Gimp qw(:auto);
+ use Gimp::Fu;
+ use Gimp::Util;
+ # Gimp::set_trace(TRACE_ALL); # uncomment to do tracing
+
+ register "example", "Example", "Dumb example for debugging",
+ "Seth Burgess", "Seth Burgess <sjburges\ gimp org>, "1.0",
+ "/Xtns/Dumb Example", "*", [], sub {
+
+ $fname = "/home/seth/dumb.jpg";
+ $img = gimp_file_load($fname, $fname);
+ $img->display_new();
+
+ return();
+ };
+
+ exit main;
+
+If you change a Gimp-Perl script to utilize this, you'll notice GIMP halting on startup. This is because
GIMP is querying the plug-in, and it is halting due to having debugging enabled. Just type 'c' in the window,
and then 'q' to let GIMP continue loading:
+
+ :::perl
+ Enter h or `h h' for help, or `man perldebug' for more help.
+
+ main::(/home/seth/.gimp-1.3/plug-ins/demo:21):
+ 21: };
+ DB<1> c
+ Debugged program terminated. Use q to quit or R to restart,
+ use O inhibit_exit to avoid stopping after program termination,
+ h q, h R or h O to get additional info.
+ DB<1> q
+
+This is not a part of the script we're really intrested in - its the registration of the plug-in with GIMP.
It turns out to be a really annoying behaviour, since every time we modify the script we'll need to do this
on startup. Luckily we have another way of attacking this provided by the Gimp module - that is the Perl
Server.
+
+First, move your script out of your plug-ins directory to somewhere else. Then startup GIMP. Start the Perl
Server by going to <span class="filter">Xtns -> Perl Server</span>. You'll see something like the following
in the XTerm window of GIMP:
+
+ :::
+ 989020828: server version 1.201 started
+ 989020828: accepting connections on /tmp/gimp-perl-serv-uid-1000/gimp-perl-serv
+
+Now from another XTerm, execute the script (just type its name). This will immediately start debugging the
new script. You can set a breakpoint on a line of your choice and execute 'c' to let it execute until that
line.
+
+ :::
+ DB<1> b 13
+ DB<2> c
+ 13: $fname = "/home/seth/dumb.jpg";
+
+You can now examine variables with perl functions (print $fname) and modify them during runtime. You can
change the point of execution, and do most everything you'd expect from a debugger.
+
+## $DB::single
+
+Instead of having to remember what line the intresting part of your script starts on and set a breakpoint
there, perl provides a way to programmatically jump into single-step mode. Add the following to the top of
your sub:
+
+ :::perl
+ #!/usr/bin/perl -d
+
+ use Gimp qw(:auto);
+ use Gimp::Fu;
+ use Gimp::Util;
+ # Gimp::set_trace(TRACE_ALL); # uncomment to do tracing
+
+ register "example", "Example", "Dumb example for debugging",
+ "Seth Burgess", "Seth Burgess <sjburges\ gimp org>", "1.0",
+ "/Xtns/Dumb Example", "*", [], sub {
+
+ **$DB::single = 1; # Enter single step if using -d**
+
+ $fname = "/home/seth/dumb.jpg";
+ $img = gimp_file_load($fname, $fname);
+ $img->display_new();
+
+ return();
+ };
+
+ exit main;
+
+Now when you run your script, hit 'c' and it will break on the entry of the sub {} call. Using $DB::single
will only have any effect when using -d - its ignored otherwise, so you can leave it in scripts without any
side effects.
+
+## Example Session
+
+After invoking the perl server, I run 'Example' from a commandline shell:
+
+ :::
+ Default die handler restored.
+
+ Loading DB routines from perl5db.pl version 1.07
+ Editor support available.
+
+ Enter h or `h h' for help, or `man perldebug' for more help.
+
+ main::(./Example:20): };
+ DB<1> c
+ main::CODE(0x83f240c)(./Example:15):
+ 15: $fname = "/home/seth/dumb.jpg";
+ DB<1> n
+ main::CODE(0x83f240c)(./Example:16):
+ 16: $img = gimp_file_load($fname, $fname);
+ DB<1> print $fname
+ /home/seth/dumb.jpg
+ DB<2> $fname = "/home/seth/foo.png";
+
+ DB<3> print $fname
+ /home/seth/foo.png
+ DB<4> n
+ main::CODE(0x83f240c)(./Example:17):
+ 17: $img->display_new();
+ DB<4> n
+ main::CODE(0x83f240c)(./Example:19):
+ 19: return();
+ DB<4> c
+ Debugged program terminated. Use q to quit or R to restart,
+ use O inhibit_exit to avoid stopping after program termination,
+ h q, h R or h O to get additional info.
+ DB<4> q
+
+This example session shows changing a value of a variable at run-time so to load a different file than the
one hard-coded into the script. Note that I continue ('c') and it stops immediately after $DB::single is set.
+
+Far more complex debugging is possible, but this should give you a good taste of what its all about.
+
+## Conclusion
+
+Thats all there is to it! I hope this has been useful to you.
+
+You can [download a compressed copy](perldebug.tar.gz) of this tutorial. You can also get a [copy of the
script](Example). Feel free to use either/both however you want.
+
+This tutorial has gone over the basics of using the Gimp module for tracing, the Perl Server for starting
your scripts, and using the perl debugger to interactively execute your scripts. If you have comments,
questions, or suggestions about this tutorial, please drop me a line.
+
+Happy GIMPing, Seth
+
+The original tutorial can be found [here](http://classic.gimp.org/~sjburges/perl_debug/intro.html).
+
diff --git a/content/tutorials/Photo_To_Sketch/after_highpass.jpeg
b/content/tutorials/Photo_To_Sketch/after_highpass.jpeg
new file mode 100644
index 0000000..4fabf13
Binary files /dev/null and b/content/tutorials/Photo_To_Sketch/after_highpass.jpeg differ
diff --git a/content/tutorials/Photo_To_Sketch/colour_trick.png
b/content/tutorials/Photo_To_Sketch/colour_trick.png
new file mode 100644
index 0000000..e4a622f
Binary files /dev/null and b/content/tutorials/Photo_To_Sketch/colour_trick.png differ
diff --git a/content/tutorials/Photo_To_Sketch/edges.jpeg b/content/tutorials/Photo_To_Sketch/edges.jpeg
new file mode 100644
index 0000000..19d1c4f
Binary files /dev/null and b/content/tutorials/Photo_To_Sketch/edges.jpeg differ
diff --git a/content/tutorials/Photo_To_Sketch/equalised_sobel.jpeg
b/content/tutorials/Photo_To_Sketch/equalised_sobel.jpeg
new file mode 100644
index 0000000..72169f3
Binary files /dev/null and b/content/tutorials/Photo_To_Sketch/equalised_sobel.jpeg differ
diff --git a/content/tutorials/Photo_To_Sketch/highpass.png b/content/tutorials/Photo_To_Sketch/highpass.png
new file mode 100644
index 0000000..f2a5a6f
Binary files /dev/null and b/content/tutorials/Photo_To_Sketch/highpass.png differ
diff --git a/content/tutorials/Photo_To_Sketch/index.md b/content/tutorials/Photo_To_Sketch/index.md
new file mode 100644
index 0000000..d9c41ef
--- /dev/null
+++ b/content/tutorials/Photo_To_Sketch/index.md
@@ -0,0 +1,108 @@
+Title: Photo to Sketch
+Date: 2002
+Modified: 2015-09-25T13:33:27-05:00
+Author: Dave Neary
+
+
+<small>
+Text and images Copyright (C) 2002 [Dave Neary](mailto:bolshNOSPAM gimp org) and may not be used without
permission of the author.
+</small>
+
+## Intention
+
+Tutorial on how to make a nice baby & daddy photo into a nice baby & daddy painting.
+
+## 1. Original image
+
+<figure>
+<img src="original.jpeg" alt="original.jpeg"/>
+</figure>
+
+Nice picture of a baby & dad. Ah.
+
+## 2. After a Sobel edge detect
+
+<figure>
+<img src="sobel.jpeg" alt="sobel.jpeg"/>
+</figure>
+
+Straightforward Sobel edge detect (<span class="filter"><Image> Filters -> Edge-Detect -> Sobel</span>) of
original (don't forget to save a copy of the original) The Sobel edge detect should be done on the background
image (without an alpha channel) rather than a copy of the background (which has an alpha channel).
+
+## 3. Equalised & desaturated Sobel
+
+<figure>
+<img src="equalised_sobel.jpeg" alt="equalised_sobel.jpeg"/>
+</figure>
+
+Bring out detail with an auto-equalise (<span class="filter"><Image> Layer -> Colors -> Auto ->
Auto-Equalize</span>) of the sobel edge detect, and convert it to greys using desaturate (<span
class="filter"><Image> Layer -> Colors -> Desaturate</span>).
+
+## 4. Curves window for how to do a highpass filter
+
+<figure>
+<img src="highpass.png" alt="highpass.png"/>
+</figure>
+
+We only want the strong edges, otherwise it'll look crap. To get them, we eliminate the edges with small
magnitude. The easiest way to do this is with the curves tool (<span class="filter"><Image> Image -> Colors
-> Curves</span>) like this.
+
+We set the curve type to free (which allows discontinuities), and then for the bottom 3/4 of the curve (or
thereabouts) to 0. Just drag the mouse/pen along the bottom of the curves tool.
+
+## 5. Image after the highpass
+
+<figure>
+<img src="after_highpass.jpeg" alt="after_highpass.jpeg"/>
+</figure>
+
+The result is much cleaner. The only problem is it's white-on-black, when we want black-on-transparent
ideally.
+
+## 6. L&C dialog for creating an edges mask
+
+<figure>
+<img src="edges.jpeg" alt="edges.jpeg"/>
+</figure>
+
+Small trick to get to black-on-transparent. Invert the Sobel edge detect (you did keep a copy, right?) with
<span class="filter"><Image> Layer -> Colors -> Invert</span> and apply our highpass-filtered copy as a mask.
To do this, open the Layers & Channels dialog (if it's not open already), and add a layer mask to the layer
with the inverted edge detect layer (<span class="filter"><Image> Edit -> Copy</span> with the highpass layer
selected, <span class="filter"><Layer> Add Layer Mask</span> with the inverted edge layer selected, then
select the mask and <span class="filter"><Image> Edit -> Paste</span>) Since we kept the strong edges in the
highpass filtered layer, this means that we end up with a rather nice black-on-transparent layer.
+
+## 7. Save of the image above to show effect
+
+<figure>
+<img src="photo_edges.jpeg" alt="photo_edges.jpeg"/>
+</figure>
+
+This is the result of the trick above. It's shown here with a white layer behind it. We could stop here, and
this is a decent sketch effect. For the colouring, we need some more work (mostly slogging, though).
+
+## 8. L&C dialog with set-up for the colouring trick
+
+<figure>
+<img src="colour_trick.png" alt="colour_trick.png"/>
+<figcaption>
+images,original image & colouring layer in overlay mode
+</figcaption>
+</figure>
+
+
+We put our original image back in the background, and set the white layer to overlay (as we see here) - this
means we can see the coloured areas behind the white layer - this is extremely helpful when we're painting
the white layer, as sometimes the edges are rather fine, or are in the middle of an area that's more or less
the same colour.
+
+## 9. Colouring looks after doing one area of the image
+
+<figure>
+<img src="starting_colouring.jpeg" alt="starting_colouring.jpeg"/>
+</figure>
+
+Using the colour-picker tool (looks like an eye-dropper), we select the colour we want to paint from the
original image (just activate the "original image" layer and try to pick a colour representative of an area),
and then we re-activate our colouring layer, which is still in overlay mode. Using a big brush (with the
brush tool for more natural edges) we fill in the area of that colour roughly (doesn't have to be perfect).
You should see the colour darkening as we draw with a colour similar to the background colour.
+
+## 10. Colouring layer in normal mode
+
+<figure>
+<img src="viewing_colouring.jpeg" alt="viewing_colouring.jpeg"/>
+</figure>
+
+This is what we see if we set the colour drawing layer to normal mode. And we're on our way.
+
+## 11. Finished with a completed colour layer
+
+<figure>
+<img src="pencil_and_paint_sketch.jpeg" alt="pencil_and_paint_sketch.jpeg"/>
+</figure>
+
+After some effort, all the regions get filled in. Final touches to make faces and the like look better for
shadows and highlights were accomplished by selecting a representative shadow/highlight colour, and adding
the extra bits with the airbrush tool (looks like an airbrush). After all our work, we end up with this very
nice looking painting effect.
+
diff --git a/content/tutorials/Photo_To_Sketch/original.jpeg b/content/tutorials/Photo_To_Sketch/original.jpeg
new file mode 100644
index 0000000..956f363
Binary files /dev/null and b/content/tutorials/Photo_To_Sketch/original.jpeg differ
diff --git a/content/tutorials/Photo_To_Sketch/pencil_and_paint_sketch.jpeg
b/content/tutorials/Photo_To_Sketch/pencil_and_paint_sketch.jpeg
new file mode 100644
index 0000000..6e114cb
Binary files /dev/null and b/content/tutorials/Photo_To_Sketch/pencil_and_paint_sketch.jpeg differ
diff --git a/content/tutorials/Photo_To_Sketch/photo_edges.jpeg
b/content/tutorials/Photo_To_Sketch/photo_edges.jpeg
new file mode 100644
index 0000000..50da377
Binary files /dev/null and b/content/tutorials/Photo_To_Sketch/photo_edges.jpeg differ
diff --git a/content/tutorials/Photo_To_Sketch/sobel.jpeg b/content/tutorials/Photo_To_Sketch/sobel.jpeg
new file mode 100644
index 0000000..87886f7
Binary files /dev/null and b/content/tutorials/Photo_To_Sketch/sobel.jpeg differ
diff --git a/content/tutorials/Photo_To_Sketch/starting_colouring.jpeg
b/content/tutorials/Photo_To_Sketch/starting_colouring.jpeg
new file mode 100644
index 0000000..60a17a4
Binary files /dev/null and b/content/tutorials/Photo_To_Sketch/starting_colouring.jpeg differ
diff --git a/content/tutorials/Photo_To_Sketch/viewing_colouring.jpeg
b/content/tutorials/Photo_To_Sketch/viewing_colouring.jpeg
new file mode 100644
index 0000000..8cfe0e7
Binary files /dev/null and b/content/tutorials/Photo_To_Sketch/viewing_colouring.jpeg differ
diff --git a/content/tutorials/Quickmask/blur-15.jpg b/content/tutorials/Quickmask/blur-15.jpg
new file mode 100644
index 0000000..27aa033
Binary files /dev/null and b/content/tutorials/Quickmask/blur-15.jpg differ
diff --git a/content/tutorials/Quickmask/image.1.jpg b/content/tutorials/Quickmask/image.1.jpg
new file mode 100644
index 0000000..1da829b
Binary files /dev/null and b/content/tutorials/Quickmask/image.1.jpg differ
diff --git a/content/tutorials/Quickmask/image.2.jpg b/content/tutorials/Quickmask/image.2.jpg
new file mode 100644
index 0000000..a2f0fd6
Binary files /dev/null and b/content/tutorials/Quickmask/image.2.jpg differ
diff --git a/content/tutorials/Quickmask/image.3.jpg b/content/tutorials/Quickmask/image.3.jpg
new file mode 100644
index 0000000..fe7c92b
Binary files /dev/null and b/content/tutorials/Quickmask/image.3.jpg differ
diff --git a/content/tutorials/Quickmask/image.4.jpg b/content/tutorials/Quickmask/image.4.jpg
new file mode 100644
index 0000000..5ae61ab
Binary files /dev/null and b/content/tutorials/Quickmask/image.4.jpg differ
diff --git a/content/tutorials/Quickmask/image.5.jpg b/content/tutorials/Quickmask/image.5.jpg
new file mode 100644
index 0000000..ef2db0d
Binary files /dev/null and b/content/tutorials/Quickmask/image.5.jpg differ
diff --git a/content/tutorials/Quickmask/image.6.jpg b/content/tutorials/Quickmask/image.6.jpg
new file mode 100644
index 0000000..d9bda2b
Binary files /dev/null and b/content/tutorials/Quickmask/image.6.jpg differ
diff --git a/content/tutorials/Quickmask/image.7.jpg b/content/tutorials/Quickmask/image.7.jpg
new file mode 100644
index 0000000..884e62b
Binary files /dev/null and b/content/tutorials/Quickmask/image.7.jpg differ
diff --git a/content/tutorials/Quickmask/index.md b/content/tutorials/Quickmask/index.md
new file mode 100644
index 0000000..3b9c98d
--- /dev/null
+++ b/content/tutorials/Quickmask/index.md
@@ -0,0 +1,99 @@
+Title: Quickmask Tutorial
+Date: 2002
+Modified: 2015-09-25T13:33:27-05:00
+Author: Zach Beane
+
+<small>
+Text and images Copyright (C) 2002 [Zach Beane](mailto:xachNOSPAM gimp org) and may not be used without
permission of the author.
+</small>
+
+## Intention
+
+<figure>
+<img src="blur-15.jpg" alt="blur-15.jpg"/>
+</figure>
+
+This tutorial shows how you can do vignette effects using a feature of GIMP called QuickMask. QuickMask is a
convenient way to modify selections using pixel-changing tools such as the paintbrush, eraser, or any plug-in
filter. It lets you make very precise adjustments to your selections. This tutorial doesn't use QuickMask for
complex masking; it's intended to show how you can use it to create quick and easy vignette effects.
+
+## Step 1
+
+<figure>
+<img src="image.1.jpg" alt="image.1.jpg"/>
+</figure>
+
+For your first step, load up an image. Any image will do. GIMP 1.1.7, a development version of GIMP,
introduced QuickMask. The QuickMask control button is located at the lower-left side of the image.
+
+## Step 2
+
+<figure>
+<img src="image.2.jpg" alt="image.2.jpg"/>
+</figure>
+
+First, make a rectangular selection around the edge of the image. Then click on the red-bordered QuickMask
icon in the lower-left corner of your image.
+
+## Step 3
+
+<figure>
+<img src="image.3.jpg" alt="image.3.jpg"/>
+</figure>
+
+After you click the red QuickMask button, a translucent red mask appears around your selection. This red
mask represents the outside of your selection. When you click the dashed QuickMask button to go back into
normal selection mode, anything red will not be selected, and anything clear will be. So, let's start playing
with this mask. First, right click on the image and select
+
+<div class="MenuCmd"><span>Filters → Distorts → Waves</span></div>
+
+from the menu. Apply the filter, and watch what happens to the mask.
+
+## Step 4
+
+<figure>
+<img src="image.4.jpg" alt="image.4.jpg"/>
+</figure>
+
+The mask gets all wavy. Let's add one more effect: `Filters → Blur → Gaussian Blur (RLE)`.
+
+## Step 5
+
+<figure>
+<img src="image.5.jpg" alt="image.5.jpg"/>
+</figure>
+
+Now that there is a soft edge on the mask, click the dashed QuickMask button to convert the mask back into a
selection.
+
+## Step 6
+
+<figure>
+<img src="image.6.jpg" alt="image.6.jpg"/>
+</figure>
+
+See how the selection follows the mask? This is a powerful feature of QuickMask. You can use it to modify
any existing selection, and you can even use it to create new selections. Our last step is to use `Select →
Invert` and `Edit → Fill with BG Color`. The result, a soft white fade into the background, is shown in the
final step.
+
+## Final
+
+<figure>
+<img src="image.7.jpg" alt="image.7.jpg"/>
+</figure>
+
+And there you have it. Some more examples are listed below. Happy GIMPing!
+
+## Examples
+
+<figure>
+<img src="spread-11.png" alt="spread-11.png"/>
+</figure>
+
+The above image used `Filters → Noise → Spread`, with horizontal and vertical settings at 11, to get the
effect.
+
+<figure>
+<img src="newsprint.png" alt="newsprint.png"/>
+</figure>
+
+I used some blurring and the `Filters → Distorts → Newsprint` plugin to get this effect.
+
+<figure>
+<img src="pixelize-10.png" alt="pixelize-10.png"/>
+</figure>
+
+As in the tutorial, this one used Waves, but instead of blurring, I used `Filters → Blur → Pixelize` instead.
+
+The original tutorial can be found [here](http://www.xach.com/gimp/tutorials/quickmask/).
+
diff --git a/content/tutorials/Quickmask/newsprint.png b/content/tutorials/Quickmask/newsprint.png
new file mode 100644
index 0000000..27ef826
Binary files /dev/null and b/content/tutorials/Quickmask/newsprint.png differ
diff --git a/content/tutorials/Quickmask/pixelize-10.png b/content/tutorials/Quickmask/pixelize-10.png
new file mode 100644
index 0000000..3f209bd
Binary files /dev/null and b/content/tutorials/Quickmask/pixelize-10.png differ
diff --git a/content/tutorials/Quickmask/spread-11.png b/content/tutorials/Quickmask/spread-11.png
new file mode 100644
index 0000000..cf78533
Binary files /dev/null and b/content/tutorials/Quickmask/spread-11.png differ
diff --git a/content/tutorials/Red_Eye_Removal/burnopts-sm.png
b/content/tutorials/Red_Eye_Removal/burnopts-sm.png
new file mode 100644
index 0000000..cf18fff
Binary files /dev/null and b/content/tutorials/Red_Eye_Removal/burnopts-sm.png differ
diff --git a/content/tutorials/Red_Eye_Removal/dialog-channels-sm.png
b/content/tutorials/Red_Eye_Removal/dialog-channels-sm.png
new file mode 100644
index 0000000..442145f
Binary files /dev/null and b/content/tutorials/Red_Eye_Removal/dialog-channels-sm.png differ
diff --git a/content/tutorials/Red_Eye_Removal/dodgeorburn.png
b/content/tutorials/Red_Eye_Removal/dodgeorburn.png
new file mode 100644
index 0000000..61b71d1
Binary files /dev/null and b/content/tutorials/Red_Eye_Removal/dodgeorburn.png differ
diff --git a/content/tutorials/Red_Eye_Removal/index.md b/content/tutorials/Red_Eye_Removal/index.md
new file mode 100644
index 0000000..40bbcc8
--- /dev/null
+++ b/content/tutorials/Red_Eye_Removal/index.md
@@ -0,0 +1,64 @@
+Title: Red Eye Removal
+Date: 2002
+Modified: 2015-09-25T13:33:27-05:00
+Author: Carol Spears
+
+
+<small>
+Text and images Copyright (C) 2002 [Carol Spears](mailto:carolNOSPAM gimp org) and may not be used without
permission of the author.
+</small>
+
+_Editor's note: since this tutorial was written, the Red Eye Removal plug-in has been included in the
default GIMP package (see `Filters → Enhance → Red Eye Removal`). This tutorial is still useful if you want
to do things by hand._
+
+## Intention
+
+It used to be that the photos with red eye weren't really worth fixing as only cheesy cameras had the flash
built in and underneath the red eyes was a crappy photo. Well, welcome to the future when you can get a
pretty good image from a camera with the flash built in. They do not have a button that works to prevent this
yet, so don't even try it. The best way to fix red eye on photos is to have those intense people look at the
photographers shoulder. The cause of red eye is the flash reflecting from the back of the eye and into the
lens. So, until this lovely child is able to understand "look at my shoulder" it is good to know that red eye
can be fixed, somewhat. I learned the following method from tigert while lurking on the irc late late one
night.
+
+## Step 1
+
+<figure>
+<img src="zoom1.png" alt="zoom1.png"/>
+</figure>
+
+I zoomed in on the image, 4:1 ratio, as this is almost pixel by pixel work. I ended up using the 5 x 5 fuzzy
brush that came with the GIMP tarball. As usual, your choice depends on the resolution of your image. A fuzzy
brush is highly recommended. On this web sized image, the 3 x 3 fuzzy brush didn't work fast enough. As
always, you can `Edit → Undo` until you make the right selections.
+
+## Step 2
+
+<figure>
+<img src="dialog-channels-sm.png" alt="dialog-channels-sm.png"/>
+</figure>
+
+A long time ago, someone suggested on the gimp-user list that the Layers, Channels and Paths Dialog always
remain open while you use GIMP. Some three years later, I still follow and give this advice. So, if your
Layers,Channels and Paths Dialog is not open, open it and leave it open. Select the Channels Tab. Deactivate
the Green and Blue Channels by clicking to the right of the thumbnails in the dialog window.
+
+The image should still look like the screenshot of the close up in step 1. If it looks all red, you have
just turned the view of the color off. (burning the red eye area will not work if the Layers,Channels and
Paths dialog is set up that way, I happen to know).
+
+## Step 3
+
+<figure>
+<img src="burnopts-sm.png" alt="burnopts-sm.png"/>
+</figure>
+
+Make certain you have a good brush selected (for this image I used the 5 x 5 fuzzy) Then select the Dodge
and Burn Tool.
+
+<img src="dodgeorburn.png" alt="dodgeorburn.png"/> Double click on the button to get the Tool Options
dialog. My dialog defaults to dodge and midtones, for this project, choose burn and hightlights (as
illustrated). Touch all of the red in the eyes with the burn tool. I think that I used the burn tool on the
midtones just a little bit also. GIMP doesn't have a magic button to fix red eyes with, but it has the tools.
It has been my experience that each image is slightly different and I sort of like the control that GIMP
gives you...
+
+tigert warned that this method can leave the white spots in the eyes slightly green. I have found this to be
true, however so far it hasn't been enough green to worry about. Given a photo where the green will make a
difference, you can use the same tool combination on the green channel, just move the opacity slider to a
smaller percentage. `Edit → Undo` until you get it right.
+
+## Final
+
+<figure>
+<img src="zoom2.png" alt="zoom2.png"/>
+</figure>
+
+... looking so much better!
+
+The very best fix, of course would be to prevent it from happening. Due to the nature of the problem, my
guess is that it will be the same people over and over again with this problem. Some personalities have no
problem looking deeply into the camera lens (like this beautiful baby for instance) and maintaining the gaze
through the flash. My guess is that as soon as these people know what is going on, they can fix it
themselves.
+
+Other personalities have other portrait problems. There is a small handful of people who have no problem
looking into the camera lens, but anticipate the flash and blink at the wrong moment. This causes the
portrait to look like the object is starting to sneeze. (this is what happens to me) If you know of a method
to prevent this, please email me.
+
+<figure>
+<img src="swimming2.jpg" alt="swimming2.jpg"/>
+</figure>
+
+What a cute baby. This is Maurits and his baby. He is one of a growing list of developers that are changing
their babies while working on GIMP. I watched work on WinGIMP occuring between diaper changings and feedings
also. *chuckle*
+
diff --git a/content/tutorials/Red_Eye_Removal/swimming2.jpg b/content/tutorials/Red_Eye_Removal/swimming2.jpg
new file mode 100644
index 0000000..88eb7d0
Binary files /dev/null and b/content/tutorials/Red_Eye_Removal/swimming2.jpg differ
diff --git a/content/tutorials/Red_Eye_Removal/zoom1.png b/content/tutorials/Red_Eye_Removal/zoom1.png
new file mode 100644
index 0000000..d37f2bd
Binary files /dev/null and b/content/tutorials/Red_Eye_Removal/zoom1.png differ
diff --git a/content/tutorials/Red_Eye_Removal/zoom2.png b/content/tutorials/Red_Eye_Removal/zoom2.png
new file mode 100644
index 0000000..a047194
Binary files /dev/null and b/content/tutorials/Red_Eye_Removal/zoom2.png differ
diff --git a/content/tutorials/Reducing_CCD_Noise/after.jpg b/content/tutorials/Reducing_CCD_Noise/after.jpg
new file mode 100644
index 0000000..a143b0d
Binary files /dev/null and b/content/tutorials/Reducing_CCD_Noise/after.jpg differ
diff --git a/content/tutorials/Reducing_CCD_Noise/before.jpg b/content/tutorials/Reducing_CCD_Noise/before.jpg
new file mode 100644
index 0000000..c453ffe
Binary files /dev/null and b/content/tutorials/Reducing_CCD_Noise/before.jpg differ
diff --git a/content/tutorials/Reducing_CCD_Noise/despeckle.jpg
b/content/tutorials/Reducing_CCD_Noise/despeckle.jpg
new file mode 100644
index 0000000..ffedde4
Binary files /dev/null and b/content/tutorials/Reducing_CCD_Noise/despeckle.jpg differ
diff --git a/content/tutorials/Reducing_CCD_Noise/example2-after.jpg
b/content/tutorials/Reducing_CCD_Noise/example2-after.jpg
new file mode 100644
index 0000000..d938297
Binary files /dev/null and b/content/tutorials/Reducing_CCD_Noise/example2-after.jpg differ
diff --git a/content/tutorials/Reducing_CCD_Noise/example2-before.jpg
b/content/tutorials/Reducing_CCD_Noise/example2-before.jpg
new file mode 100644
index 0000000..c161549
Binary files /dev/null and b/content/tutorials/Reducing_CCD_Noise/example2-before.jpg differ
diff --git a/content/tutorials/Reducing_CCD_Noise/image-despeckled-zoom100.jpg
b/content/tutorials/Reducing_CCD_Noise/image-despeckled-zoom100.jpg
new file mode 100644
index 0000000..2a6651d
Binary files /dev/null and b/content/tutorials/Reducing_CCD_Noise/image-despeckled-zoom100.jpg differ
diff --git a/content/tutorials/Reducing_CCD_Noise/image-final-zoom100.jpg
b/content/tutorials/Reducing_CCD_Noise/image-final-zoom100.jpg
new file mode 100644
index 0000000..3cee5e1
Binary files /dev/null and b/content/tutorials/Reducing_CCD_Noise/image-final-zoom100.jpg differ
diff --git a/content/tutorials/Reducing_CCD_Noise/image-final.jpg
b/content/tutorials/Reducing_CCD_Noise/image-final.jpg
new file mode 100644
index 0000000..7e3f726
Binary files /dev/null and b/content/tutorials/Reducing_CCD_Noise/image-final.jpg differ
diff --git a/content/tutorials/Reducing_CCD_Noise/image-original-zoom100.jpg
b/content/tutorials/Reducing_CCD_Noise/image-original-zoom100.jpg
new file mode 100644
index 0000000..afffaee
Binary files /dev/null and b/content/tutorials/Reducing_CCD_Noise/image-original-zoom100.jpg differ
diff --git a/content/tutorials/Reducing_CCD_Noise/image-original.jpg
b/content/tutorials/Reducing_CCD_Noise/image-original.jpg
new file mode 100644
index 0000000..bf525cd
Binary files /dev/null and b/content/tutorials/Reducing_CCD_Noise/image-original.jpg differ
diff --git a/content/tutorials/Reducing_CCD_Noise/index.md b/content/tutorials/Reducing_CCD_Noise/index.md
new file mode 100644
index 0000000..78a8275
--- /dev/null
+++ b/content/tutorials/Reducing_CCD_Noise/index.md
@@ -0,0 +1,83 @@
+Title: Reducing CCD Noise
+Date: 2002
+Modified: 2015-09-25T13:33:27-05:00
+Author: Eric R. Jeschke
+
+<small>
+Text and images Copyright (C) 2002 [Eric R. Jeschke](mailto:ericNOSPAM redskiesatnight com) and may not be
used without permission of the author.
+</small>
+
+## Intention
+
+<figure>
+<img src="before.jpg" alt="before.jpg"/>
+<img src="after.jpg" alt="after.jpg"/>
+</figure>
+
+Images captured by a CCD or CMOS imaging chip will often have some noise present. This noise typically can
be seen as RGB "flecks", especially noticable in the in the shadow areas of an image. The red and blue
channels are especially susceptible. Higher ISO settings and higher ambient temperatures increase the
likelihood of acquiring this noise along with your image.
+
+If you find it necessary to shoot with a higher ISO and you find that you have an unpleasant amount of noise
in your image, this tutorial will help you improve the image.
+
+## The Procedure
+
+One procedure that works reasonably well is to apply the Despeckle filter. Unfortunately, this filter will
soften the image. Fortunately, you can get sharpen the image to partially offset this.
+
+## Step 1
+
+<figure>
+<img src="image-original.jpg" alt="image-original.jpg"/>
+<img src="image-original-zoom100.jpg" alt="image-original-zoom100.jpg"/>
+</figure>
+
+Here is the original image. Notice how bad the noise is, especially in the shadows of the face and in the
white wall (back right).
+
+## Step 2
+
+<figure>
+<img src="despeckle.jpg" alt="despeckle.jpg"/>
+<img src="image-despeckled-zoom100.jpg" alt="image-despeckled-zoom100.jpg"/>
+</figure>
+
+Right-click in the image and select `Filters → Enhance → Despeckle`.
+You can play around with the settings, but you'll likely want to keep the radius pretty small. If you raise
it too high you'll destroy details like the catchlights in the eye. The "Recursive" option seems to cause a
more aggressive filter effect. Try it if you have an especially noisy image.
+
+Examine the resulting image, zooming in to examine shadow areas. You'll notice that the noise is appreciably
less objectionable. You cannot really eliminate it, but it is "smoothed out".
+
+Unfortunately, you may also notice that the image is softer; the despeckle filter actually blurs the image.
Fortunately we can offset this to some degree by sharpening.
+
+## Step 3
+
+<figure>
+<img src="image-final-zoom100.jpg" alt="image-final-zoom100.jpg"/>
+</figure>
+
+For best results, especially with a noisy image, you'll want to use smart sharpening, explained elsewhere on
this site.
+This particular image was edge sharpened on all RGB channels. If you find edge ("smart") sharpening too
difficult, just apply a little global sharpening to offset the softening.
+
+## Step 4
+
+<figure>
+<img src="image-final.jpg" alt="image-final.jpg"/>
+<img src="image-original.jpg" alt="image-original.jpg"/>
+</figure>
+
+Zoomed out (upper left). Compare to the original (upper right) Look at the arm and the white wall in back
right. Much better.
+
+## Tips and Suggestions
+
+* It may not be necessary to apply the despeckle filter across all RGB channels; as I mentioned earlier,
CCD noise tends to show up predominantly in the blue or red channels. You can open the Layers dialog
(<kbd>Ctrl+L</kbd>), click on the Channels tab and just select the channel(s) that you want to apply the
filter to. To examine the individual channels for noise, right click in the image and select `Image → Mode →
Decompose` choose RGB for the decomposition.
+* Similarly, you can try decomposing to HSV or LAB, running the despeckle filter on one or more parts
(e.g. value channel from HSV) and recomposing.
+* **Note:** along these lines I have seen it suggested from several sources that decomposing to LAB,
applying a slight gaussian blur to the A+B channels and then sharpening the L channel is a good approach to
reducing CCD artifacts. I have to say that so far in my experiments this approach has not worked for me; I
find the despeckle method far superior.
+
+## Other Examples
+
+<figure>
+<img src="example2-before.jpg" alt="example2-before.jpg"/>
+<img src="example2-after.jpg" alt="example2-after.jpg"/>
+</figure>
+
+## Further Reading on Reducing CCD Noise
+
+* [Actions for Photoshop 6 for reducing CCD noise.](http://www.2morrow.dk/75ppi/coolpix/actions/)
+
+The original tutorial used to appear on
[gimpguru](https://web.archive.org/web/20140704083816/http://gimpguru.org/tutorials/reducingccdnoise/).
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]