gifcatで生成された画像にリンクを付けたい方法

このQ&Aのポイント
  • 自分用に作成したカウンターcgiで、gifcat.plで連結して表示された画像にリンクを付けたい方法を教えてください。
  • count.cgiの出力部分に細工してリンクを追加しようとしていますが、うまくいきません。解決方法を教えてください。
  • gifcatで生成したカウンター画像をクリックして指定ページに遷移する方法を教えてください。
回答を見る
  • ベストアンサー

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>; としてもうまく行かないです。 皆さんお手数ですが、良い解決方法があれば教えてください。 宜しくお願いします。

  • reimy1
  • お礼率64% (244/379)
  • CGI
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
  • Suzi
  • ベストアンサー率38% (130/334)
回答No.1

 カウンターが、例えば「1234」としたら、1234.html とかへリンク、ということでしょうか。 print <a href=?http://XXX.jp>? &gifcat'gifcat(@numimg) テスト</a>;  なら、@numimg に配列として、1234が入っているので、@numimg = (1, 2, 3, 4); になると思います。  この配列を連結すれば良いので、 $number = join('' , @numimg); とすれば、$number は、1234。  これにリンク先の拡張子を付けて、$number .= '.html'; print "<a href=\"$number\">"; &gifcat'gifcat(@numimg); print "テスト</a>"; ではどうでしょうか。

reimy1
質問者

お礼

配列となると私にはかなり難しいですが 挑戦してみます。 ありがとうございました。

その他の回答 (1)

回答No.2

GIFを出力しようとしている中でリンクを設定することはできないので、 HTMLを出力する別CGIを用意するのがわかりやすいと思います。 そのHTML出力CGIの中でIMGタグを用意して、そのsrcにcount.cgiを指定すればうまくいくかと思います。 または、別CGIではなくて、 そもそもcount.cgiでHTMLを吐くメソッドを追加して、ひとつのCGIですますのも可能だとは思いますが。

関連するQ&A

  • 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">人目。 というのなら分かるんですが。

    • ベストアンサー
    • CGI
  • gifcat.plを使わないためには

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

    • ベストアンサー
    • CGI
  • 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はカウンタ画像のディレクトリです。 このスクリプトを組み込んだらうまいことカウンタを表示することができました。 でもスクリプトの理解ができず悩んでいます。 お暇がありましたらぜひ教えてください。

  • 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
  • 画像が表示できません。

    print "Content-type: image/gif\n\n"; open(IMG,"./1.gif"); $img =(IMG); close(IMG); print $img; 画像ファイル "http://0.0.0.0/a.cgi" は壊れているため、表示できませんでした。 となり表示ができません。

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

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

    • 締切済み
    • CGI
  • 昨日と今日のカウンタについて ご指摘下さい

    昨日と今日のカウンタについて カウンターが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
  • 画像を使ったアクセスカウンターですが。。。

    どなたか教えていただければ大変ありがたいです。 画像(0.gif~9.gif)を使用し、アクセスカウンターを作る 次のソースの内、 ------------------------------------------------------------------- #!c:/perl/bin/perl require './sub_lock.pl'; $countfile = "./count.log"; $lockdir = "./lockdir"; exit unless(&lock($lockdir)); open(COUNTFILE, "+<$countfile"); chomp($count=<COUNTFILE>); $count++; seek(COUNTFILE, 0, 0); print COUNTFILE "$count\n"; truncate(COUNTFILE, tell(COUNTFILE)); close(COUNTFILE); &unlock($lockdir); $count_img = sprintf("%04d", $count); $count_img =~ s/(.)/<img src=".\/images\/$1.gif">/g; print "content-type:text/html\n\n"; print $count_img; exit; ------------------------------------------------------------------- $count_img =~ s/(.)/<img src=".\/images\/$1.gif">/g; の 「(.)」と「$1」になっているところが、どうも理解できなくて 困っています。 「=~ s」がパターンマッチであることだけは知っています。 CGI辞書などを調べてもやはり意味がわからず、お手上げ状態です。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • CGI
  • 杜甫々さんのgifcat.plをカンマ区切りでも画像連結させたい

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

    • ベストアンサー
    • CGI
  • 画像ファイルが崩れる

    Perlで、CGIを作成しています。 GIF画像をCGI経由で表示させようと思っているのですが、なぜか、画像が崩れてしまいます。GIFだけではなく、Jpegでも同じです。しかし、HTMLファイルの <img>タグでそのまま表示させようとすると、きちんと表示します。 どのようにすれば、崩れを抑えられますか? CGIソース---------------------- #!/usr/local/bin/perl $imgsrc="number/0.gif"; print "Content-type:image/gif\n\n"; open(IMG,$imgsrc); binmode(IMG); print <IMG>; close(IMG); -----------------------------EOF HTML---------------------------- <html> <head> </head> <body> <img src="cgi/image.cgi" width="28" hegiht="31"> </body> </html> ------------------------------EOF gif画像は、 http://www.akikobrand.com/icon/img/10/6/0.gif を使わせていただきました。(個人的な使用です)

    • ベストアンサー
    • CGI

専門家に質問してみよう