#!/usr/app/bin/perl use Gimp; use Gimp::Fu; use Gimp::Util; # Erzeuge ein neues "scratchlayer", d.h. eine Ebene, die graue # Streifen einer bestimmten Richtung enthält. Dazu wird ein # weisses Bild "verrauscht" und mit motion-blur in einem # bestimmten Winkel weichgezeichnet. sub new_scratchlayer { my ($image,$length,$gamma,$angle) = @_; my $type = $image->layertype(0); my $layer = $image->layer_new ($image->width, $image->height, $image->layertype(0), "displace layer ($angle)", 100, NORMAL_MODE); $layer->add_layer(-1); $layer->fill (WHITE_IMAGE_FILL); $layer->noisify (0, 1, 1, 1, 0); $layer->mblur (0, $length, $angle); $layer->levels (VALUE_LUT, 120, 255, 0.3, 0, 255); $layer; } register "scratches", "Create a scratch effect", "Add scratches to an existing image. Works best on a metallic-like background.", "Marc Lehmann", "Marc Lehmann ", "19990223", N_"/Filters/Distorts/Scratches...", "*", [ [PF_SLIDER , "angle_x" , "The horizontal angle" , 30, [ 0, 360]], [PF_SLIDER , "angle_y" , "The vertical angle" , 70, [ 0, 360]], [PF_SLIDER , "gamma" , "Scratch map gamma" , 0.3, [0.1, 10, 0.05]], [PF_SPINNER , "smoothness" , "The scratch smoothness" , 15, [ 0, 400]], [PF_SPINNER , "length" , "The scratch length" , 10, [ 0, 400]], ], [], ['gimp-1.1'], sub { my ($image,$drawable,$anglex,$angley,$gamma,$length,$width) = @_; $image->undo_push_group_start; # Erzeuge zwei "scratchlayer", die die Verschiebung in X und Y # angeben. my $layer1 = new_scratchlayer ($image, $length, $gamma, $anglex); my $layer2 = new_scratchlayer ($image, $length, $gamma, $angley); # Verschmiere das Bild. $drawable->displace ($width, $width, 1, 1, $layer1, $layer2, WRAP); # die beiden Ebenen werden nicht länger benötigt. $layer1->remove_layer; $layer2->remove_layer; $image->undo_push_group_end; $image; }; exit main;