2011-05-07 24 views
1

更新日期:2.1 webOS版本...圖片不保存Palm設備

base64編碼的圖像數據生成了正確的數據圖像時我將其追加到的圖像的源,例如:

var img = new Image(); 
img.src= data 

var data = "data:image/png;base64,iVBORw0KGgoAAAANSUh 
EUgAAAJYAAACmCAIAAAC3GeEYAAEkgklEQVR4AQD9/wIAADt8Fj5/GUSA IESAIEN/GUd/H0V+IEaEIE 
WFHUOEHEqJIE2KIk2KI1GQKFSQLFaQKlaOKVaQKlORLlaYLVaVKFWV KVWUKliWKFiXJlKVIliTJW2oP 
m6jOW+kPGqkPmehPWWePWagOmmjP2ykQ2ulQmylRWykQmqmP2qr QGqnP26qSGyvRmquQWyyQGquP2yu 
RHSzSHWwSXGxSGytRG+vSG6vSW2vRWquRGqtRGmsQnO1R3Gw SG+rSXavUXWwUnKqR3CuRWquP26zQ3C 
yRXK0SHG0SWupR2qoR3CuS2qrQ3CsSG6vS22pR26qSGyq RWetO22uQ2yqP22wRGetP2yyP4TEWgElAB 
UrBRYmAx05AidHBB9MCydRDylSGChWGCZUFyFLEyNK Ex5IDBtJBhc/Bx9FDBxDDh5HDyRGExs8DRs4D 
B04DRw8Exo6DxMuBw8kAhEeABIYAQ4VABAUAA0S AAwVAg8bAw0bAgwaAxAYAAULAQgQAQcQBQsPAAwQ 
AggMAwMLAQAIAAgOBAYOAAsWBg4bChMgDxUk DxcmERopEh8vFBwuExspEhcnDxUpDhcqERUnDhUnDRQ 
rDxgsERgvEx8xGQA+fxk7gxU9hBc9ghg/ gR1CgBxBhBtChRxIhyFMiyNMiyNNjiZNiypRkCpSjydRkC 
VVkSpTkihYmi9YlC9XlCxVlClYlixW lSpZlS1eli16skJnqDxppj1qpDxmpD9mpD1loj1opz9qqENvq 
Udpp0FmqD9npkFtpUVvp0ZvrUVs q0NsrEFtrURsrkBrsT9vskFvrj5srz5ssUJsrkJsrkNtr0NusEVm 
qjxrrz5ttkNquEFqtEFu" 

我試圖使用我的自定義服務保存圖像,但它不保存正確的圖像。這裏是保存圖像的Node.js代碼:

var fs = IMPORTS.require('fs'); 
var path = IMPORTS.require('path'); 
var buff = new Buffer(img.substr('data:image/png;base64,'.length), 'base64'); 
path.exists('/media/internal/wallpapers/', function(exists){ 
    if (exists) { 
     var id = fs.openSync('/media/internal/wallpapers/i.png', 'w', 666); 
     var written = fs.writeSync(id, buff,0, buff.length, 0); 
     fs.closeSync(id); 
    } 
}); 

圖像的保存的版本具有完全不同的像素值。

編輯

我纔來的,上面的圖像數據是不正確的。我正在使用PNG庫生成畫布像素數組的base64圖像數據。鏈接是http://www.xarg.org/2010/03/generate-client-side-png-files-using-javascript/

這是canvas.toDataURL();的替代方案。 webOS不支持toDataURL,所以我不得不使用庫。

這裏是代碼我有這個庫用來操縱我的畫布圖像數據的像素陣列:

EditorAssistant.prototype.getDataURL = function(width,height,pixelArray) { 
     var p = new PNGlib(height, width, 256); // Construcor takes height, weight and color-depth. 
     var background = p.color(0, 0, 0, 0); 

     var k = 0; 
     for (var j = 0; j<height; j++) { 
      for (var i =0; i<width; i++) { 
       var x =i; 
       var y =j; 
       p.buffer[p.index(x,y)] = p.color(pixelArray[k], pixelArray[k+1], pixelArray[k+2]); 
       k+=4; 
      } 
     } 
     return 'data:image/png;base64,'+p.getBase64() ; 
    } 

此庫的工作和我在哪裏做錯了?

+1

我注意到你幾次詢問幾乎相同的問題,每次給我們多一點信息。僅供參考,在Stack Overflow上,通常更好的做法是用最新的信息編輯你的問題,而不是問一個新的問題,如果它本質上是一樣的話。這使得幫助你更容易,因爲他人可以更輕鬆地將自己收集的信息放在一起,同時自己處理問題。 – 2011-05-09 22:39:31

+0

戈登..我會記住它... – 2011-05-10 06:59:54

回答

0

libpng.js只支持256色圖像,所以可能是問題所在。還有其他base64 encoding utilities可能會按預期工作。