Perl で、画像のサムネイルを作成してブラウザから表示させる方法
#!/usr/bin/perl
use GD;
#!/usr/bin/perl
use GD;
I would like to propose the unique requirements for mobile phones. The following items are significant considerations under mobile site development, especially in i-mode phones.
ウェブページへのアクセスログを記録する方法は、いろいろな方法があると思う。もっとも簡単なのは Apache などのウェブサーバが自動的に記録するログをチェックすることで、これには何の手間もいらない。しかし、レンタルサーバなどでログが自由に扱えない場合はどうしたらいいのだろう?
そのひとつが、画像としてリンクされている Perl などの CGI を呼び出す方法だ。利用者に知られずこっそりとアクセスログを取るには 1x1 ピクセルの画像をそのウェブページの背景と共に表示してしまえば、そのウェブページのソースをチェックされない限り、ほとんどの場合は気づかれずにすむだろう。
そんなわけで、以下のように JavaScript と対応する Perl スクリプトで、アクセスログを記録する仕組みを作ってみた。ログの形式は Apache に準拠する(たぶん)。
オンラインで角丸画像を作成することができます。画像をアップロードすると、サーバ側で角丸画像が生成されてブラウザに表示されます。利用できるフォーマットは、JPEG、PNG、BMP です。
| 角丸み度の半径(ピクセル) | : |
| 角丸のアンチエイリアス | : する しない |
| 角丸の部分の背景色 | : |
| 角丸する画像ファイル | : |
バイナリデータはアスキーコードのシングルクォート「'」を含んでいる可能性があり、これが SQL文 (MySQL) のリテラルを表すためにエスケープする必要が出てくる。以下のように prepare → execute というように2行に分ければ execute の中で prepare の ? を埋め込んでくれるからシングルクォートの問題は考えなくてよくなる。
使用するモジュール
use DBI;
# 要 DBD::MySQL
#!/usr/bin/perl
use DBI;
$TABLE_NAME = 'テーブル名';
$DB = DBI->connect(...);
my $sth = $DB->prepare(qq|INSERT INTO $TABLE_NAME (
`id`,
`mimetype`,
`object`,
`created`,
`updated`
)
VALUES (?, ?, ?, ?, ?)|
);
$sth->execute(
$id,
$miemetype,
$object,
$NOW,
$NOW
);
$DB->disconnect();
1;
グラフィックライブラリである GD を使用する。GD は PNG をサポート JPEG は必須だと思われるがその場合には (CPANの GD ではなくライブラリの) GD 自体、jpeg6b というライブラリが必要である。ない場合はインストールが必要である。ウェブでの JPEG 画像の表示は、以下のサンプルを参考に、宿題として考えてみて欲しい。
使用するモジュール
use GD;
#!/usr/bin/perl
use GD;
open (OLD, "original.jpg") || die "cannot open mayon.jpg¥n";
$oldImage = newFromJpeg GD::Image(¥*OLD) || "Cannot make old image object¥n";
@bound = $oldImage->getBounds();
print "original width: $bound[0] original height: $bound[1] ¥n";
$newImage = new GD::Image(40, 40) || die "cannot make new image object¥n";
$newImage->copyResized($oldImage, 0, 0, 0, 0, 40, 40, $bound[0], $bound[1]);
open NEW, ">nail.jpg";
binmode NEW;
print NEW $newImage->jpeg;
close OLD;
close NEW;
1;