【问题标题】:Converting image to binary array (blob) with HTML5使用 HTML5 将图像转换为二进制数组(blob)
【发布时间】:2023-12-12 13:40:01
【问题描述】:

我正在尝试使用 Chrome 和 Firefox 中的 HTML5 支持的“FileReader”和“File”API 将图像转换为二进制数组,但它似乎无法在 Chrome 上正常工作。我只有一个简单的 HTML 页面,其中有一个文件作为输入类型:

<input id="image_upload" type="file" />

从这里我使用 jQuery 来获取图像的内容,然后使用 API:File.getAsBinary() 将其转换为二进制数组。这在 Firefox 上完美运行,但在 Chrome 上却不行:

$('#image_upload').change(function() {
    var fileList = this.files;
    var file = fileList[0];
    var data =  file.getAsBinary();
            //do something with binary
});

当此方法在 Chrome 上执行时,我在控制台中收到一条错误消息:

uncaught TypeError: Object #<File> has no method 'getAsBinary'

我正在使用最新版本的谷歌浏览器,截至今天(2011-05-31)是版本:11.0.696.71,根据消息来源,这种方法应该是受最新版本的 Chrome 支持。

这似乎不起作用,所以我尝试使用FileReader API,但也没有任何运气。我尝试这样做无济于事:

$('#image_upload').change(function() {
    var fileList = this.files;
    var file = fileList[0];
    var r = new FileReader();
    r.readAsBinaryString(file);
    alert(r.result);
]);

但这只会返回任何内容,我认为这是因为 readAsBinaryString() 是一个 void 方法。我完全不知道如何让它同时适用于 Chrome 和 Firefox。我在网上搜索了无数的例子,但无济于事。我怎样才能让它工作?

【问题讨论】:

    标签: file html filereader


    【解决方案1】:

    FileReader API 是一个异步 API,因此您需要改为:

    var r = new FileReader();
    r.onload = function(){ alert(r.result); };
    r.readAsBinaryString(file);
    

    【讨论】:

    • 我们需要在变量file..image url中传递什么?
    【解决方案2】:

    我想我可以回电给自己,例如:

    create_blob(file, function(blob_string) { alert(blob_string) });
    
    function create_blob(file, callback) {
        var reader = new FileReader();
        reader.onload = function() { callback(reader.result) };
        reader.readAsDataURL(file);
    }
    

    这非常有效。完成后,我可以将 onload 函数返回的 blob 传递给我自己。

    【讨论】:

      最近更新 更多