Image::Magick 画像の結合

image-magick  

 複数の画像を結合するにはmontageを使う。

montage [in1] [in2] … -tile [cols]x[rows] -geometry 800X500 [out]

 

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";
}