やりたいことは、フォームで「文字列」「画像」をアップロードし、確認画面を出し、データベースに登録をするという感じです。
---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内の一部分に画像を表示する方法を教えてください。
お願いします。
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 は表示できませんでした。
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を送るんですね。
なるほど。勉強になりました。
強引にやるならこんな感じ。
echo '<img src="data:image/jpeg;base64,'.base64_encode($outfile).'" />' ;
ただし IE は標準では dataスキームに対応していないので、一旦ファイルに書き出す必要があるかと思います。
ありがとうございます。
参考にさせていただきます。
いったん画像を保存して、
この画像を参照するHTMLを出力するのが一般的な手法でしょうか。
古い画像は次回アクセス時に一定時間以上経過したものを削除します。
たとえばこの幕末古写真ジェネレータというのもこの方式でやっています。
ありがとうございます。
まあそうなんでしょうが、今回は「画像ファイル」を作りたくなかったもので。
「幕末古写真ジェネレータ」拝見させていただきました。
おもしろいですね。
ありがとうございます。
非常に助かります。別ファイルでheaderとimageを送るんですね。
なるほど。勉強になりました。