mieki256's diary



2007/01/16(火) [n年前の日記]

#5 [prog] 画像一覧htmlを作成したい

元画像をそのままのサイズで、拡大も縮小もせず並べて、しかも各画像の横にでも画像サイズやらファイル名やらを列挙したい。…なんかiアプリに使った画像一覧が必要とかなんとかで。

そういう処理をするフリーソフトがどこかにあるだろう、これだけアルバムhtml作るソフトが溢れてんだから。と思って検索したものの。意外なことに、そういうものは無い。ベクターから数本DLして試してみたものの、無理矢理サムネイルを作るヤツとか、無理矢理サムネイルサイズに画像を拡大縮小するヤツとか、ファイルの画像サイズ等を何ら出力できないヤツとか。…しかも中には、インストールの際に半角カタカナで、「スタートアップ」なんて項目をスタートメニュー内に作るヤツまで居て。お前はいつの時代のソフトだ。Win3.1用か。

ということで、PerlMagick を使って一覧htmlを出力するスクリプトを作ってしまえ、みたいな。

と思ったが、use Image::Magick; でエラーが。うーむ。

_ImageMagickのQ8とQ16、dllとstaticの違い。 :

面倒くさいので再インストールすることにした。ImageMagick-6.3.1-7-Q16-windows-dll.exe をDL。…インストールしようとしたら、ActivePerl 5.8.8.819 云々と言ってくる。自分が入れてるのは 5.8.7.815 なんだが…。

_「退かぬ! 媚びぬ! 省みぬ!」最新ActivePerlにPlaggerを入れる :

_nishi/Plagger - Radiofly

Plagger もいずれ入れたいと思ってるので、最新版 ActivePerl では苦労するというのはちょっと気になる話。ActivePerl 5.8.8 build 818 以降は苦労するのか…。とりあえず _「ActivePerl 5.8.8 build 819 Plagger」 で検索してそのうち。

ActivePerl と ImageMagick をインストールし直し。 :

以前のバージョンをアンインストールしてから。

ActivePerl-5.8.8.819-MSWin32-x86-267479.msi と ImageMagick-6.3.1-7-Q16-windows-dll.exe をDL。インストール。

画像一覧htmlを出力する Perlスクリプト。 :

こんな感じに。
#!/usr/bin/perl
#
# 画像一覧htmlを出力するperlスクリプト
# PerlMagick (ImageMagick)が必要。

use strict;
use Image::Magick;

# 読み込むディレクトリ
my $indir = ".";

# 出力ファイル名
my $outfilename = "index.html";

# 対象にするファイルの拡張子
my @extlist = ( '.gif', '.jpg', '.png' );


if ( $#ARGV != -1 && $#ARGV != 1 ) {
    # 想定外のパラメータが渡されたので、ヘルプを表示して終わる

    print "usage: makealbum.pl InputDir OutputHtmlFileName\n";
    print "usage: makealbum.pl\n\n";
    print "default InputDir : $indir\n";
    print "default OutputHtmlFileName : $outfilename\n";
    exit;
}

if ( $#ARGV == 1 ) {
    # ディレクトリ名と出力ファイル名が指定されたらしいので変更

    $indir = $ARGV[0]; # in directory
    $outfilename = $ARGV[1]; # out filename
}

unless ( -e $indir ) {
    print "Error : Not Found $indir\n";
    exit;
}

if ( -f $indir ) {
    print "Error : $indir is Not Directory.\n";
    exit;
}

# 画像ファイル名を取得

my @filelist = ();
opendir(DH, $indir) || die "$indir : $!";
while (my $file = readdir DH) {
    next if $file =~ /^\.{1,2}$/;
    my $fg = 0;
    foreach my $ext (@extlist) {
        if ( $file =~ /$ext$/ ) {
            $fg = 1;
        }
    }
    next if $fg == 0;
    push(@filelist, $file);
}
closedir(DH);

# 画像情報を取得
my @lines = ();
foreach my $fname (@filelist) {
    my $img = Image::Magick->new;
    $img->Read("$indir/$fname");
    my ($w, $h, $sz) = $img->Get('width', 'height', 'filesize');
    push(@lines, "$fname,$w,$h,$sz");
    undef $img;
}

# 結果出力

open(OUT, "> $outfilename") || die "$outfilename : $!";

# html 先頭部を出力

print OUT <<EOM;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta http-equiv="Content-Style-Type" content="text/css">
<title></title>
<style type="text/css">
<!--
td,th{
}
-->
</style>
</head>
<body>
<table border="1">
EOM

# html 画像部分を出力

foreach (@lines) {
    my ($fn, $w, $h, $sz) = split(/,/, $_);
    print OUT "<tr>";
    print OUT qq(<td class="inimg"><img src="$fn" width=$w height=$h alt="$fn"><p>$fn : $w x $h , $sz byte</p></td>);
    print OUT qq(<td class="incomment"></td>);
    print OUT "</tr>\n";
}

# html 終了部分を出力

print OUT <<EOM;
</table>
</body>
</html>
EOM

close(OUT);

exit;

以上です。

過去ログ表示

Prev - 2007/01 - Next
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project