• ベストアンサー

画像をDBに保存し、表示させるのは・・・?

はじめまして。 今、(1)ファイル参照から画像ファイルを選択してDB(MySQL:phpMyAdmin2.10.1)にある フィールド(gazou)へBLOBのバイナリで保存し、 (2)違うぺージでDBに保存してある画像を、検索して表示させたいのですが、 以下のようになってしまい、表示できません。 http://shokuhidiet.web9.jp/a/3.bmp ソースを載せておきます。どうかよろしくお願いいたします。 http://shokuhidiet.web9.jp/a/sos.txt

  • PHP
  • 回答数4
  • ありがとう数5

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

  • ベストアンサー
  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.3

> echo "<img src=\"data:image/gif;base64,${gif_enc}\" />"; 現在の主なブラウザは、html内に画像のバイナリー情報を埋め込んでも(たとえbase64encodeしても)表示出来ません。 srcは、ファイル名を指定する属性なので、アドレスが入っていれば、サーバーからそんなファイルは無いという情報が返って、表示不可用の画像になるけど、data:スキームだと、どこかに探しに行ってそのまま返ってこないのでしょう。 一枚の画像のみを出力するphpスクリプトを別に作って、img src="" では、そのphpスクリプトを呼び出すようにするのが一般的だと思います。

o-hara-tu
質問者

お礼

お返事遅くなって申し訳ございません>< なるほど、それが原因だったんですね・・・。 やってみます!!ありがとうございます♪^^

その他の回答 (3)

回答No.4

実験していないので分かりませんが、 queryだと、バイナリデータ中にたまたま引用符の文字コードや、\の文字コードに一致するデータがあった場合、動作が怪しくなる様に思います。 base64エンコードして登録、取りだす時にbase64デコードとかしたら、 どうでしょうか。 もしくは、PEAR::DBとかPEAR::MDB2とかの追加ライブラリで prepareがあるものを利用したらどうでしょうか? でも、この問題の答えはANo.3の言っている通りなのかな、と思います。

o-hara-tu
質問者

お礼

お返事遅くなって申し訳ございません。 そのような事があるんですか><; ありがとうございます。ぜひ参考にさせていただきます^^

  • wp_
  • ベストアンサー率54% (132/242)
回答No.2

とりあえずソースだけ拝見しましたが mysql_connectの引数くらいは隠した方が良いです^^;; ダミーだったとしても少しアレです。危機管理意識を持ちましょう。 本題ですが、 画像が途中で切れる、色情報が崩れるというのは何かの処理でバイナリにゴミが入っていることが原因であることが多いです。 または通信のタイムアウト、パケロスなどによる情報不足でもそうなります。 システム開発全般に言えることですが、出力したいデータが意図しないものであった場合はI/Oの手順を一つ一つ丁寧に確認することが肝要です。 この場合ですと 1.mysqlに入れ込む 2.mysql->phpで取得 3.php->クライアント をそれぞれ確認するのが肝です。(本当はもっと細かいところまで精査すべきですが) 1. mysqlに入っているバイナリが入れたいバイナリと完全に同一であるか確認しましょう。 mysqlであればBLOGの最大長を超えたバイナリは破棄される仕様だったと記憶しています。 http://dev.mysql.com/doc/refman/4.1/ja/blob.html PHPの転送量制限なども合わせて確認し、入っているバイナリが本当に正しいかチェックしましょう。 2. php内でunpack()などを使いバイナリを視覚的に読めるものへ変換し壊れた部分をチェックしましょう。 もしかしたら変な文字が入っているかもしれません。(ソースをさらっと見た限りではなさそうですが) 3. 各種サーバの転送量制限に引っかかってたりしないか確認しましょう。 送信するパケット単位が大きいと途中でタイムアウトすることもあります。。 といっても昨今の環境ではお目にかかることは無いでしょうが。^^; 当方的には1.が一番怪しいのではないかなぁと。 // dataスキームってieでは見られなかったと記憶してますが大丈夫でしょうか

o-hara-tu
質問者

お礼

ご指摘ありがとうございます。 全然気がまわっていませんでした><; 以後気をつけます^^ ご丁寧なアドバイスありがとうございます!! ちょっと調べて、また報告させていただきます♪ バージョンはIE6なんですが、、、関係してるんでしょうか。。。 IE6でも見れる方法とかあるといいのですが><;

  • wp_
  • ベストアンサー率54% (132/242)
回答No.1

外部にソースを置かれると誰も見てくれないと思われます。 // 安全なURLであるという保障が無いため // 当方は面倒なだけですが 不明点を明確にし質問すると良いでしょう。

o-hara-tu
質問者

お礼

ご指摘ありがとうございます。 画像が、□に×がついて表示されないってのは私も見たことあるんですが、 ×にもならず、表示されるかされないかの微妙なところでとまってしまって、結局表示されないのです・・・。 $gazou = $row["gazou"]; $gif_enc = base64_encode($gazou); echo "<img src=\"data:image/gif;base64,${gif_enc}\" />"; で表示しようとしたら、そうなってしまいました・・・。

関連するQ&A

  • BLOBデーターの画像の表示方法を教えてください。

    php(4.3)とmysql(4.0)を使って、BLOBに格納した画像を表示させたいです。 テーブル:gazou 画像名:aa.gif | id |   images    | | ̄ ̄| ̄ ̄ ̄ ̄ ̄ ̄ ̄| ̄ ̄ | 1 | [BLOB-2.9KB] | ↑ PHPMYADMINでデーターを作って、画面にはこのように表示されています。 <html> <head> <meta http-equiv=”Content-Type” content=”text/html; charset=EUC-JP”> </head> <body> <?php $conn = mysql_connect("localhost","user","pass"); mysql_select_db(test); $self = basename($_SERVER['PHP_SELF']); $sql = " SELECT * FROM gazou "; $rst = mysql_query($sql,$conn); while($row=mysql_fetch_array($rst)){ print"<img src='{$self}?id=$row[id]'>"; } ?> </body> </html> 本やネットで自分なりに調べた結果、これで画像が表示されるはず(!?)だと思っているのですが、残念ながら、画像は×になって表示されません。 初歩的な質問ですみませんが、どうすれば画像は表示されるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • CSVで画像をDBにつっこみたい

    お疲れ様です。 いつもお世話になっております。 現在PHP+MySQLで、名刺の管理ソフトを社内向けに作っています。 名刺の画像もレコードとしてくっつけるため、BLOBでデータを持っています。 一件一件のデータのインサートはできるのですが、CSVでのインサートの仕様を今検討していまして、皆様のお力を借りたく思います。 よろしくお願いします。 仕様 ・名刺画像はBLOBでDBにインサートする ・データはCSVであげる 対応検討 ・CSVでバイナリを扱える方法を探す  →一枚一枚バイナリに変換→CSVなので、手間な上に扱いにくい ・パスだけCSVに指定、その後パスをさらって画像だけPHPでバイナリ化、インサート  →パスからPHPでアップ処理ができるのか今のところ不明 ・CSVにファイル名だけ記載してもらい、CSV+画像をzipしてもらってアップ。execで解凍し、バイナリ化し、インサート  →外部コマンドの許可が必要。 本当は・・・ ・ファイルDIRを作ってファイルを置き、CSVにはパスだけ記載。  →一番楽だが今回は対象外。 てなところなんです 何かいい案はないでしょうか。

    • ベストアンサー
    • PHP
  • 画像(bmp等)の保存形式について

    画像(bmp等)の保存形式について 画像の保存のフォーマットについて質問です。 bmpの形式についてのwebページをみてみたんですが、 structを書いてメンバをかいていたりするんですが、 bmpのファイルをテキストエディタでみてみてもうまくみれないし、 やっぱりバイナリエディタでみると数字の羅列なんですが、 実際に作る場合にはstructとかを書いた後に使うコンパイラみたいなものがあるんでしょうか? struct等C言語のプログラミングの知識はあります。 よろしくお願いします。

  • DBに格納された画像データを縮小して表示したい

    PHP5+MySQL5です。 DB内のBLOBカラムに、Base64エンコードされた画像データが格納されています。 これを、サムネイル用に縮小して表示したいのですが、widthとheightで小さくするのではなく、ファイルサイズも小さくしてブラウザに渡したいと考えています。 (小さくした画像は保存しません) そこで、DBから取得した画像データを「imagecopyresampled」で再サンプリングしつつ小さくしたいと思いましたが、画面には何も表示されませんでした。 以下、ソースを簡潔に記載します。 $db_img = "DBから画像データを取得"; //600x600の画像 $old_img = base64_decode($db_img); $new_img = imagecreatetruecolor(200,200); //200x200のサムネイル画像を作成 $thumbnail = imagecopyresampled($new_img,$db_img,0,0,0,0,200,200,600,600); print $thumbnail; $old_imgの処理が間違っているのだろうと思うのですが、どのように処理すればいいのかわかりませんでした。 この場合、どのように処理すればいいのか教えていただけないでしょうか? 宜しくお願いします。

    • 締切済み
    • PHP
  • データベースから検索結果に画像表示

    mysql の画像データを表示。 phpmyadminでBOLBでデスクトップ上の画像をデータベースに保存し、phpで<?php print"<td>{$row['gazou']}</td>"; ?>で呼び出しますが、酷いバグになります。宜しければ正しいやり方教えてください。

    • 締切済み
    • PHP
  • mysqlのblob型の画像表示について

    テーブルの項目にblob型を作成し、 phpでテーブルから取得した画像を画面に表示させたいのですが、 以下のように表示させることは可能でしょうか? test.php ---------- ここから画面 ---------------------------------------- 取得したblob型の画像その1.jpg 取得したblob型の画像その2.gif 取得したblob型の画像その3.png それぞれの画像の説明 ---------- ここまで画面 ---------------------------------------- テーブルへのデータ挿入はphpMyAdminから挿入しています。 header('Content-type: image/jpeg'); echo SQLで取得した値; のようにすればjpg画像は表示できましたが、gif画像とpng画像は表示できませんでした。 また、jpg画像のみを表示させることは出来ましたが文章を表示させることはできませんでした。 上記のように一つのphpファイルで複数表示させるのはできないのでしょうか?

    • ベストアンサー
    • PHP
  • DBに格納された画像データを縮小して表示したい

    PHP5+MySQL5です。 DB内のBLOBカラムに、Base64エンコードされた画像データが格納されています。 これを、サムネイル用に縮小して表示したいのですが、widthとheightで見た目だけを小さくするのではなく、ファイルサイズも小さくしてブラウザに渡したいと考えています。 (小さくした画像は保存しません) そこで、DBから取得した画像データを「imagecopyresampled」で再サンプリングしつつ小さくしたいと思いましたが、画面には何も表示されませんでした。 以下、ソースを簡潔に記載します。 $db_img = "DBから画像データを取得"; //600x600の画像 //Base64デコード $old_img = base64_decode($db_img); //200x200のサムネイル画像を作成 $new_img = imagecreatetruecolor(200,200); //再サンプリング・縮小(600x600→200x200) $thumbnail = imagecopyresampled($new_img, $old_img, 0, 0, 0, 0, 200, 200, 600, 600); //画面出力 print $thumbnail; この場合、どのように処理すればいいのか教えていただけないでしょうか? 宜しくお願いします。

    • 締切済み
    • PHP
  • 画像保存について・・・。

    名前をつけて画像を保存をクリックして、画像を保存しようとすると、昨日までJPEGで保存できたのに、今日しようとすると、BMPでしか保存ができません。 どのページの画像でもだめでした。 再起動してもだめでした。 ファイルの種類をクリックをしても、ビットマップしか表示されません。 BMPで保存して、JPEGに変換すればいいことなのですが、とても面倒です。 名前も新しくつけなければならないですし・・・。 困っています。

  • 画像が保存できない

    欲しい画像の上にカーソールを持っていき、右クリック、名前をつけて画像を保存  ここまでは正常なんです。問題はここからです。  欲しい画像の形式がgif や jpeg (プロパティーでみるとちゃんとgifやjpegって載ってます)でも何故か保存する時にファイルの種類ってところにbmpしか表示されなくてbmpでしか保存できない時がかなりあります。 気が付いたら直ってたり おかしかったり ・・・ これの繰り返しで困ってます。 どうしたらいいのでしょうか?教えてください。お願いします。

  • ホームページビルダー 画像等の保存について

    基本的な事ですが。 ビルダー13を使っています。 画像、ロゴなどのデーターを保存するときに、「gazou」「img」などのファイルを作り、分類しています。 ページを作り、それらの画像などを保存するとき、「素材ファイルをコピーして保存」のウィンドウで保存場所を参照から、選びます。 その後、保存をクリックします。 その画像を「gazou」ファイルにコピーしたかったら、保存場所にコピーするのチェックを外せば、いいのでしょうか。 いつも、思ったファイルに保存できずに、ホームページのデーターのファイル(一番大きいファイル。表現がうまく言えずにすいません)保存されます。ですから、その画像をまた「gazou」のファイルに移すという事をしているのですが。 うまく、画像や写真ロゴのファイル整理が上手く出来ずに困っています。この説明で、分かっていただけるでしょうか。 宜しくお願いいたします。

専門家に質問してみよう