如何使用纯 JavaScript 读取图像文件?

Posted

技术标签:

【中文标题】如何使用纯 JavaScript 读取图像文件?【英文标题】:How to read image file using plain javascript? 【发布时间】:2017-07-18 19:57:45 【问题描述】:

我是 javascript 新手,目前我的一个项目遇到问题,其中包括查看网站根文件夹中的图像。这是我当前的代码:

var reader = new FileReader();

    reader.onload = function(event)
           var dataUri = event.target.result,
               img = document.createElement("img");

               img.src =  dataUri;
               document.body.appendChild(img);
    ;

    reader.onerror = function(event)
           console.log("File could not be read: " + event.target.error.code);
    ;

reader.readAsDataURL("/uploads/extras/item_a/image1.png");

这是我的代码,它没有显示任何内容。在我的控制台中,它给了我一个错误或Uncaught TypeError: Failed to execute 'readAsDataURL' on 'FileReader': parameter 1 is not of type 'Blob'.

【问题讨论】:

控制台中显示了什么? GET data: net::ERR_INVALID_URL@NewToJS 试试/uploads/extras/item_a/image1.png ?你的文件夹结构是什么样的? 控制台错误是说readerurl 不满意。尝试对文件的整个路径(即http://example.com/uploads/extras/item_a/image1.png)进行硬编码以排除其他问题。 我得到了Failed to load resource: net::ERR_INVALID_URL@0019 【参考方案1】:

您似乎正在尝试加载用于 Javascript 的图像,而不是将其放入您的 html 中。您可以通过在 Javascript 中创建图像元素并设置它的源来做到这一点。除非您将其插入某处,否则它不会显示在您的网站上。

var image = document.createElement("img");
image.src = "file_path.png";

如果您希望访问的文件不在您网站的文件夹中,而是在通过文件路径运行网站机器的任何人上,出于安全原因,Javascript 会阻止您执行此操作。 (想象一下允许网站在您不知情的情况下访问您计算机上的任何文件!)您必须使用<input type="file"> 标签。

【讨论】:

【参考方案2】:

这是我编写的用于以 HTML 和 Javascript 显示来自文件系统的图像的代码。

var inputSelectionHandler = function(event) 

            var reader = new FileReader();
            reader.readAsDataURL(event.srcElement.files[0]);
            reader.onload = function() 
                var fileContent = reader.result;
                var div = document.createElement("div");
                div.style.backgroundImage = "url(" + fileContent + ")";
                var btn_trigger = document.getElementById("btn_trigger");
                var file_btn = btn_trigger.parentElement;
                file_btn.insertBefore(div, btn_trigger);
            


【讨论】:

【参考方案3】:

这是正确的做法

  var openFile = function(file) 
    var input = file.target;

    var reader = new FileReader();
    reader.onload = function()
      var dataURL = reader.result;
      var output = document.getElementById('output');
      output.src = dataURL;
    ;
    reader.readAsDataURL(input.files[0]);
  ;
<input type='file' accept='image/*' onchange='openFile(event)'><br>
<img id='output' style="height:100px; width:100px;">

做一些调查以了解代码中的错误在哪里,这最好学习

当您放弃时,请在此处发表评论,我很乐意再次提供帮助! :)

【讨论】:

谢谢!但是,我不想使用&lt;input&gt; 标签。我想手动阅读。 不正确的方法是output.src = URL.createObjectURL(input.files[0]);。但是 OP 正在尝试从 url 加载文件,而不是从文件输入。 @TrishSiquian 你根本不能那样做,浏览器的安全性会阻止你。 @Kaiido 她正在尝试从本地文件加载,这是不可能的,如果她从 url(http/s 或任何不是 file:///)加载,她宁愿使用 img 标签什么如果她不这样做是为了! @OmarElDon,我同意目前尚不清楚 OP 试图做什么,但我的观点是,您显示输入文件的方式不是 正确 的.你会同意你的答案无论如何都不能回答这个问题。而且 OP 从来没有谈论过本地文件(来自 file:// 协议),所以 XHR 可以工作,img.src = url 也可以工作。

以上是关于如何使用纯 JavaScript 读取图像文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Java 读取电子邮件中的徽标和图像,其中电子邮件的内容是 html/纯文本

如何让用户使用纯 Javascript 将剪贴板中的图像数据粘贴到 Firefox 中的画布元素中?

基于GDI显示png图像

当用户单击图像时,如何使用 JavaScript 或 jQuery 读取图像的像素?

JavaScript使用readAsDataURL读取图像文件

如何在 kotlin 中读取纯文本文件?