D
Dave Griffith
I can't seem to get a CGI script that's supposed to do quick-and-dirty
conversions of any image into a png. My problem is that
$magick_image->Write('$upload_dir/$outfile'); never seems to output
anything. The script is essentially a copy of
http://articles.sitepoint.com/article/uploading-files-cgi-perl/ with
PerlMagick tacked on. Please help.
Here's the script:
#!/usr/bin/perl -wT
use strict;
use CGI;
use CGI::Carp qw ( fatalsToBrowser );
use File::Basename;
use Image::Magick;
$CGI:OST_MAX = 1024 * 5000;
my $safe_filename_characters = "a-zA-Z0-9_.-";
my $upload_dir = "/var/www/tmp";
my $query = new CGI;
my $filename = $query->param("image");
my $email_address = $query->param("email_address");
if ( !$filename ) {
print $query->header ( );
print "There was a problem uploading your image (try a smaller file).";
exit;
}
my ( $name, $path, $extension ) = fileparse ( $filename, '\..*' );
$filename = $name . $extension;
$filename =~ tr/ /_/;
$filename =~ s/[^$safe_filename_characters]//g;
if ( $filename =~ /^([$safe_filename_characters]+)$/ ){
$filename = $1;
}
else{
die "Filename contains invalid characters";
}
my $upload_filehandle = $query->upload("image");
open ( UPLOADFILE, ">$upload_dir/$filename" )
or die "$! Cannot write to $upload_dir/$filename";
binmode UPLOADFILE;
while ( <$upload_filehandle> )
{
print UPLOADFILE;
}
close UPLOADFILE;
###################
# Image Conversion
###################
my $magick_image = Image::Magick->new();
my $outfile = $filename;
my $status;
$outfile =~ s/\..*$//g;
$outfile = $outfile . ".png";
open(IMAGE, '$upload_dir/$filename');
$magick_image->Read('$upload_dir/$filename');
$magick_image->Write('$upload_dir/$outfile');
close(IMAGE);
print $query->header ( );
print <<END_HTML;
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Your Converted Image</title>
<style type="text/css">
img {border: none;}
</style>
</head>
<body>
<p>Here is your original image</p>
<p><img src="/tmp/$filename" alt="Original Image" /></p>
<p>Here is your converted image</p>
<p><img src="/tmp/$outfile" alt="Converted Image" /></p>
</body>
</html>
END_HTML
conversions of any image into a png. My problem is that
$magick_image->Write('$upload_dir/$outfile'); never seems to output
anything. The script is essentially a copy of
http://articles.sitepoint.com/article/uploading-files-cgi-perl/ with
PerlMagick tacked on. Please help.
Here's the script:
#!/usr/bin/perl -wT
use strict;
use CGI;
use CGI::Carp qw ( fatalsToBrowser );
use File::Basename;
use Image::Magick;
$CGI:OST_MAX = 1024 * 5000;
my $safe_filename_characters = "a-zA-Z0-9_.-";
my $upload_dir = "/var/www/tmp";
my $query = new CGI;
my $filename = $query->param("image");
my $email_address = $query->param("email_address");
if ( !$filename ) {
print $query->header ( );
print "There was a problem uploading your image (try a smaller file).";
exit;
}
my ( $name, $path, $extension ) = fileparse ( $filename, '\..*' );
$filename = $name . $extension;
$filename =~ tr/ /_/;
$filename =~ s/[^$safe_filename_characters]//g;
if ( $filename =~ /^([$safe_filename_characters]+)$/ ){
$filename = $1;
}
else{
die "Filename contains invalid characters";
}
my $upload_filehandle = $query->upload("image");
open ( UPLOADFILE, ">$upload_dir/$filename" )
or die "$! Cannot write to $upload_dir/$filename";
binmode UPLOADFILE;
while ( <$upload_filehandle> )
{
print UPLOADFILE;
}
close UPLOADFILE;
###################
# Image Conversion
###################
my $magick_image = Image::Magick->new();
my $outfile = $filename;
my $status;
$outfile =~ s/\..*$//g;
$outfile = $outfile . ".png";
open(IMAGE, '$upload_dir/$filename');
$magick_image->Read('$upload_dir/$filename');
$magick_image->Write('$upload_dir/$outfile');
close(IMAGE);
print $query->header ( );
print <<END_HTML;
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Your Converted Image</title>
<style type="text/css">
img {border: none;}
</style>
</head>
<body>
<p>Here is your original image</p>
<p><img src="/tmp/$filename" alt="Original Image" /></p>
<p>Here is your converted image</p>
<p><img src="/tmp/$outfile" alt="Converted Image" /></p>
</body>
</html>
END_HTML