まさはる's Weblog

まさはる's Weblog
Macintoshとオーディオの話題

2016年9月20日

アクセスカウンタの作成(その2)

Category : Web 2 / Posted at 2016年9月20日 22:30

 前回のアクセスカウンタを作った話の続きです。あのカウンタはgifファイルを連結して表示していたのですが、バックが透明の場合、gifファイルだと縁のジャギーがちょっと気になるので、pngファイルで連結できないか調べてみました。
 ネットで調べてもそのものズバリなものはなかなか出てきません。どうやら単独でモジュールを作るのではなく、PerlのグラフィックモジュールのGDかPerlMagickを使って画像処理をしているようです。そこで、うちのレンタルサーバーのLaCoocanでも使えるPerlMagickを使って、pngファイルを連結するプログラムに変更してみました。

Counter
現在のアクセスカウント値
(前回の記事もプログラムが更新されているので、同じpng表示になっています)

 PerlMagickというのは、PerlモジュールImage::Magickのことで、ImageMagickライブラリをPerlから使えるようにしたものです。
 で、早速使おうと思ったところ、Perlでどう書いていいのかよく分からんw。PerlMagickのページで解説されているのですが、いかんせん英語で...。


#!/usr/local/bin/perl -wT
use strict;
use Image::Magick;
 
...
 
# $image_dir は数字イメージファイルのディレクトリ
# 数字イメージファイルのディレクトリ内には、0.pngから9.pngのpngファイルあり
# $count にはアクセスタウンタの値が整数で入っている状態
 
...
 
my $count_length = length($count); # 桁数
my $image = Image::Magick->new;
 
my $i = 0;
my $n = '';
for ($i = 0; $i < $count_length; $i++) {
    $n = substr($count, $i, 1);
    $image->Read("$image_dir$n.png");
}
 
my $append_image = $image->Append(stack => 'false'); # false:横に連結
 
undef $image;
 
print "Content-type: image/png\n\n";
binmode STDOUT;
$append_image->Write('png:-');

 ふぅ、なんとか試行錯誤でできました。ちなみに赤字はPerlMagickの部分で、出来てからPerlMagickのドキュメントを読み返すと、悩んだところはちゃんと解説されているし...w。
 簡単に解説すると、$imageのイメージオブジェクトを作成して、Readで左のpngファイルから順に読み込んで、Appendで連結して、Writeで連結したpngファイルを書き出しています。この中で、$imageに桁数分の違うファイルを読み込んでいますが、このオブジェクトはこんな風に使えるようです。普通の変数のように見えるので、ちょっと違和感がありますが...。

 PerlMagickを使うとPerlで色々な画像処理が出来るようなので、興味のある方は使ってみるといいかも。

このページのトップに戻る