javascript - 使 HTML5 FileReader 处理 heic 文件

标签 javascript html image filereader heic

当通过 FileReader api 从输入元素读取文件时,它可以工作,但我的 android 设备也允许发送文件,而且它似乎无论如何都发送 heic 文件,这会导致控制台中没有任何错误的空图像。直接从相机获取图像时,方向也是错误的。我刚刚找到要实现的重型库,我正在寻找更智能的解决方案。

JavaScript

function previewFile( e ) {
    var preview = document.getElementById('usersProfilePicture');
    var file    = e.files[0];
    var reader  = new FileReader();

    reader.onloadend = function () {
        preview.src = reader.result;
    }
    if (file) {
        reader.readAsDataURL(file);
    } else {
        preview.src = "";
    }
}

HTML5
<form>
    <label>
        <input id="uploadProfilePicture" name=file type=file accept="image/jpg, image/jpeg, image/png, image/gif, image/bmp">
    </label>
</form>

根本没有错误消息。无论我设置什么接受属性,桌面和安卓上的 Firefox、Chrome 都允许 .heic 文件。

最糟糕的解决方案:拒绝接受 .heic 文件
最佳解决方案:让 fileReader 使用 .heic 文件。
在解决方案之间:检测 heic 并将其转换为 jpeg,客户端。

最佳答案

通过使用库 heic2any,我现在有一个解决此问题的方法

(https://github.com/alexcorvi/heic2any)

检查输入的文件是否为 .heic,然后像这样使用库:

heic2any({
        // required: the HEIF blob file
        blob: file,
        // (optional) MIME type of the target file
        // it can be "image/jpeg", "image/png" or "image/gif"
        // defaults to "image/png"
        toType: "image/jpeg",
        // conversion quality
        // a number ranging from 0 to 1
        quality: 0.5
    })

我将此调用包装在一个 promise 中,然后将结果传递给文件阅读器:
// uploadHEIC is a wrapper for heic2any
uploadHEIC(heicFile).then(function (heicToJpgResult) {
    var reader = new Filereader();
    reader.onload = function () {
    // Do what you want to file
    }
    reader.readAsArrayBuffer(heicToJpgResult);
}

关于javascript - 使 HTML5 FileReader 处理 heic 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57127365/

相关文章:

javascript - 我如何计算固定位置。叠加在页面上?

javascript - 是否可以在选项卡内创建 firefox 插件 ui?

javascript - react : why is getDefaultProps a method while propTypes is a plain object?

javascript - 内联表在 IE 上无法正常工作

Java 9 hdpi 显示支持 - 多分辨率图像 - Windows 中的命名约定和加载

image - 使用代码将 Google Apps 脚本函数分配给 Google 表格图像

javascript - 使用表单 : Executing the ID then the php action

javascript - 使用javascript制作一种弹出窗口

javascript - github 会支持常见的 jekyll 插件吗?

c++ - Apache Kafka 可以与 C++ 一起使用吗?