Изображение не сохраняется на устройстве Palm - PullRequest
1 голос
/ 07 мая 2011

Обновлено: 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);
    }
});

Сохраненная версия изображения имеет совершенно разные значения пикселей.

EDIT

Я пришел к выводу, что приведенные выше данные изображения не верны.Я использую библиотеку 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 Ответ

0 голосов
/ 14 августа 2012

libpng.js поддерживает только 256 цветных изображений, так что это может быть проблемой.Существуют другие утилиты кодирования base64 , которые могут работать как положено.

...