Image::Magick 画像の結合
複数の画像を結合するにはmontageを使う。
HTML
<input type="file" name="media" style="padding:5px; width:300px;" accept="image/*"><br>
<input type="file" name="media2" style="padding:5px; width:300px;" accept="image/*"><br>
<input type="file" name="media3" style="padding:5px; width:300px;" accept="image/*"><br>
<input type="file" name="media4" style="padding:5px; width:300px;" accept="image/*"><br>
<input type="file" name="media5" style="padding:5px; width:300px;" accept="image/*"><br>
PERL
my @files = qw(media media2 media3 media4 media5);
my $filecom = "./data/" . $times . ".jpg";
my $i = new Image::Magick;
my $blob_count = 0;
foreach my $file (@files) {
my $upload_file = $CGI{$file};
next unless $upload_file; # ファイルがアップロードされていない場合はスキップ
my $buffer;
my $file_content = '';
while (my $bytesread = read($upload_file, $buffer, 2048)) {
$file_content .= $buffer;
}
if ($file_content) {
$i->BlobToImage($file_content);
$blob_count++;
}
}
if ($blob_count > 0) {
my $mon=$i->Montage(geometry=>'1000', tile=>"1x${blob_count}");
$mon->Write($filecom);
}
サブルーチン化
sub generate_image_url {
my ($CGI, $site_url) = @_;
my @files = qw(media media2 media3 media4 media5);
my $unique_filename = $CGI{'addtime'} . ".jpg";
my $filecom = "./images/" . $unique_filename;
my $i = Image::Magick->new();
my $blob_count = 0;
foreach my $file (@files) {
my $upload_file = $CGI{$file};
next unless $upload_file; # ファイルがアップロードされていない場合はスキップ
my $file_content = '';
my $buffer;
while (my $bytesread = read($upload_file, $buffer, 2048)) {
$file_content .= $buffer;
}
if ($file_content) {
$i->BlobToImage($file_content);
$blob_count++;
}
}
if ($blob_count > 0) {
my $mon = $i->Montage(geometry => '1500', tile => "1x${blob_count}");
$mon->Write($filecom);
# 画像URL
return $site_url . "images/" . $unique_filename;
}
return undef; # 画像が生成されなかった場合
}
my $image_url = generate_image_url(\%CGI, $site_url);
if ($image_url) {
print "生成された画像のURL: $image_url\n";
} else {
print "画像は生成されませんでした。\n";
}