#!/usr/bin/perl # gallery.pl # # Copyright (c) Fabian Frederick 2001 # # 17/07/2001 (Fab) # V2.0 # -Adding Html instance per picture + Header # -Adding URL # # 07/07/2001 (Darkin) # -Item was unreachable from menu because of RGB requesite -> undef. # # 17/6/2001 (Fab) # V1.3 # -Adding global progression bar # -Preserving Gimp cache (progressive image_delete) # -Adding trailing / to path # -Plugin crashed when no label was given # 25/5/2001 (Fab) # V1.2 -Bug in rotation parameter : OK # -Adding color for label(Parasite editor helped here :) ). # -Register as gallery_maker # -Adding corner selection for copyright using layer_translate # -Recovering colors for HTML (Thanks Marc). # # 18/19/5/2001 (Fab) # V1.01 -Moving plug-in to Toolbox/Render menu # -Added some error-handling # -Automatically put html file in gallery path # -Added some features to HTML generated # -Simplified I/O # -Status supply # -Source is not overwritten anymore .... c$name applied. # -Working in sub-path (using gallery title) # -HTML file not deployed in /tmp (directly in dpath) # 10-13/5/2001 (Fab) # V1.0 First workable version. # use Gimp qw(:auto __ N_); use Gimp::Fu; use Gimp::Util; #Gimp::set_trace(TRACE_ALL); sub printHeader { my ($rf,$gf,$bf,$r,$g,$b, $htmlFile,$gallerytitle)=@_; printf $htmlFile ""; printf $htmlFile "\n",$r,$g,$b; printf $htmlFile "
",$rf,$gf,$bf; printf $htmlFile "$gallerytitle\n"; printf $htmlFile "\n"; } sub printFooter { my ($rf,$gf,$bf,$URL, $htmlFile)=@_; printf $htmlFile "


Back to previous page\n"; printf $htmlFile "\n"; } sub galleryMaker { my ($path, $label, $labelcolor, $labelpos, $font, $bright, $contrast, $rotate, $scalefix, $fixed, $gallerytitle, $color, $foregroundcolor, $galleryfile,$columns,$parentURL) = @_; $oldforeground=gimp_palette_get_foreground(); $path=$path.'/'; if ($path eq ""){ Gimp->message(__"All fields were not completed, sorry."); exit main; } if ($fixed == 0){ Gimp->message(__"Scale factor has not to be 0"); exit main; } $countTotal=`ls $path*.jpg | wc -l`+`ls $path*.JPG | wc -l`; $gallerytitle=~s/ /_/g; opendir(cpath, $path) or die ("Unable to open destination path"); $sysval=system("mkdir $path$gallerytitle"); if ($sysval != 0){ Gimp->message(__"Make sure you've got write access to selected path ...\nMaybe the target path already exist in which case you can simply change the Gallery title and launch again"); exit main; } my $dpath="$path$gallerytitle/"; open (htmlFile, "> $dpath$galleryfile.html") or die ("Unable to process HTML File."); my ($rf,$gf, $bf)=@$foregroundcolor; my ($r,$g,$b)=@$color; printHeader($rf,$gf,$bf,$r,$g,$b,htmlFile,$gallerytitle); print htmlFile "
\n"; my $totalentries=0; my $entries=1; my $twidthEval=0; my $txtwidth=0; my $txtheight=0; my $ycorrection=0; my $xcorrection=0; Gimp->progress_init("Releasing the gallery"); while (defined($cfile=readdir(cpath))) { if (( $cfile =~ /.jpg/ ) || ($cfile =~ /.JPG/)) { my $img=gimp_file_load(RUN_NONINTERACTIVE,"$path$cfile", "$path$cfile"); my $clayer=gimp_image_get_active_layer($img); if ($rotate != 0){ #plug_in_rotate manages both global 90-180-270 - reshape $img plug_in_rotate(RUN_NONINTERACTIVE,$img,-1,$rotate,1); } my $width=gimp_image_width($img); my $height=gimp_image_height($img); gimp_brightness_contrast($clayer, $bright, $contrast); if ( $label ne "" ){ my $newlayer=gimp_layer_new($img, 200, 100, RGB_IMAGE, "newlayer", 100, NORMAL_MODE); gimp_palette_set_foreground($labelcolor); my $txtlayer=gimp_text_fontname($img, -1, 1, 1, $label, 0, 0, 16, 0, $font); if ($twidthEval == 0) { $txtwidth=gimp_drawable_width($txtlayer); $txtheight=gimp_drawable_height($txtlayer); $twidthEval=1; } $ycorrection=$height-$txtheight if (($labelpos == 2) || ($labelpos == 3)); $xcorrection=$width-$txtwidth if (($labelpos == 1) || ($labelpos == 3)); gimp_layer_translate($txtlayer, $xcorrection, $ycorrection); gimp_image_merge_visible_layers($img,0); } my $cvname="$dpath$cfile"; #$cvname=~s/ /c/g; ($img->get_layers)[0]->file_jpeg_save("$cvname", "$cvname",0.7,0,1,0,"",0,1,0,0); #Processing Thumbnail my $tbheight=1; my $tbwidth=1; if ($scalefix == 1){ my $scalefactor=$width/$fixed; $tbheight=$height/$scalefactor; $tbwidth=$fixed; }else{ if ($scalefix == 2) { my $scalefactor=$height/$fixed; my $newwidth=$width/$scalefactor; $tbwidth=$newwidth; $tbheight=$fixed; }else { # scalefix 0 => both scaled by factor (value_factor) $tbwidth=$width/$fixed; $tbheight=$height/$fixed; } } my $tbfname="$dpath $cfile"; $tbfname=~s/ /m/g; system("cp $cvname $tbfname"); gimp_image_delete($img); my $img=gimp_file_load(RUN_NONINTERACTIVE,"$tbfname", "$tbfname"); my $clayer=gimp_image_get_active_layer($img); gimp_image_scale($img, $tbwidth, $tbheight); #Processing detail HTML my $htmlDetail=$cfile; $htmlDetail=~s/.jpg/.html/g; $htmlDetail=~s/.JPG/.html/g; open (fhtmlDetail, "> $dpath$htmlDetail") or die ("Unable to process HTML File."); printHeader($rf,$gf,$bf,$r,$g,$b,fhtmlDetail,$gallerytitle); print fhtmlDetail ""; printFooter($rf,$gf,$bf,"$galleryfile.html", fhtmlDetail); close fhtmlDetail; file_jpeg_save(RUN_NONINTERACTIVE,$img, ($img->get_layers)[0],"$tbfname", "$tbfname",0.7,0,1,0,"",0,1,0,0); print htmlFile " \n"; if ($entries >= $columns){ print htmlFile ""; $entries=1; }else{ $entries=$entries+1; } $totalentries=$totalentries+1; Gimp->progress_update ($totalentries/$countTotal); gimp_image_delete($img); } } Gimp->progress_update(1); print htmlFile "
\n"; printFooter($rf,$gf,$bf,$parentURL, htmlFile); close htmlFile; Gimp->message(__"Your gallery ($galleryfile) has been generated through Gallery plug-in with $totalentries entries"); gimp_palette_set_foreground($oldforeground); # return(); } $help=<", "(c) 2001 Fabian Frederick", "20010601", N_"/Xtns/Render/Gallery Maker", undef, [ [PF_FILE, "path", "Destination path .... "], [PF_STRING, "label", "Text to add at the top of each picture"], [PF_COLOR, "label_color", "Color of the label to be displayed on each picture", [255,255,255]], [PF_RADIO, "label_position", "Position of your text label...", 0, [ UpLeft => 0, UpRight => 1, DownLeft => 2, DownRight => 3 ]], [PF_FONT, "displayfont", "Select font", undef ], [PF_SLIDER, "brightness", "Brightness correction", 0, [ -127, 127]], [PF_SLIDER, "contrast", "Contrast correction", 0, [-127,127]], [PF_RADIO, "rotate", "Rotation angle", 0, [ None => 0, Rotate90CCW => 3, Rotate90 => 1]], [PF_RADIO, "scalefix", "Scale fixing for thumbnails", 1 ,[ both_by_factor => 0, X => 1, Y => 2 ]], [PF_INT32, "value_factor", "value or factor", 150], [PF_STRING, "gallery_title", "Gallery's Title" ], [PF_COLOR, "background_color","Gallery background color", [100,100,100]], [PF_COLOR, "foreground_color","Gallery background color", [255,255,255]], [PF_STRING, "gallery_file", "HTML file generated" ], [PF_INT32, "columns", "Gallery columns number", 2], [PF_STRING, "parent_file", "Gallery's parent URL" ] ], \&galleryMaker); exit main; __END__ =head1 NAME Gallery Maker =head1 SYNOPSIS Gallery Maker =head1 DESCRIPTION Gallery Maker is a Gimp plugin.It generates an HTML file from all pictures it finds in a designed path.A thumbnail is generated from each picture with a desired global scale or X or Y fixed...This tool will hopefully help batch conversions from photo albums for instance as you can add copyright notice on source picture but also adjust brightness/contrast or give polar rotations .... Convention used here is the following : All pictures converted is c ....Relative thumbnail is m Note : This plugin only processes JPG pictures. =head1 AUTHOR Written by Fabian Frederick , (c) 2001