みけCATのにっき(仮)
つれづれなるまゝに、日くらし、PCにむかひて、心に移りゆくよしなし事を、そこはかとなく書きつくれば、あやしうこそものぐるほしけれ。
(本当か!?)
出典

HPのダウンロードコーナーの画像をサムネイルにした

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

HPのダウンロードコーナーの画像をサムネイルにした

投稿記事 by みけCAT » 11年前

自分のホームページのダウンロードコーナーでは、
前までは大きい画像をそのままimgタグのwidth、height属性で縮小して表示していました。
しかし、これだとブラウザによっては汚い画像が表示されてしまいます。
また、サーバーからの転送量も大きくなります。(数十~数100KBの差ですが・・・)
そこで、サムネイルを作ることにしました。
しかし、一個ずつペイントやGIMPで手作業していたのでは時間が掛かり、めんどくさいです。
そこでどうするか。

まず、コマンドラインで画像の縮小ができるように、ImageMagickをインストールします。
参考:http://www.kkaneko.com/rinkou/cygwin/im ... mingw.html
ただし、ここの解説と違ってbinaryフォルダの中の無印のzipファイルを落としたらうまくいきました。
インストールといっても、解凍してパスを通すだけです。
ただし、パスは一番最後ではなく一番最初に追加しないとうまくconvertコマンドが使えません。

次に、HTMLのimgタグを読み取って自動処理できるように、Perlでプログラムを書きます。
まず、imgタグで埋め込んでいる画像の一覧を取得します。

CODE:

#!/usr/bin/perl

while() {
	$_ =~ s//&getimgdata($1)/ieg;
}

sub getimgdata {
	local($thetext)=@_;
	local($src,$alt,$width,$height)=("","","","");
	$thetext =~ s/src=\"(.*?)\"/$src=$1/ie; # " =1?$ARGV[0]:"out");

unless(-d $outdir) {
	if(-e $outdir) {
		die("error: $outdirがすでに存在し、ディレクトリではありません。\n");
	} else {
		mkdir($outdir);
	}
}

while() {
	chomp($_);
	@data=split(/\t/,$_);
	$outfile=$data[0];
	$outfile =~ s/^.*\///;
	if($outdir ne ""){$outfile=$outdir."/".$outfile;}
	system("convert -resize ".$data[2]."x".$data[3]."! ".$data[0]." ".$outfile);
	print STDERR $outfile."\n";
}
2個目のプログラムを使うときには、引数に出力フォルダを指定します。

この2個のプログラムをパイプで繋ぎ、一発で処理します。
すると、指定したフォルダにサムネイル画像が生成されるので、
HTMLのimgタグのsrcをテキストエディタの置換機能で書き換え、アップロードして完成です。

トントン
記事: 100
登録日時: 13年前

Re: HPのダウンロードコーナーの画像をサムネイルにした

投稿記事 by トントン » 11年前

余計なお世話かもしれませんが、

local=localという名のグローバル変数
関数呼び出し時にアンパサンド(&)はいらねっす。
print STDERR $outfile."\n"; → warn "$outfile\n"; と書けるっす。