1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253
|
#!/opt/bin/perl
# gallery.pl
#
# Copyright (c) Fabian Frederick 2001
#
# 2004-03-28 (Dov)
# - Fixed for Gimp-2.0
#
# 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 "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\">";
printf $htmlFile "<body bgcolor='#%x%x%x'>\n",$r,$g,$b;
printf $htmlFile "<center><font face=\"verdana,arial\" size=\"5\" color=\"#%x%x%x\">",$rf,$gf,$bf;
printf $htmlFile "$gallerytitle\n";
printf $htmlFile "<table><tr>\n";
}
sub printFooter {
my ($rf,$gf,$bf,$URL, $htmlFile)=@_;
printf $htmlFile "<br><br><hr size=\"1\" color=\"white\"><a href=\"$URL\">Back to previous page</a>\n";
printf $htmlFile "</body>\n</html>";
}
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 "<table><tr>\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("$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("$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 "<img src=\"$cfile\"></img>";
printFooter($rf,$gf,$bf,"$galleryfile.html", *fhtmlDetail);
close fhtmlDetail;
file_jpeg_save(($img->get_layers)[0],"$tbfname", "$tbfname",0.7,0,1,0,"",0,1,0,0);
print htmlFile " <td><a href='$htmlDetail'><img src='m$cfile' border='0'></a></td>\n";
if ($entries >= $columns){
print htmlFile "</tr><tr>";
$entries=1;
}else{
$entries=$entries+1;
}
$totalentries=$totalentries+1;
Gimp->progress_update ($totalentries/$countTotal);
gimp_image_delete($img);
}
}
Gimp->progress_update(1);
print htmlFile "</table>\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=<<EOF.$help;
This script will hopefully help you creating an html gallery of a path full of JPG pictures ... This one creates thumbnails - Copyright notice on picture and some other cool tips.
EOF
register("gallerymaker",
"Generate your gallery in HTML format + some picture improvements",
$help,
"Fabian Frederick <Fabian.Frederick\@gmx.fr>",
"(c) 2001 Fabian Frederick",
"20010601",
N_"<Toolbox>/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<name> ....Relative thumbnail is m<name>
Note : This plugin only processes JPG pictures.
=head1 AUTHOR
Written by Fabian Frederick <fabian.frederick@gmx.fr>, (c) 2001
=head1 LICENSE
Copyright Fabian Frederick.
This plugin may be distributed under the same terms as The Gimp itself.
=cut
|