人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPで教えてください。
やりたいことは、フォームで「文字列」「画像」をアップロードし、確認画面を出し、データベースに登録をするという感じです。
---form.html---
<input type="text" name="text1">
<input type="file" name="img1">
---------------
で送り、
---test.php---
$imgdata = $_POST["img1"];
##GDで色々加工##
ob_start();
imagejpeg($imgdata);
$outfile = ob_get_contents();
ob_end_clean();

##確認画面表示##
echo $_POST["text1"];
echo $outfile;
-------------
というような感じでやりたいのですが、echo $outfileが上手に表示できません。
画像だけなら、
header("Content-type: image/jpeg");
echo $outfile;
で表示できるのですが、HTML内の一部分に画像を表示する方法を教えてください。
お願いします。

●質問者: norif_h
●カテゴリ:ウェブ制作
✍キーワード:echo Gd HTML JPEG PHP
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● pahoo
●100ポイント ベストアンサー

http通信では、1つのファイルに対し、1つのContent-typeしか付けることができません。

したがって、テキストを表示しているHTMLコンテンツの中で、img src で

header("Content-type: image/jpeg");
echo $outfile;

をハイパーリンクさせるのが普通です。


なお、「The "data" URL scheme」 によると、<img src="data:image/gif;base64,BASE64データ"> で画像を表示できるとされています。

ご質問の PHP スクリプトですと、$outfile を base64_encode 関数でエンコードしてやれば、HTML中に画像データを埋め込むことができます。

ただし、手元の Windows 環境で、この方式に対応しているブラウザは Firefox 2.0 だけでした。IE 6/7, Safari, Opera は表示できませんでした。


参考サイト

◎質問者からの返答

ありがとうございます。

非常に助かります。別ファイルでheaderとimageを送るんですね。

なるほど。勉強になりました。


2 ● GoldenDawn
●50ポイント

強引にやるならこんな感じ。

echo '<img src="data:image/jpeg;base64,'.base64_encode($outfile).'" />' ;

ただし IE は標準では dataスキームに対応していないので、一旦ファイルに書き出す必要があるかと思います。

http://q.hatena.ne.jp

◎質問者からの返答

ありがとうございます。

参考にさせていただきます。


3 ● hirotow
●5ポイント

いったん画像を保存して、

この画像を参照するHTMLを出力するのが一般的な手法でしょうか。

古い画像は次回アクセス時に一定時間以上経過したものを削除します。

たとえばこの幕末古写真ジェネレータというのもこの方式でやっています。

http://labs.wanokoto.jp/olds

◎質問者からの返答

ありがとうございます。

まあそうなんでしょうが、今回は「画像ファイル」を作りたくなかったもので。

「幕末古写真ジェネレータ」拝見させていただきました。

おもしろいですね。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ