• ベストアンサー

PHPで吐き出した画像にリンクをつけるのはどうすればいいでしょうか?

よろしくお願いいたします。 今回初めて本格的なPHPのプログラムを作ろう!と思ってみたのですが、早速どうすればいいのかわからなくなってしまい、投稿させていただきました。 ImageCopyResized()関数を使って画像を縮小してサムネイルとして 作成しようと思っているのですが、その画像にリンクをつける方法がわかりません。 どうすればいいでしょうか?説明が不足していたらすいません。 よろしくお願いいたします。

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

  • ベストアンサー
回答No.4

# 2 です ページに画像が表示される、と言う事は、まずベースのHTMLが読込まれて、そこにあるイメージタグによって二次的にサーバにアクセスし、イメージファイルをダウンロードして表示させているのです。 WORDやPDFファイルのように埋め込まれている訳じゃない、と言う事をまず認識して下さい。 > imageCopyResized()関数でリサイズして、 ImageJpeg()で出力なんですが、これにリンクとかはつけれないのかなとか思っているのですが、、、 質問者さんのやりたい事をやっと理解しました。 前回は <img src="img.php?xxxxx" /> から直接イメージを呼び出しましたが(その場でリサイズ)、サムネールイメージをファイルで書き出せば、 <img src="thum_file.jpg" /> で呼び出す事が出来ます。 この場合、1枚2枚のサムネイル作成なら問題ありませんが、まとめて処理する場合はかなり時間がかかる可能性があります。アクセスしたら10秒も真っ白、と言う状況が考えられる訳です。 ですから、やりかたとしては、 1.動的に処理したい場合(その場でサムネイル作成、サーバ負担重)する場合は、HTMLを作成するスクリプト(仮にa.php)とサムネイルを作成するスクリプト(仮にthum.php)を用意して、前回のようなやり方でthum.phpを呼び出しながら表示する方法 2.静的に処理(まとめて作り込みをする、サーバ負担は軽)する場合は、PHPスクリプトでサムネイルの作成(t_01.jpg,t_02.jpg等)と表用HTMLの作成(a.html)を先に行っておく方法 3.1と2の合わせ技、サムネイルは先にPHPで生成、表示用HTMLだけ動的にPHPで表示する方法 等が考えられます。 ちなみに、最近流行のブログ等は、2の投稿時にHTMLファイルを作成してしまうという方法が多く見られます。phpは動的にHTMLを生成するというのが優れているわけですが、やはり大量アクセスの場合はサーバに負担をかけます。動きがあったときだけHTMLを作成する、と言う方法をとればとても合理的と言う訳です。 蛇足でした。

その他の回答 (3)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

ブラウザで表示されている画像はhtmlと同時に送られているわけではありません 1.まずサーバにhtmlファイルを要求し送られてきたhtmlを解釈します 2.html中に画像のリンクがあれば新たにサーバに画像ファイルを要求します 3.サーバから送られた画像を表示します 4. 2~3を画像の数だけ繰り返し というわけでhtmlを出力するphpと画像を出力するphpは別々にしないといけないということです。

回答No.2

画像表示と、HTML表示のスクリプトは別でなければいけません。 サムネイルを作るファイルを$fnameの配列にいれておいたとして、HTML作成スクリプトでは5x4の表示をするとして for ($i=0;$i<20;$i++){ if($i%5 == 0) $tb .= "\n<tr>"; $tb .= "\n<td><img src='thum.php?f={$fname[$i]}' /></td>"; if($%5 == 4 ) $tb .= "\n</tr>"; } とします。別に、$_GET[f]に元画像を示すファイル名を指定すればサムネイルを作成するスクリプトを作っておきます。 サムネイル作成スクリプトは自作も良いですが、たくさん公開されていますよ。 例えばこの辺とか http://aki.adam.ne.jp/php/thumb/download.php 頑張って下さい。

muku101681
質問者

補足

ありがとうございます! 画像表示とHTML表示のスクリプトは別でないといけないというのは どうゆう事なのでしょうか? PHPはHTMLに自由に組み込めるものだと思っているのですが、解釈がちょっと間違っているのでしょうか? 例えばなんですが、PHPで imageCopyResized()関数でリサイズして、 ImageJpeg()で出力なんですが、これにリンクとかはつけれないのかなとか思っているのですが、、、 画像処理をさせるにはそれ専用のPHPを呼び出して処理だけさせる、、、、 見たいな考え方でいいでしょうか? 質問ばかりですいません。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

質問の解釈が違ったら申し訳ないですが <img src="hoge.php?id=xxx"> みたいなことをすればよいでしょう。

muku101681
質問者

補足

早速の回答ありがとうございます。 それと説明不足で本当にすいません。やろうとしてる事なのですが、 (1)サムネイルとして表示する画像をフォルダにまとめておきます。 (2)そのフォルダから全ての画像を順に取り出して、リサイズ (3)横並びに表示、その一つ一つにリンクを設定 ImageCopyResized()関数の引数で表示する座標を決めれるので それで任意の場所に表示させようと思っているのですが、、、、、 yambejpさんのおっしゃっている(クエリですよね?)を使ってする方法でも できればいいのですが、(初心者なものでどうすればいいのかわからないので、、、) もし同じ結果になるのでしたらどの方法でもいいのでアドバイスいただけますでしょうか? よろしくお願いいたします。

関連するQ&A