• ベストアンサー

jpeg画像を表示する方法

質問させてください。 ボタンが押されると画像が表示されるプログラムを作成したのですが、画像部分が文字化けされた文字として表示されます。 <html> <head> <title>おみくじ</title> </head> <body> <CENTER> <form method="GET" action="<?php echo $_SERVER['PHP_SELF'];?>"> <input type="submit" value="おみくじ" name="button"> </form> <?php if (isset($_GET["button"]) && $_GET["button"] !== "") { $image_in = imagecreatefromjpeg("img/omikuji.JPG"); header ( "Content-type: image/jpeg" ); imagejpeg ($image_in); imagedestroy($image_in); } ?> </CENTER> </body> </html> phpのソースを丸々別ファイルにするという方法もとったのですが、状況は変わりませんでした。 どなたかお知恵をお貸しください。

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

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

header出力の前にはソースはもちろん改行やBOMなど一切挿入できません。 php部分を前に持っていき、イメージ出力したらexitするのがよいのでは? <?php if (isset($_GET["button"]) && $_GET["button"] !== "") { $image_in = imagecreatefromjpeg("img/omikuji.JPG"); header ( "Content-type: image/jpeg" ); imagejpeg ($image_in); imagedestroy($image_in); exit; } ?> <html> <head> <title>おみくじ</title> </head> <body> <CENTER> <form method="GET" action="<?php echo $_SERVER["SCRIPT_NAME"];?>"> <input type="submit" value="おみくじ" name="button"> </form> </CENTER> </body> </html> なお、現在PHP_SELFはXSSの関係で推奨されないようです。 SCRIPT_NAMEでお試しください。

ryu-e
質問者

お礼

わかりました。そういう仕様だったのですね。 ありがとうございました。

その他の回答 (2)

  • BellBell
  • ベストアンサー率54% (327/598)
回答No.3

HTML(テキストファイル)の中に、画像(バイナリファイル)が埋め込まれてしまいますのでおかしなことになります。 元のHTMLからimgタグで、おみくじ画像(たぶん凶とか大吉とか書かれた画像でしょうか?)を呼び出す形に変更します。 <html> <head> <title>おみくじ</title> </head> <body> <CENTER> <form method="GET" action="<?php echo $_SERVER['PHP_SELF'];?>"> <input type="submit" value="おみくじ" name="button"> </form> <?php //ボタンが押されたので、おみくじ画像を読み込むためのimgタグを出力する if (isset($_GET["button"]) && $_GET["button"] !== "") { //画像へのリンクを出力する echo "<img src=\"./omikuji_gazou.php\" />"; } ?> </CENTER> </body> </html> omikuji_gazou.php-----新規に作成するphp <?PHP //実際にはランダムで複数のJPEGファイルを選択する? $image_in = imagecreatefromjpeg("img/omikuji.JPG"); header ( "Content-type: image/jpeg" ); imagejpeg ($image_in); imagedestroy($image_in); ?> パスは適当なので、適切な形に合わせてください。

ryu-e
質問者

お礼

ありがとうございました。 こちらを参考にさせていただきました。

noname#111181
noname#111181
回答No.1

前半のHTML部分 <html> <head>  ~ </form> が余計です。削除してください。 header("Content-type: image/jpeg"); はhttp通信の冒頭に置くものですので。

ryu-e
質問者

お礼

わかりました。 ありがとうございました。

関連するQ&A

専門家に質問してみよう