【问题标题】:Writing binary data html5 FileWriter编写二进制数据 html5 FileWriter
【发布时间】:2013-06-09 01:51:10
【问题描述】:

我在应用程序中使用 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 将该死的二进制数据写入文件而不试图变得聪明(或愚蠢)。

有人可以帮助我吗?谢谢你。

【问题讨论】:

  • jpegData是什么格式,数组,字符串,base64?
  • jpegData 是一个二进制数据数组。该库也可以提供 base64 字符串,但结果相同。我也尝试过为 blob 指定不同的类型,例如“plain/text”、“image/jpg”甚至是空字符串。一切都给出相同的结果。
  • 二进制是整数还是原始字符串?
  • 原始字符串字符
  • 好吧,这可能是 unicode 问题,您必须将字符转换为 int 数组以提供给 Blob。请参阅此处以获取 Blob 的 dataURL 示例以获取一些易于调整的代码(仅在 base64 解码后拾取)。

标签: javascript html image jpeg filewriter


【解决方案1】:

所以即使在转换为 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)函数。谢谢丹达维斯!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 2013-12-20
    相关资源
    最近更新 更多