Perlのお勉強-#5。

 で,Image::Sizeを使って,スクリプトの側で画像のwidthとheightを取得する練習。

 すごい簡単なんだ。Image::Sizeのありがたさが身に染みる。

 それと,生成物の格納ディレクトリを変更して,一揃いごとにナンバーを付けたディレクトリに収めることにした。あとあと,自動的に格納ディレクトリをつくり,生成物をzipにしたりするのにもその発想のほうがよさそうなので。

 入力値のチェック等はほったらかし。まだよくわからないよー。

―html―のほう。

<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'>
<html lang='ja'>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
<title>BGMつき画像HTML生成</title>
</head>
<body>
<form action="bgm.cgiの置き場所のURL" method="post" enctype="multipart/form-data">
<p>タイトル:<input type="text" name="title" value="タイトル" size="20" /></p>
<p>キャプション:<input type="text" name="caption" value="説明" size="60" /></p>
<p>画像ファイル名:<input type="file" name="image" /></p>
<p>音楽ファイル名:<input type="file" name="music" /></p>
<p>背景色:<input type="text" name="back" value="#FFFFFF" size="7" /></p>
<p><input type="submit" name="submit" value="送信" /></p>
</form>
</body>
</html>

―bgm.cgi―のほう。

#!/usr/bin/perl

use strict;
use warnings;
use diagnostics;

use CGI;
use File::Basename;
use File::Copy;
use Image::Size qw(imgsize); #widthとheightのゲットにしか使わないので。

#引数格納変数
my $q = new CGI;

#ドキュメントルート
my $path = $ENV{'DOCUMENT_ROOT'};

#生成ファイル格納ディレクトリ
my $dir1 = "/bgm/1"; #パーミッション705

#タイトル&キャプション
my $ttl1 = $q->param('title');
my $ttl2 = $q->param('caption');

#画像・音ファイル名
my $img1 = basename($q->param('image')); #画像ファイル名
my $aud1 = basename($q->param('music')); #音ファイル名

#画像・音ファイル実体アップロード
my $fh1 = $q->upload('image');
copy ($fh1, "$path$dir1/$img1"); #サーバ上の絶対パスでないといけないようだ。
my $fh2 = $q->upload('music');
copy ($fh2, "$path$dir1/$aud1"); #サーバ上の絶対パスでないといけないようだ。

#読み出したイメージのファイルハンドルからwidthとheightを取得する。
my ($img2, $img3) = imgsize($fh1);

#背景色
my $img4 = $q->param('back');

undef $q; #CGI Objectをundef。$fh1と$fh2はScriptの終了時にcloseされるらしい。

#移動元・移動先ファイル名 File::Copyのmoveで使う。
my $from1 = "test.html";
my $to1 = "$path$dir1/bgm.html"; #サーバ上の絶対パスでないといけないようだ。

#ファイル書き込み
open(FILE, ">$from1") or die;
print FILE <<"PREVIEW";
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'>
<html lang='ja'>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
<title>$ttl1</title>
</head>
<body bgcolor=$img4>

<p align='center'>$ttl2</p>
<div align='center'><img border='2' src='$dir1/$img1' width='$img2' height='$img3'></div>
<div align='center'><embed src='$dir1/$aud1' autostart='true' loop='false' hidden='true'></div>
</body>
</html>
PREVIEW
close(FILE);

#ファイル読み込み
open(FILE, "$from1") or die;
my @rec = <FILE>;
close(FILE);

#HTML ヘッド出力
print "Content-type: text/html; charset=UTF-8n";
print "Status: 200 OKn";
print "n";

#レコード表示
print @rec;

move($from1,$to1);

#終了
exit(0);

Comments are closed.