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

标签 node.js png base64 webos data-uri

更新:webOS版本 2.1...

这个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 库生成 Canvas 像素数组的 Base64 图像数据。链接为http://www.xarg.org/2010/03/generate-client-side-png-files-using-javascript/ .

这是 canvas.toDataURL(); 的替代方案。 webOS 不支持 toDataURL,所以我必须使用一个库。

这是我与该库一起使用的代码,用于将 Canvas 图像数据作为像素数组进行操作:

    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() ;
    }

这个库可以工作吗?我哪里做错了?

最佳答案

libpng.js 仅支持 256 色图像,因此这可能是问题所在。还有其他base64 encoding utilities这可能会按预期工作。

关于node.js - 图像未保存在 Palm 设备上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5923305/

相关文章:

css - Django 本地站点设置不适用于 styles.css 和 .png 文件

c - libpng是否允许将整个图像读入内存

php - 在将图像发送到服务器之前压缩图像

javascript - 使用 CryptoJS 解码 Base64 字符串

go - 如何将 Base64 编码的 p12 转换为 tls.Certificate

javascript - 异步函数中的 SetTimeout 和 setInterval

node.js - `npm install` 通过网络安装我项目的所有依赖项,即使它们已经安装或从缓存中可用

icons - Ico 格式 - 32 位 PNG 与 32 位 BMP 与 24 位 BMP

json - Node.js:如何交换 JSON 对象

css - Webpack --watch 不会触发特定目录中的 CSS 文件