このソースのスタイルを最大限活かすとしたら、
my $image = makeImage();
これを、
makeImage();
に変えればよさそうな気がします。
sub makeImage()内で$imageは局所化されておらずグローバル変数扱いになるはずですので、サブルーチンからreturnしなくても、生成された$imageは有効です。
#!/usr/bin/perl
use strict;
eval ("use Image::Magick;"); die "[err] Image::Magick がインストールされてません。 \n" if $@;
use less;
use Image::Magick;
die "Usage: $0 image_file [ image_name ]\n" unless @ARGV >= 1 && @ARGV <= 2;
my $image_file = shift (@ARGV);
my $image_name = shift (@ARGV);
($image_name = $image_file) =~ s|.*/|| if !defined $image_name;
my %mime_map = (
"gif" => "image/gif",
"jpg" => "image/jpeg",
"jpeg" => "image/jpeg",
"jpe" => "image/pjpeg",
"png" => "image/png"
);
my $mime_type = $mime_map{lc ($1)} if $image_file =~ /\.([^.]+)$/;
die "Cannot determine image MIME type\n" if !defined $mime_type;
my ($err, $image_data, $sample_image_data);
my $ORIGINAL_TEXT = 'sample';
my $FONT = '/home/tmp_work/sazanami-gothic.ttf';
my $STROKE = 'none';
my $FILL = 'grey';
my $UNDERCOLOR = 'none';
my $WIDTH = '20';
my $HEIGHT = '20';
my $code = '';
use Jcode;
my $text = $ORIGINAL_TEXT; #'utf8' eq $code ? jcode($ORIGINAL_TEXT)->utf8 : $ORIGINAL_TEXT;
#**********************************
# 画像の読みこみとデータ化
#**********************************
my $img = Image::Magick->new();
$err = $img->Read ($image_file);
die "Can't read image file: $err\n" if $err;
$image_data = $img->ImageToBlob ();
#**********************************
# 画像合成とデータ化
#**********************************
my $image = Image::Magick->new();
my ($label);
$label = Image::Magick->new(size=>"$WIDTH x $HEIGHT",pointsize=>20,font=>$FONT);
$label->Read($image_file);
$label->Annotate(
text=>$text,
gravity=>"north",
fill=>$FILL,
stroke=>$STROKE,
undercolor=>$UNDERCOLOR,
);
> Can't call method "Write" without a package or object reference at gazou.cgi line 36
このエラーから判断すると,
makeImage() から返ってきた値がImage::Magick の
オブジェクトではないように見えますね.
(Read ではなく Write でエラーになっているため)