#!/usr/bin/perl # New imgconvert! Now in Perl, and based on Imlib2 # Get Imlib2::Perl @ http://freshmeat.net/projects/imlib2perl/ # This is a hacked up compatibility version at the request of Trae McCombs # (http://occy.net/). The changes makes it so I don't have to convert my # image viewing stuff either. (Garrett) # Copyright (c) 1999 - 2002 Garrett LeSage (http://linuxart.com/) # This script is freely distributable, modifyable, yadda-yadda under the # artistic license. http://www.perl.com/language/misc/Artistic.html use File::Basename; use File::Copy; use Imlib2; # Widths requested; first is thumb size, second is default click size. # These are later sorted for the resolution list display @imgsizes = ( 100, 640, 800, 1024 ); # Default extension $ext = ".jpg"; # Wrap at this number $numwrap = "4"; # Site Title $stitle = "LinuxArt.com"; # Default page title prefix $ptitle = "My pictures: "; # Default page title $title = ""; # Loop per image, and scale each to the respective imgsizes $path = "."; opendir DIR, $path; @dlist = readdir DIR; @flist = grep { !-d "$path/$_" } @dlist; #no directories @blist = grep { !-T "$path/$_" } @flist; #no text files, only binaries closedir DIR; # Extract the files that mach the extension only @imglist = grep { ".*$ext\$" } @blist; # Test for scaled subdir, and create if not found. #if ( !-d "$path/scaled/" ) { #print "Scaled directory not found -- creating dir...\n"; #mkdir("$path/scaled/"); #} # Change title to dir name if title is not set if ( $title eq "" ) { $title = ( split "/", `pwd` )[-1]; } foreach $imagename (@imglist) { # Load the image and then set the working context to the loaded image $image = Imlib2::load_image($imagename); Imlib2::set_context($image); # Grab the image's width and height info $width = Imlib2::get_width(); $height = Imlib2::get_height(); $basename = basename( $imagename, $ext ); push ( @bnamelist, $basename ); # Debugging info print "\n$basename: ${width}x${height} \n"; foreach $size (@imgsizes) { if ($size == $imgsizes[0]) { $revisedsize="thumb"; } else { $revisedsize=$size; } if ( !-e "$path/$revisedsize/" ) { mkdir("$path/$revisedsize/"); } if ( !-e "$path/$revisedsize/$basename.$revisedsize$ext" ) { # Ensure that we're basing the stuff from the original image Imlib2::set_context($image); # Set the width to that which is requested, and the height # is a respective ratio $width2 = $size; $height2 = $height / $width * $width2; # Debugging info print "${width2}x${height2} "; # The actual rescaling Imlib2 call $foo = Imlib2::create_cropped_scaled_image( 0, 0, $width, $height, $width2, $height2 ); # Change context to the result, and save it. Imlib2::set_context($foo); Imlib2::save_image("$path/$revisedsize/$basename.$revisedsize$ext"); Imlib2::free_image(); } else { print "$size -- "; print "Exists! Skipped.\n"; } } if ( !-e "$path/$width/" ) { mkdir("$path/$width/"); } symlink("../$imagename","$path/$width/$basename.$width$ext"); Imlib2::set_context($image); Imlib2::free_image(); push ( @HTML, "\"$basename\"" ); } foreach $htmlsnip ( reverse(@HTML) ) { $curpic = $bnamelist[ $#imglist - $i ]; $i++; if ( $i % $numwrap == 1 ) { $linestart = '
' . "\n"; if ( $i > 1 ) { $linestop = '
' . "\n"; } } else { $linestart = ''; $linestop = ''; } # Start the sizelist with a clean slade @sizelist = ""; # Sort by number, and return the available sizes as links foreach $mysize ( sort { $a <=> $b } @imgsizes ) { if ( $mysize != @imgsizes[0] ) { @picstat = stat("$mysize/$curpic.$mysize$ext"); $fsize = int( @picstat[7] / 1024 ) . "k"; $rsize = int( $mysize * $height / $width ); push ( @sizelist, "${mysize}x${rsize} ($fsize)" ); } } # Don't forget the original size! (a special case) @picstat = stat("$curpic$ext"); $fsize = int( @picstat[7] / 1024 ) . "k"; push ( @sizelist, "${width}x${height} ($fsize)"); # Format the HTML snip $htmlsnip = "$i: $curpic
" . $htmlsnip . join ( "
", @sizelist ); $page .= "$linestop$linestart$htmlsnip\n"; } $page .= "\n\n"; # Page header $phead = '' . "$stitle - $ptitle$title\n" . '' . "\n" . "\n"; $phead .= "

$ptitle$title

" . "

"; # Page footer $pfoot = ""; open( OUTFILE, ">index.html" ); print OUTFILE $phead . $page . $pfoot; close(OUTFILE); print "\nDone!\n\n";