Node.js 未在Palm设备上保存图像

Node.js 未在Palm设备上保存图像,node.js,png,base64,webos,data-uri,Node.js,Png,Base64,Webos,Data Uri,更新:版本2.1 当我将此编码图像数据附加到图像源时,它会生成正确的数据图像,如下所示: var img = new Image(); img.src= data var data = "data:image/png;base64,iVBORw0KGgoAAAANSUh EUgAAAJYAAACmCAIAAAC3GeEYAAEkgklEQVR4AQD9/wIAADt8Fj5/GUSA IESAIEN/GUd/H0V+IEaEIE WFHUOEHEqJIE2KIk2KI1GQKFSQLFaQ

更新:版本2.1

当我将此编码图像数据附加到图像源时,它会生成正确的数据图像,如下所示:

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"
我正在尝试使用自定义服务保存图像,但它没有保存正确的图像。以下是保存图像的代码:

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图像数据。链接是

这是
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() ;
    }
EditorAssistant.prototype.getDataURL=函数(宽度、高度、像素阵列){
var p=new PNGlib(高度、宽度、256);//Construcor获取高度、重量和颜色深度。
var背景=p.color(0,0,0,0);
var k=0;

对于(var j=0;jlibpng.js仅支持256色图像,因此这可能是问题所在。还有其他一些可能会像预期的那样工作。

我注意到,您已经多次问了几乎相同的问题,每次都只给了我们多一点信息。仅供参考,在堆栈溢出时,通常最好使用更新的信息编辑您的问题,而不是呃,这比问一个新的问题本质上是否相同更容易帮助你,因为其他人可以更容易地把你自己解决问题时收集到的信息放在一起。thnks Gordon..我会记住它。。。