• ベストアンサー

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のソースを丸々別ファイルにするという方法もとったのですが、状況は変わりませんでした。 どなたかお知恵をお貸しください。

  • ryu-e
  • お礼率72% (202/278)
  • PHP
  • 回答数3
  • ありがとう数5

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

  • ベストアンサー
  • 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

  • PHPで画像縮小

    質問します。自分は今PHPで画像の縮小をしようと思っています。 しかしうまくいきません。 コードは <htm> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>画像縮小</title> </head> <body> <?php $size = getimagesize("dl_button.png"); $image_in = imagecreatefrompng("dl_button.png"); $image_out = imagecreate( 90, 90 ); imagecopyresized( $image_out, $image_in, 0, 0, 0, 0, 90, 90, $size[ 0 ], $size[ 1 ] ); imagepng($image_out,"small.png"); imagedestroy( $image_in ); imagedestroy( $image_out ); ?> <img src = "dl_button.png" border = "0"> <img src = "small.png" border = "0"> </body> </html> となっています。 今のままだとエラーが出て、 「small.pngが見あたらない」と言われてしまいます。 ディレクトリは index.phpとdl_button.pngが同じ場所にあります。

    • ベストアンサー
    • PHP
  • PHPによる画像処理

    PHPを使ってJPG形式の画像をPNG形式に変換しようとしていますが、画像が添付のスクリーンショットのようなものになってしまいます。 以下がPHPスクリプトです。 ちゃんとPNG形式の画像を表示させるにはどうしたらよいのでしょうか。 詳しい方、どうかご教授ください。お願いします。 <?php $fpath='pictures/DSCN1458.JPG'; $scimg=imagecreatefromjpeg(realpath($fpath)); $cpimg=imagecreatetruecolor(200,150); $cl=imagecolorallocate($cpimg,255,0,0); imagecopyresized($cpimg, $scimg, 0,0,0,0,imagesx($cpimg),imagesy($cpimg), imagesx($scimg),imagesy($scimg)); header('Content-type', 'image/png'); imagepng($cpimg); imagedestroy($scimg); imagedestroy($cpimg); ?> <html> <head><title>image transform</title></head> <body > </body> </html>

    • ベストアンサー
    • PHP
  • 画像を表示するPHPファイルをHTMLファイルの中に埋め込みたいのですが。

    いつも、お世話になっております。 小生、只今、WindowsXPSP3上でXAMPPを使い、PHPを勉強中のPHP初心者です。 今回、自分でPHPで画像を表示させようと思い、ネットで調べ、以下の2つのソースファイルを作成しました。 source.html source.php 以下、ソースファイルの内容です。 -----source.html------ <html> <body> <center><img src="source.php"></center> </body> </html> -----source.php----- <?php $gazou = imagecreatefromjpeg("test.jpg"); imagejpeg($gazou); imagedestroy($gazou); ?> 以上の様な内容になっています。 そこで、今回質問させて頂きたいのは、上記のソースを1つのPHPファイルにまとめる事はできないのでしょうか?? お忙しい中、申し訳ございませんが、先輩方ご教授宜しくお願い致します。

    • ベストアンサー
    • PHP
  • ImageTTFTextで保存すると文字が表示されない

    指定した画像(jpeg)に文字を埋め込みをして 出力は出来たのですが、 保存をすると文字が無い状態で保存してしまいます。 以下のようにソースは書いております。 <?php Header ("Content-type: image/jpeg"); $image=imagecreatefromjpeg("aaa.jpg"); $txt = mb_convert_encoding($_POST["moji"], "UTF-8", "SJIS"); ImageTTFText ($image, 9, 0, 60, 45, 0, "HGRSGU.TTC",$txt); //jpeg画像作成 imagejpeg($image); //画像リソースの開放 imagedestroy($image); ?> おかしいと思われるところ等御座いましたらご教授願います。

    • ベストアンサー
    • PHP
  • formタグって必要ですか?

    <html> <head> <title>test</title> </head> <body> <form> <input type="button" value="文字" onclick="document.location = 'http://www';" /> </form> </body> </html> でも <html> <head> <title>test</title> </head> <body> <input type="button" value="文字" onclick="document.location = 'http://www/';" /> </body> </html> でも、問題なく動くのですが、formタグって必要ですか?

    • ベストアンサー
    • HTML
  • PHPでGDライブラリを使って縮小した画像を直接表示したい

    PHPでGDライブラリを使って、「image.jpg」という画像(800x222のJPEGファイル)を、GETで渡した幅に縮小させたくて、次のように書きました。 -----reimage.php--------------------- <?php header("Content-Type:image/jpeg"); $old_width=800; $old_height=222; $width = htmlspecialchars($_GET['w']); $height = ($old_height / $old_width) * $width; $source = imagecreatefromjpeg("image.jpg"); $re_image = imagecreatetruecolor($width,$height); imagecopyresampled($re_image,$source, 0, 0, 0, 0,$width, $height, $old_width, $old_height); imagejpeg($re_image); imagedestroy($re_image); ?> -------------------------- 他のHTMLファイルから <img src="reimage.php?w=480"> などとすると縮小された画像が表示されるのですが、直接「reimage.php?w=480」を開くと、文字化けした文字列が並んでいるばかりで画像が表示されません。 firefoxでMIMEタイプを見てみると、「text/html」になっています。 >header("Content-Type:image/jpeg"); の部分がうまくいっていないのだと思いましたが、どう直せばいいのか分かりません。 なお、サーバーはxreaの広告免除を使っています。 まだPHPを勉強し始めて日が浅いので、見当違いなことを聞いているかも知れませんが、よろしくおねがいします。

    • ベストアンサー
    • PHP
  • PHPによる画像の生成による色の変化

    お世話になっております。 PHPでアップロードしたjpg画像を縮小して生成しているのですが、色がおかしくなってしまいます。 (全ての画像が荘ではないのですが、変わるものは元の画像とはまったく違った青の強い色になってしまう。) ソースはこんな感じなのですが、何かおかしい部分があったらお教えいただけますでしょうか。 また、何か画像処理を加えてあるものを使用するとこのような経験がある方いらっしゃいましたらよろしくお願いいたします。 version 4.3.8です。 ******************** function imgjpg($_val1,$_val2,$_val3) { $size=GetImageSize("$_val1"); $image_in = ImageCreateFromJpeg("$_val1"); //縦長か横長か計算 $ratio = $size[0] / $size[1]; if($ratio > 1){ //横長の場合 $image_out = ImageCreate($_val3,$_val3 / $ratio); imagecopyresized($image_out,$image_in,0,0,0,0,$_val3,$_val3 / $ratio,$size[0],$size[1]); } else {//縦長の場合 $image_out = ImageCreate($_val3 * $ratio,$_val3); imagecopyresized($image_out,$image_in,0,0,0,0,$_val3 * $ratio,$_val3,$size[0],$size[1]); } ImageJPEG($image_out,$_val2); ImageDestroy($image_in); ImageDestroy($image_out); ********************

    • ベストアンサー
    • PHP
  • 本の通りに書いたphpのプログラムが動かなくて困っています。

    本の通りに書いたphpのプログラムが動かなくて困っています。 <?php if (isset($_POST["start"])) { $uranai_data[] = "大吉です。\nいい日になりそうです。"; $uranai_data[] = "中吉です。\nいつもよりいいことが起こりそうです。"; $uranai_data[] = "吉です。\nよくもなく悪くもない日です。"; $uranai_data[] = "末吉です。\n運気が少し下がり目です。気をつけましょう。"; $uranai_data[] = "凶です。¥n今日は控えめな行動をとりましょう。"; $max = count($uranai_data) - 1; $result = rand(0,$max); $message = "あなたの運勢は…" . $uranai_data[$result]; } else { $message = "あなたの運勢をチェックしましょう。"; } ?> <html> <head> <title>おみくじプログラム</title> </head> <body> <h2>今日のおみくじ</h2> <h4>「おみくじを引く」ボタンをクリックすると結果が表示されるよ。</h4> <form action="omikuji.php" method="post"> <textarea name="result" rows="5" cols="40"><?=$message?></textarea> <br /> <input type="submit" name="start" value="おみくじを引く" /> </form> </body> </html> これをieやfirefoxでhttp://localhost/omikuji.phpで実行しても テキストエリアが<?=$message?>となっていて<html>から上の部分が動作していないようなのですが考えられうる原因を教えてください。

    • ベストアンサー
    • PHP
  • PHP Version 4.3.9で画像を

    表示させたいのですが以下の関数 imagecreatefromjpeg imagecreatetruecolor imagecopyresized imagejpeg を使うと次のようなエラーが発生します (imagecreatefromjpeg以外でも同じ) Fatal error: Call to undefined function: imagecreatefromjpeg() in /var/www/html/postgres/bbs3/bbs3.php on line 32 どうしたらこれらの関数を使えるようになるのでしょうか?

    • ベストアンサー
    • PHP
  • PHP GD 画像リサイズ

    PHP+GDで携帯サイト用の画像リサイズ処理させるプログラムを書籍のサンプルプログラムを元に作成していますが画像が表示されません。 GD:ver2.17 $image_data = @imagecreatefromjpeg($image_file); $output_image_data = @imagecreatetruecolor($output_image_x, $output_image_y); @imagecopyresampled($output_image_data, $image_data, 0, 0, 0, 0, $output_image_x, $output_image_y, $image_x, $image_y); header('Content-Type: image/jpeg'); @imagejpeg($output_image_data); @imagedestroy($image_data); @imagedestroy($output_image_data); 動作確認は携帯とPC両方でやってますが、携帯だと画像表示されず×が表示され、PCだと文字化けした文字が出力されます。 PCで所々デバック文を表示させたりして確認したところimagecopyresampled関数ではTRUEが返ってきておりましたが、imagejpeg関数以降のデバック文が表示しませんでした。 初心者なのでうまく説明できなくてすいません。 お手数ではございますがご教授お願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう