gifcat.plの挙動について

このQ&Aのポイント
  • gifcat.plを使用して埋め込み式カウンターを作成していますが、画像の出力方法が分かりません。
  • count.cgi内でgifcat.plを使用し、出力した画像をhtml内に表示させる方法が分かりません。
  • 連結された画像をhtml内で表示させるにはout.gifを使用すれば良いのか、それとも別の方法があるのでしょうか。
回答を見る
  • ベストアンサー

gifcat.plの挙動について。

 埋め込み式カウンターを作っているのですが、gifcat.plの画像の出力の方法が分かりません。 ***count.cgi***********************  require "./gifcat.pl";  open(OUT, "> out.gif");  binmode(OUT);  print OUT &gifcat'gifcat(@imgs);  close(OUT);  exit 0; ***count.cgi*********************** ***html内**************************  あなたは<IMG src="./count.cgi">人目。 ***html内************************** で、画像は連結されるんですが、それをhtml内に出力させるにはどうしたらいいのでしょうか? 結合画像が、out.gifなので、 あなたは<IMG src="./out.gif">人目。 というのなら分かるんですが。

noname#15892
noname#15892
  • CGI
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • galluda
  • ベストアンサー率35% (440/1242)
回答No.2

がるです。 んっと。 print "Content-type: image/gif\n\n"; @img[0] = 'img/0.gif'; @img[1] = 'img/1.gif'; @img[2] = 'img/2.gif'; @img[3] = 'img/3.gif'; @img[4] = 'img/4.gif'; # 基本的な使い方  require "./gifcat.pl";  print &gifcat'gifcat(@img);  exit 0; としてみてください。 プログラム的にちょっとわかりやすく順番を整理すると # ライブラリの取り込み require "./gifcat.pl"; # 画像の準備 @img[0] = 'img/0.gif'; @img[1] = 'img/1.gif'; @img[2] = 'img/2.gif'; @img[3] = 'img/3.gif'; @img[4] = 'img/4.gif'; # 出力 print "Content-type: image/gif\n\n"; print &gifcat'gifcat(@img); # 終了 exit 0; といった感じでしょうか。

noname#15892
質問者

お礼

あー、なんて事はない。 サブルーチンの戻り値が、結合された画像になってるって事か。 冷静というか、一歩引いてみると、分かるものですねー。 サンプルにしたものは出力される画像もないし、そう分かれば、open(OUT, "> out.gif");がhtmlに埋め込む際に必要なものではなく、たんなるデータの上書き保存だと。 分かりやすく書いて頂いて、ありがとう。

noname#15892
質問者

補足

所で、gif画像が乱れます。 gifによっては乱れると、どこかのHPで見たのですが、なにか基準はあるのでしょうか?

その他の回答 (1)

  • galluda
  • ベストアンサー率35% (440/1242)
回答No.1

がると申します。 基本的には「HTTPの動きとやり取りの流れ」をきちんと履修されることをお勧めいたしますが。 短絡的には、画像出力の前に、ヘッダとして Content-type: image/gif を出力してあげれば動くかと思います。 Perl的には print "Content-type: image/gif\n\n"; ですね。

noname#15892
質問者

補足

 あ、すいません。 こう書いていたのですが、やはり表示されませんでした。 上の部分は、コピーしていませんでした。 print "Content-type: image/gif\n\n"; @img[0] = 'img/0.gif'; @img[1] = 'img/1.gif'; @img[2] = 'img/2.gif'; @img[3] = 'img/3.gif'; @img[4] = 'img/4.gif'; # 基本的な使い方  require "./gifcat.pl";  open(OUT, "> out.gif");  binmode(OUT); (print "Content-type: image/gif\n\n";)※2  print OUT &gifcat'gifcat(@img);  close(OUT);  exit 0; 位置が違うのかな?と思い、※2の位置にして試してみたのですが、やはり。 gif画像はできているのですが。

関連するQ&A

  • gifcat.plを使わないためには

    hassyさんという人の「WHカウンター」というcgiを使わせてもらっています。 キリ番の時に総カウントの数字の前後に「おめでとう」などの画像を表示して、その画面をプリントしてもらい、ささやかなプレゼントをあげるようなページにしたいのですが、gif画像の連結表示にgifcat.plというライブラリを使用しているらしく、カウンタをつけているページを印刷しても画像が左端のものしかプリントできません。 これはIE5(?)の仕様でしょうがないようなので、gifcat.plを使用せずにgif画像を個別に表示する設定にCGIを書き換えようと思ったのですが、どこをどういじればいいのかさっぱりわかりません。 似たようなスクリプトでgifcat.plを使わない物はないか…と探してみたりもしたのですが、なかなか見つからずに困っています。 どなたか教えてくださいませ。 よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • gifcat.pl:助言お願い致します

    カウンター画像の素材配布/サンプルページ(カウントはしない)を製作しています。 http://cgi-design.net/cont/study/study.cgi?mode=main&no=28 を参考にtest.cgi(=sample28.cgi)を作成し、以下のようにアップロードしました。 aディレクトリ ├index.html ├test.cgi ├gifcat.pl ├b(0.gif~9.gif) └c(0.gif~9.gif) index.htmlに<img src="test.cgi&id=b">といった感じに記述し、bディレクトリの10個の連結画像(0123456789)、同じく<img src="test.cgi&id=c">でcディレクトリの連結画像を表示させたいのですが、test.cgiの改造のしかたがさっぱり解らずにいます。 実際のサンプル画像ディレクトリは50以上あるので、どうにか再現できないかな…と思っています。助言頂けると助かります。宜しくお願い致します。

    • ベストアンサー
    • Perl
  • gifcatで生成された画像にリンクを貼りたい

    自分用にカウンターcgiを作っています[ファイル名count.cgi] gifcat.plで連結して表示されたカウンター画像に リンクを自動で付けたいです。 (カウンター画像をクリックすると指定されたページにいけるようにしたい) count.cgiの出力部分は 1行目 print "Content-type: image/gif\n\n"; 2行目 print &gifcat'gifcat(@numimg); ですが、2行目に細工して 1行目 print "Content-type: image/gif\n\n"; 2行目 print <a href=http://XXX.jp> &gifcat'gifcat(@numimg) テスト</a>; としてもうまく行かないです。 皆さんお手数ですが、良い解決方法があれば教えてください。 宜しくお願いします。

    • ベストアンサー
    • CGI
  • gifcatの挙動について

    OS    :Windows XP ブラウザ:IE6 最近、お遊びで簡単なアクセスカウンタを作りました。 書籍を参考にして、一応動作するところまでは行きました。 しかし、gifcatの挙動について疑問が沸きました 本を読む限りでは、 「gifcatは複数のgif画像を一つのgif画像に 連結するためパラパラとは表示されない」 のような旨が記述されていたと思うのですが、 実際に動作させて見ると、どう見てもパラパラと 表示されています。 これはどうしてなのでしょうか。 知っている方いましたらご教授お願い致します。

    • 締切済み
    • CGI
  • 画像カウンタの作り方

    CGIファイルにアクセスするたびに数字でカウントを表示するのはできたのですが、 <img src="count.cgi"> のように画像としてCGIファイルを読み込んで表示するには gifcat.plを使うようなのですが、どのように使えばいいのでしょうか。 よろしくお願いします。

    • 締切済み
    • CGI
  • 杜甫々さんのgifcat.plをカンマ区切りでも画像連結させたい

    カウンター画像の出力などに使われる杜甫々さんが作成されたgifcat.pl ではGIF画像の連結を行ってくれますが その元となるログは<>区切りでなくてはなりません。 例えば、総数、昨日、今日のアクセス数を取ってくれるカウンターのログを見ると 5<>5<>0<>105<>2<>13<> こんな感じになっています。 この<>区切りを,(カンマ)区切りであっても画像連結ができるようにしたいのですがその修正箇所がどうしてもわかりません。 元となるCGIの方はカンマ区切りでログが書き込まれるようにしました。 どなたかご教授願います。

    • ベストアンサー
    • CGI
  • PHP に gifcat.pl のような画像連結ライブラリはないですか。

    PHP に gifcat.pl のような画像連結ライブラリはないでしょうか。 GDライブラリとかいうのがあるみたい(よく分かってません)ですが、gifcat.pl のように手軽に使えるものはないでしょうか。

    • ベストアンサー
    • PHP
  • 昨日と今日のカウンタについて ご指摘下さい

    昨日と今日のカウンタについて カウンターが1こずつではなく、4つとか5つとかずつ増えてしまいます。ですが、html内の <p>本日の数は<img src="./count.cgi?today">です</p> <p>昨日の数は<img src="./count.cgi?yeaday">です</p> を削除すると、ちゃんと1つずつカウントしていきます。(count.datの本日のカウント数もちゃんと1こずつ増えるのを確認しました。) プログラムの何処が間違っているのでしょうか?アドバイスをお願い申し上げます。 <<count.cgi>> #!C:\Perl\bin\perl # 昨日と今日のカウントの取得 $ENV{'TZ'} = "JST-9"; $mday = (localtime(time))[3]; open (FILE, "<logday.dat") || die "File Open Err!-logday.dat\n"; $logday = <FILE>; close(FILE); ($day, $yesday) = split(/:/, $logday); #それぞれ、今日の日付、昨日のカウント数に分ける open(FILE,"<count.dat") || die "File Open Error!-count.dat\n"; $count = <FILE>; #変数countにデータを収納 close(FILE); ($count, $today) = split(/:/, $count); #それぞれ、トータルカウント数、今日の日付のカウント数に分ける # 数をカウント if($day == $mday){ #同日だったなら、トータルと本日のカウントだけ取る。 &totalcount(); }else{ #違っていたら、本日のカウント数を昨日へ、本日のカウントを0に、日にちを修正 $yesday = $today; $today = 0; open (FILE, ">count.dat") || die "File Open Err!-logday.dat\n"; flock(FILE,2); print FILE "$count\:$today"; flock(FILE,8); close(FILE); open (FILE, ">logday.dat") || die "File Open Err!-logday.dat\n"; flock(FILE,2); print FILE "$mday\:$yesday"; flock(FILE,8); close(FILE); &totalcount(); #その後カウントをとる } # 引数受取 $mode = $ENV{'QUERY_STRING'}; $mode =~ s/\W//g; require "./gifcat.pl"; #画像表示のif文================ if($mode eq "total"){ &total(); }elsif($mode eq "today"){ &today(); }else{ &yestaday();} exit; # ログの更新================================ sub totalcount{ open(FILE, "+<count.dat") || die "File Open Error!\n"; flock(FILE,2); $count++; #トータルカウント数にプラス1 $today++; #同じく本日のカウント数にもプラス1 seek(FILE, 0, 0); print FILE "$count\:$today"; flock(FILE,8); close(FILE); } # カウンタの数字に画像を付ける sub total{ #トータルカウンタ============= @countdata = split(//, $count); foreach $cou(@countdata){ push(@view, "./img-t/$cou.gif"); } #画像の出力=============== print "Content-type:image/gif\n\n"; binmode(STDOUT); print &gifcat::gifcat(@view); } sub today{ #今日のカウンタ============= @countdatadt = split(//, $today); foreach $coudt(@countdatadt){ push(@viewdt, "./img-d/$coudt.gif"); } #画像の出力=============== print "Content-type:image/gif\n\n"; binmode(STDOUT); print &gifcat::gifcat(@viewdt); } sub yestaday{ #今日のカウンタ============= @countdatady = split(//, $yesday); foreach $coudy(@countdatady){ push(@viewdy, "./img-d/$coudy.gif"); } #画像の出力=============== print "Content-type:image/gif\n\n"; binmode(STDOUT); print &gifcat::gifcat(@viewdy); } <<count.html>> <html> <head> <title>カウンタ</title> </head> <body> <p>トータルカウント数は<img src="./count.cgi?total">です</p> <p>本日の数は<img src="./count.cgi?today">です</p> <p>昨日の数は<img src="./count.cgi?yeaday">です</p> </body> </html> <<count.dat>> トータル数:本日のカウント数 <<logday.dat>> 今日の日:昨日のカウント数

    • ベストアンサー
    • Perl
  • アクセスカウンターが出来ない

    以下はフリーソフトのサンプルですが数字のところがバツ印になっしまいます。 カウンターを付けるファィルに <CENTER><TABLE> <TR> <TD>あなたは累計</TD> <TD> <TABLE BORDER=1> <TR> <TD><img src="cgi-bin/daycount.cgi?gif"></TD> </TR> </TABLE> </TD> <TD>人目の訪問者です。</TD> </TR> </TABLE> (本日は<img src="cgi-bin/daycount.cgi?today">番目のアクセスです。 また昨日は<img src="cgi-bin/daycount.cgi?yes">人のご来場者がありました) </CENTER> を書くのですが、うまくいきません。 ファィル構成は次のとおり index.html ... ここにカウンタを設置するものとする | +--  cgi-bin / daycount.cgi [755] | daycount.dat [666] | gifcat.pl [644] | +-- gif1 / 0.gif, 1.gif, ... 9.gif | +-- lock [777] / よろしくお願いします。

    • ベストアンサー
    • Perl
  • perl初心者 「カウンタ」の2

    「とほほ」さんのgif画像連結ライブラリを使ってカウンタを作成中、行き詰ってしまいました。 下のスクリプトはあるサイトで配布されているカウンタのスクリプトの一部です。 1 while (length($count) < $fig) { $count = '0' . $count; } 2 $length = length($count); 3 @GIF=(); 4 foreach (0 .. $length-1) { 5 $n = substr($count,$_,1); 6 push(@GIF, "$imgdir/$n\.gif"); 7 } 8 9 print "Content-type: image/gif\n\n"; 10 binmode(STDOUT); 11 print &gifcat'gifcat(@GIF); * $figはカウンタ表示桁数です。 * $imgdirはカウンタ画像のディレクトリです。 このスクリプトを組み込んだらうまいことカウンタを表示することができました。 でもスクリプトの理解ができず悩んでいます。 お暇がありましたらぜひ教えてください。

専門家に質問してみよう