SQLiteで画像の格納

このQ&Aのポイント
  • Visual Studio 11を使用してC#のWindowsアプリケーションを作成中です。
  • SQLiteのラッパークラスを使用してテキストの保存や削除はできますが、画像の保存方法がわかりません。
  • 画像をバイナリ化してSQLiteへの挿入を試みましたがエラーが発生します。
回答を見る
  • ベストアンサー

SQLiteで画像の格納

Visual Studio 11でC#でWindows Applicationをつくろうと素人が奮闘しています。 SQLiteで画像(どの画像も6kb前後)を保存したいのですが、どうしてもわかりません。 下記のSQLiteのラッパークラスを使わせていただいて、テキストを保存したり削除したりすることはできるようになりました。 http://jikkenjo.net/391.html http://jikkenjo.net/567.html できれば上記のラッパークラスを活かす形でいきたいのですけども、教えていただけないでしょうか。 次のようにテーブルを作成し SQLiteConnector.Instance.ExecuteNonQuery("create table book(id integer primary key not null, title text, author text, image blob)"); 画像を保存するにはまずデータをバイナリ化するということで、 Image img = 縮小したりクリッピングしたりした画像データ; ImageConverter imgconv = new ImageConverter(); byte[] bi = (byte[])imgconv.ConvertTo(img, typeof(byte[])); とし、下記のようにInsertすればいけると思ったのですが SQLiteConnector.Instance.ExecuteNonQuery("insert into book(title, authorm image) values(?,?,?)", "book title", "book author", bi); 「渡された引数の型が処理できない形式です」とエラーが出てしまいます。 よろしくお願いいたします。

  • ONEONE
  • お礼率68% (834/1223)

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

  • ベストアンサー
noname#147388
noname#147388
回答No.1

getDbType を byte[] 型だと blobになるようにしてください。

ONEONE
質問者

お礼

ありがとうございます。なるほどそこでしたか! else if (unknown is Byte[]) { //バイト return DbType.Binary; } を追加することでいけたと思います。 それで、すいません、取り出しにはどうしたらいいのでしょうか。 string型なら、例にあるように出来ますが、byte型だとわかりません。 titleが"booktitle"がある行のimage列のセルを取り出したく System.Data.SQLiteManager.SQLiteConnector.Result result = SQLiteConnector.Instance.ExecuteReader("select book.image from book where title = ?", "booktitle"); とし、 byte[] imgbyte = null;とするまでは合っていると思うのですが。 取り出せたらImageに変換してpictureboxに表示(確認のため)できると思うのですが。 よろしければ再度よろしくお願いいたします。

関連するQ&A

  • 画像サイズの指定方法

    $img = 'image.png'; open(IMG,"$img"); $byte = -s $img; print "Content-type: image/gif\n"; print "Content-length: $byte\n\n"; print <IMG>; close(IMG); exit; 上記のように画像を表示させているのですが、縦横サイズは どのように調整すればよろしいのでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • HP作成をしています。自作画像を使用したいのですが

    自作画像をペイントで作成しました。 保存の際にファイルの種類をgifを選びimgと名前を付けたフォルダにtitle.gifとして保存しました。 その画像をindex.htmlに <CENTER> <IMG SRC="img/title.gif" WIDTH="530" HEIGHT="270" alt="タイトルイメージ"> </CENTER> と記述しましたがブラウザで見ると530×270の枠と罰マークにタイトルイメージと記載されているだけです MS Officeが入っているのであればペイントで保存ファイルの種類を選ぶだけで特にツールを使用して拡張子を変更しなくても良いとの事でしたが他にも問題点がありますか? サイズが大きすぎる(900kb)のではと小さいサイズ(4kb)ほどのものも作成しましたが同様でした ブログサービスで他の画像を拝借する場合は一度画像をアップロードしてURLを取得してから<img src="画像URL">の形で表示させますが <img src="フォルダ/ファイル">の形でも画像はアップロードしなければ使用できないのでしょうか?

  • phpの画像表示

    sqliteで質問があります。 sqliteのdbファイルにimageというカラムを作りパスを入力してサーバーにアップしました。例:hoge/hoge.jpg そこで質問です。 html(php)側には何と書けば画像は表示されますか? html側は $row という変数に格納しwhileでカラム分だけループさせています。 画像は &row[6] に当たります。 やってみたこと→'<img src="$row[6]">' こうしましたが、表示されませんでした。

    • ベストアンサー
    • PHP
  • sqlite結果の非表示

    sqliteで質問があります。humanテーブルにid,name,sex,age,prefecture,country,image, のカラムがあるのですが、id,name ,sexはデータベース&webページ上ではいるので残したいのですが 表示をしたくありません。 どうすればユーザーに見えないようにできますか? 以下、htmlコードです <?php // 変数の初期化 $db = null; $sql = null; $res = null; $row = null; $db = new SQLite3("test.db"); // データの取得 $sql = 'SELECT * FROM human where country="japan"'; $res = $db->query($sql); ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=320, height=480, initial-scale=1.0, minimum-scale=1.0, maximum-scale=2.0, user-scalable=yes" /> <title>SQLite テスト</title> </head> <body> <h1>php の練習</h1> <div class="human"> <ul><?php while( $row = $res->fetchArray() ) { echo '<a href="https://yahoo.co.jp" target=_brank>'. '<li>' . $row[0] . '<span>' , $row[1].'<span>', $row[2].'<span>',$row[3].'<span>', $row[4]. '<span>', $row[5].'<span>' ,' $row[6]. '</li>'. '</a>' ; } ?></ul> </div> </body> </html> 以下、humanテーブルです BEGIN TRANSACTION; CREATE TABLE IF NOT EXISTS "human" ( "id" INTEGER NOT NULL, "name" TEXT NOT NULL, "sex" TEXT NOT NULL, "age" INTEGER NOT NULL, "prefecture" TEXT, "country" TEXT NOT NULL, "image" TEXT, PRIMARY KEY("id") ); INSERT INTO "human" VALUES (1,'中村静香','男',48,'千葉','japan','image/t1.jpg'); INSERT INTO "human" VALUES (2,'中村ゆり','女',45,'埼玉','japan','image/t2.jpg'); INSERT INTO "human" VALUES (3,'本田翼','女',22,'','japan','image/t3.jpg '); INSERT INTO "human" VALUES (4,'本田望結','男',16,'東京','japan',NULL); INSERT INTO "human" VALUES (5,'綾瀬はるか','女',34,'東京','japan',NULL); INSERT INTO "human" VALUES (6,'中村アン','男',38,'','usa',NULL); INSERT INTO "human" VALUES (7,'広瀬アリス','女',26,'東京','japan',NULL); INSERT INTO "human" VALUES (8,'有村架純','男',31,NULL,'usa',NULL); INSERT INTO "human" VALUES (9,'長澤まさみ','女',29,NULL,'uk',NULL); INSERT INTO "human" VALUES (10,'有村藍里','男',18,'埼玉','japan',NULL); COMMIT;

    • ベストアンサー
    • PHP
  • FileUploadを利用しての画像保存(再)

    ASP.NET、フレームワークは.net4.0環境です。 言語はc sharpです。 FileUploadコンロールを使って、POSTした画像を保存するような ものを作りたいと考えています。 想定は4MB以内のファイルなのですが、4MB以内でも、色数が多いと うまくいかないようで悩んでいます。 以下のようなコードを書きました。 -- HttpPostedFile imageData = FileUpload1.PostedFile; //投稿ファイル byte[] buffer = new byte[imageData.InputStream.Length]; imageData.InputStream.Read(buffer, 0, Convert.ToInt32(imageData.InputStream.Length)); ImageConverter ImgConv = new ImageConverter(); Bitmap bitmapSave = (System.Drawing.Bitmap)ImgConv.ConvertFrom(buffer); bitmapSave.Save(temp_path, ImageFormat.Jpeg); //temp_pathには保存先のパスが入っています。 -- bitmapSave.Saveで、以下のようなエラーが出てしまいます。 -- ExternalExceptionがキャッチされました。 GDI+ で汎用エラーが発生しました。 -- 再現性がイマイチで、色数が少なければうまくいくようです。 ただ、たとえば以下のような色数の多い広告画像だとエラーに なってしまいます。 http://www.tsukumo.co.jp/shop/tirashi/akiba_02.html 画像のwidth、heightを見たいのと、pngやgifであってもjpegに 変換したいので、bitmap.Saveを使う形式でうまく保存できるように 直したいのですが、ご教授いただけないでしょうか。

  • 画像 重ねる

    htmlソース <div id="title"> <a href="index.html"><img src="img/logo.png"></a> </div> cssソース #title{ background-image: url(img.jpg); } cssソースに記述してある画像が、htmlソースのリンク付き画像の背景に表示されません。 対処方法をご教示いただけないでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • CSS
  • mysqlに保存した画像を表示したい

    フォームからmysqlに画像(jpg形式)を保存しました。 カラム名はmain_imgでblob型です。 流れとしては 1:入力フォーム // イメージ取得 $image = file_get_contents($_FILES['image']['tmp_name']); // 取得したイメージをセッションに代入 $_SESSION['regist']['image'] = $image; 2:確認ページ 特になにもせず 3:登録完了ページ $_SESSION['regist']['image']をmysql_real_escape_stringし 変数名を$imageに変更。 カラム名main_imgに$imageをINSERT この段階でphpmyadminを見るとカラム名main_imgには [BLOB - 4.3 KiB]となっております。 次にmysqlに保存した画像を表示させたいと思い ---view.php--- $res =& $mdb2->query('SELECT * FROM products'); while ($row = $res->fetchRow()) { $img_list['main_img'] = $row['main_img']; } $mdb2->disconnect(); header('Content-type: image/jpeg'); echo $img_list['main_img']; ---view.html--- <img src="view.php?id=2" /> としたのですがなぜか画像が表示されません。 header('Content-type: image/jpeg');をコメントアウトすると 意味不明な文字列?が表示されます。 view.phpにアクセスするとhttp://~~/view.phpとurlが 画像として表示されFireFoxでブラウザを更新すると一瞬だけ 『画像ファイル "http://~~/view.php" は壊れているため、表示できませんでした。』 と表示されます。 ie,safariでも試しましたが画像は表示されませんでした。 調べてみたのですが同じような事例がみつからなかったのですが 解決するにはどうすればいいものでしょうか?

    • ベストアンサー
    • PHP
  • SQLiteで作成したDBはどこに保存されますか?

    お世話になります。 【前提】 現在、勉強を兼ねてAndroid環境でアプリを開発しています。 単語カードをアプリ上で実現できればと考えています。 【問題】 SQLiteでDBを作成し、そこにデータをインポートする方法が分かりません。 単語をあらかじめDBに登録しておき、それをアプリ側で参照したいのですが、 いろいろなサイトを見ても、アプリ側からデータベースを作成したり、 SQLでインサートをかけたりする方法が紹介されているばかりで、 要領がわからないのです。。 【質問】 タイトルにもあるように、そもそもSQLiteで作成したDBの実態はどこに保存されて いるのでしょうか? また、SQLServerの様に、GUIからDBを作成、データをインポートし、それを アプリから開いて参照する方法が記載されたWEBサイト、 またはとっかかりとなりそうな知識をご教授頂けないでしょうか? 以上です。失礼いたします。

  • DBに格納されたバイナリデータを画像表示する方法

    PHP初心者ですみません。PHP、PSQLでDBにアップロードされた画像データ(バイナリデータ)をWEB上で例<img src=image.php>画像表示したいのですが、画像が×表示になってしまいます。格納時にデータが間違っているのか?それとも表示方法が間違っているのかわかりません。どなたか助けてください。 【アップファイル格納時スクリプト】 //fopenして変数に保存 $fp = fopen($_FILES["upfile"]["tmp_name"],"r"); $imagedata = fread($fp,filesize($_FILES["upfile"]["tmp_name"])); fclose($fp); //バイナリデータをエスケープ $imagedata = pg_escape_bytea($imagedata); $filename = $_FILES["upfile"]["name"]; $sql_g = "update img set img_data='$imagedata'"; $conn_g = connect(); $result_g = pg_query($conn_g,$sql_g); pg_close($conn_g); } 【画像表示用ファイルスクリプトimage.php】 $sql_i = "select img_data from img"; $conn_i = connect(); $res_i = pg_query($conn_i,$sql_i); $num_i = pg_num_rows($res_i); $img_data = pg_fetch_result($res_i,0,"img_data"); header('Content-type: image/gif'); header('Content-Disposition: inline; filename=' . $img_data); print"${img_data}"; 【画像表示部分スクリプト】 <img src="http://●●●●/●●/image.php" alt="イメージ" width="500" height="100"> こんな感じなのですが、どこがどう違うのか何度も試してやっとここまできたのですが、答えがでません。お解りの方いらっしゃいましたらご指摘をどうかよろしくお願いいたします。

  • [au携帯] DBに格納されたバイナリ形式の画像を表示する方法

    [au携帯] DBに格納されたバイナリ形式の画像を表示する方法 データベース(PostgreSQL)に格納されたバイナリデータの画像をPHPを使用して元に戻し表示しようとしています。 携帯用ホームページを作成しているのですが、ドコモだとちゃんと表示されるのにAUでアクセスすると画像がバッテンになってしまって表示できません。 下記のようにPHPを使って画像を表示しているのですが何処が間違っているのでしょうか。 画像の表示用 img.php <?php //DBから必要なデータを取得します。 // $imag_data ------- バイナリ形式の画像データ // $image_file_type - 画像保存時に下のようにして取得した値 // list($width,$height,$image_file_type)=getimagesize($imgurl); // $img_name -------- 画像の名前 $imag_data = pg_unescape_bytea($imag_data); header("Content-type: " .$image_file_type); header('Content-Disposition: inline; filename="' .$img_name.'"'); print($imag_data); exit(); ?> img.phpに直接アクセスするのと、<img src='http://…img.php' />で表示してみたのですが、ドコモだと2通りともできるのに、AUだと「リクエストされたページは表示できません。」と出てしまい、困っています。 どなたか、ご教授くださいますようよろしくお願いいたします。

    • 締切済み
    • PHP

専門家に質問してみよう