2016-04-07 18 views
0

これまでのところ私は、ボタンをクリックするとカメラが開かれ、画像が撮られたときにページに表示される、自分のアプリのためにカメラAPIを動作させました。キャプチャした画像をSQliteデータベースに保存していますか? (Cordova)

私の次のステップは、イメージをテーブル内のsqliteデータベースに保存することです。データベースの作成には問題はありません。すでに他のテーブルをいくつか使用していますので、データベースにイメージを格納する方法を見つけるだけです。

誰か助けてもらえますか?

カメラ機能:

document.addEventListener("deviceready", onDeviceReady, false); 
function onDeviceReady() { 
    document.getElementById("btnCamera").onclick = function() { 
    navigator.camera.getPicture(function (imageUri) { 
    var lastPhotoContainer = document.getElementById("lastPhoto"); 
    alert("Hot stuff!"); 
    lastPhotoContainer.innerHTML = "<img src='" + imageUri + "' style='width: 75%;' />"; 
    }, null, null); 
      }; 
      } 

HTML:

<div data-role="page" id="page7" data-theme="d"> 
    <div data-role="header"> 
     <a href="#page1" class="ui-btn ui-icon-home ui-btn-icon-left">Sign ut</a> 
     <h1>SoccerMeet</h1> 
    </div> 
    <div data-role="main" class="ui-content"> 
     <input id="btnCamera" type="button" value="Camera photo" /> 
     <p id="lastPhoto"></p> 
    </div> 

    <div data-role="footer"> 
     <h2>&copy; Gallery</h2> 
    </div> 
</div> 

更新されたスクリプト:

document.addEventListener("deviceready", onDeviceReady, false); 
    var db; 

    function onDeviceReady() { 
    db = window.openDatabase("SoccerEarth", "2.0", "SoccerEarthDB", 2 * 1024 * 1024); 
    db.transaction(function(tx) { 
     tx.executeSql('CREATE TABLE IF NOT EXISTS Gallery (id INTEGER PRIMARY KEY, myImage BLOB)'); 
    }, errorE, successS); 
    } 

    function successS() { 
    alert("Camera database ready!"); 
    document.getElementById("btnCamera").onclick = function() { 
     navigator.camera.getPicture(onSuccess, onFail, { 
     quality: 50, 
     destinationType: Camera.DestinationType.DATA_URL 
     }); 
    }; 
    } 

    function onSuccess(tx, imageData) { 
    alert("Camera test 1"); 
    var image = document.getElementById("lastPhoto"); 
    image.src = "data:image/jpeg;base64," + imageData; 
    base64imageData = imageData; 
    var _Query3 = ("INSERT INTO Gallery(myImage) values ('" + base64imageData + "')"); 
    alert(_Query3); 
    tx.executeSql(_Query3); 
    } 
    /* function successCamera() { 
    navigator.notification.alert("Image has been stored", null, "Information", "ok"); 
     $(":mobile-pagecontainer").pagecontainer("change", "#page4"); 
    } */ 

    function onFail(message) { 
    alert('Failed because: ' + message); 
    } 

    function errorE(err) { 
    alert("Error processing SQL: " + err.code); 
    } 
+0

あなたがBASE64に画像を変換し、それを保存します。 – IamKarim1992

+0

@ IamKarim1992は何らかの種類のテンプレートを提供できれば素晴らしいでしょうか? – Mahdi

+0

@Mahdi:あなたの質問に対する解決策はありますか?同様のシナリオでも問題に直面しています。 – Mrunal

答えて

1
document.addEventListener("deviceready", onDeviceReady, false); 
function onDeviceReady() { 
    document.getElementById("btnCamera").onclick = function() { 
    navigator.camera.getPicture(onSuccess, onFail, { quality: 50, 
    destinationType: Camera.DestinationType.DATA_URL 
}); 
}; 
      } 
      function onSuccess(imageData){ 
      var image = document.getElementById("lastPhoto"); 
      image.src = "data:image/jpeg;base64," + imageData; 
      //the imageData is a base64 representation of the image. 
      base64imageData=imageData;// this variable is a global variable and when ever asked for u can send it to SQL Operation class for storing. 
      } 

      function onFail(message) { 
      alert('Failed because: ' + message); 
     } 
+0

ありがとう、しかし、私はまだデータベースにデータを挿入する方法を完全には認識していません。私はコードを更新して、どのように見えるかを見せてくれました。上記のように、galleryという新しいテーブルを作成する別のクエリを作成しました。 "myImage"カラムに '+ image.src + "'を挿入するexecute SQLをスローすることはできますか? – Mahdi

+0

クエリを作成し、それに.tx.executeSql(sql)を渡します。 ( "SomeID"、 "" +(base64imageData)+ "')" ....ここで、データベース書き込み関数にアクセスできるグローバル変数としてデカラルされたbase64imageDataこれはあなたが好きな場所であれ、どこにでも電話します。これは私がそれを実装したときの論理と非常に有効な答えです。それが答えとしてマークするのに役立ちます。 – IamKarim1992

+0

img.srcは成功関数に対してローカルではありませんが、base64imageDataはグローバルでuはtx.executeSqlを実行するデータにアクセスできます。 – IamKarim1992

関連する問題