2015-03-25 78 views
0

我正在研究一個HTML小部件,該小部件將嵌入到iPad的iBooks Author中的iBook中。壓縮並保存捕獲到localStorage的圖像

我有一個簡單的按鈕來觸發iPad上的圖像捕捉,所有工作正常。

<div id="zeroDiv"> 
<input type="file" id="getPic" accept="image/*"> 
</div> 
<div id="picWrapper"> 
<img id="image"> 
<div id="buttDiv"> 
    <button id="picButt"><span class="buttText">Insert image</span> 

    </button> 
</div> 
</div> 

$('#picButt').click(function() { 
$('#getPic').trigger('click'); 
}); 

$(document).ready(function() { 
$("#getPic").on("change", gotPic); 
$("#image").load(); 
}); 

function gotPic(event) { 
$("#image").attr("src", URL.createObjectURL(event.target.files[0])); 
$("#picButt span").text("Change image"); 
} 

小提琴在https://jsfiddle.net/mikawaben/cq2yrh2z/

然而,當用戶移動過一個頁面和返回時,圖像被丟失的頁面重新加載。我需要將圖像存儲在localStorage中。

我知道http://jsfiddle.net/VXdkC/2/(本網站上的穆薩提供)提供的代碼可能是我的關鍵。

$('#addNote').click(function() { 
var Title = $('#title').val(); 
var Message = $('#message').val(); 
var pic = document.getElementById("file").files[0]; 
var imgUrl; 
var reader = new FileReader(); 
reader.onload = function(e) { 
    var imgURL = reader.result; 
    $('#notes').prepend("<div class='entry'><h1>" + Title + "</h1></p>"+ "<p>" + Message + "<img src=" + imgURL + "></p> </div>"); 

    var notes = $('#notes').html(); 
    localStorage.setItem('notes', notes); 
    saveDataToLocalStorage(imgURL); 
} 
reader.readAsDataURL(pic); 
return false; 
}); 

//show content of notes in storage 
$('#notes').html(localStorage.getItem('notes')); 
return false; 

但是,儘管它搞了幾個小時,但我沒有得到它的工作。任何人都可以借用這個嗎?

我也關心壓縮。我是否需要使用base64編碼或某些東西,以防圖像大小導致整個事件崩潰?

+0

什麼是'saveDataToLocalStorage'和你在哪裏嘗試重新顯示在返回的形象呢? – Musa 2015-03-25 16:58:32

+0

Hi Musa ...我想在picButt按鈕上方顯示圖像。我已經在我的小提琴中工作了。由於'saveDataToLocalStorage'是我從你的小提琴引用的代碼的一部分,我希望你能告訴我它是什麼!代碼運行時,我需要先檢查本地存儲器中的圖像,如果有,則將其顯示在按鈕上方。如果不是,則捕獲圖像時不僅在頁面上顯示該圖像,而且還將其保存到本地存儲。謝謝! – 2015-03-26 02:52:19

+0

上方的'picButt'按鈕=在'picWrapper' div – 2015-03-26 03:30:21

回答

1

只需檢查是否有保存在頁面上的圖像並顯示它。然後選擇時保存圖像。

$(document).ready(function() { 
    $("#getPic").on("change", gotPic); 
    if (localStorage['url']){ 
     $("#image").attr("src", localStorage['url']); 
     $("#picButt span").text("Change image"); 
    }  
}); 

function gotPic(event) { 
    var reader = new FileReader(); 
    reader.onload = function(){ 
     $("#image").attr("src", this.result); 
     localStorage['url'] = this.result; 
     $("#picButt span").text("Change image"); 
    } 
    reader.readAsDataURL(event.target.files[0]); 
} 

https://jsfiddle.net/cq2yrh2z/1/

+0

太棒了!非常感謝。這將圖像存儲到localStorage並完美地檢索它。 – 2015-03-26 04:49:38

+0

但是,爲了防止此代碼的每個實例使用相同的圖像,我計劃爲localStorage添加一個全局變量的唯一密鑰,因此可以使用localStorage ['url'+ uniqueID ]' 雖然我這樣做,我能夠讓每個實例成功地存儲不同的圖像,但最後檢索的圖像始終來自我的照片庫。相機捕獲的圖像只有持續到頁面重新加載,然後最後一個照片庫添加圖像加載代替。有任何想法嗎? – 2015-03-26 04:56:38

+0

Idk,聽起來像是一個關閉問題。你應該問一個新的問題。 – Musa 2015-03-26 05:11:14