编写二进制数据html5 FileWriter

时间:2013-06-12 19:56:52

标签: javascript html5 image jpeg filewriter

我在应用程序中使用webgl并向屏幕外渲染目标(帧缓冲区)渲染内容,然后执行readPixels。获取像素数据后,我使用javascript jpeg编码器将其转换为jpeg:

Javascript Jpeg Encoder

我得到了想要写入本地文件系统的原始二进制jpeg数据。这是我用于编写的代码:

root.getFile(filename, {create: true}, function(fileEntry)
{
    fileEntry.createWriter(function(writer)
    {
        writer.onwriteend = function(e)
        {
            System.debug("Write done");
        };
        writer.onerror = function(e)
        {
            System.error(e);
        }
        var data = new Blob(jpegData, { type: "image/jpeg" });
        writer.write(data);
        jpegData = null;
        pixels = null;
        uoozo.core.write[filename] = false;
    });
},
function(e)
{
    System.error(e);
});

然而,我得到了奇怪的结果。当我将它放到图像元素时,jpegData很好,但是当我创建blob时,例如jpegData的大小为3200字节,但创建的Blob始终为4818字节,FileWriter在写入操作后也返回相同的位置。创建的jpeg显然是错误的,不会打开。我不明白如何让FileWriter只是将darn二进制数据写入文件而不试图聪明(或愚蠢)。

有人可以帮我吗?谢谢。

1 个答案:

答案 0 :(得分:0)

所以,即使转换为Uint8Array,我仍然没有得到我需要的结果。在看了dataURLToBlob方法后,我突然意识到我正在将数组对象传递给Blob构造函数,如:

var blob = new Blob(jpegData_ConvertTo_Uint8Array, "image/jpeg");

这不是正确的,显然为了让Blob工作正常,我需要传递一个数组:

var blob = new Blob([jpegData_ConvertTo_Uint8Array], "image/jpeg");

这完美地运行并将我的jpeg写入文件,随后调用FileWriter。写(blob)函数。谢谢dandavis!