【问题标题】:How to get the size of an image in IMG html attribute [duplicate]如何在IMG html属性中获取图像的大小[重复]
【发布时间】:2017-10-05 23:02:02
【问题描述】:

我看到这段代码来获取图像的 size(KB, MB)。但是此代码在更改后从按钮获取数据。此代码可以适用于我的问题吗?或者有没有其他方法可以直接使用javascript获取图片的大小?。

$(function () {
   $("#btnClick").change(function (e){
      var a = e.target.files[0];
      alert(parseFloat(a.size / 1024).toFixed(2) + " KB.");
   });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="file" id ="btnClick"/>

编辑 正如nnnnn 所说。我有一个IMG (eg. &lt; img src="someimg.jpg"&gt;) 我想得到这张图片的大小。我怎么得到它?正如我上面的示例,它将大小存储在按钮中并检索它。

【问题讨论】:

  • 您能否详细说明您的问题?目前没有任何意义。 :) 你想显示已经加载到&lt;img/&gt; 标记的图像的大小吗?
  • 你是说你有&lt;img src="someimg.jpg"&gt; 并且你想得到那个图像文件的大小?
  • @nnnnnn 是的,你完全正确。
  • 也许你可以edit你的问题说得更清楚。我知道它在问题标题中,但在与文件输入相切之前在问题正文中说出来。令人困惑的是,问题中显示的唯一 HTML 不包含 &lt;img&gt;
  • 跨源问题或许可以通过 [Cross-Origin XMLHttpRequest](developer.chrome.com/extensions/xhr or HTTP access control (CORS) 解决

标签: javascript jquery html


【解决方案1】:

除了获取其naturalWidthnaturalHeight 值,当然,如果它是有效图像之一,没有直接的方法可以从&lt;img&gt; 元素获取有关它已加载的数据的任何信息浏览器支持的类型。

唯一的方法是再次获取数据,作为一个 Blob。从那里,您将能够看到文件的大小。但请注意,此方法受同源政策的限制。

img.onload = e => {
  fetch(img.src).then(resp => resp.blob())
  .then(blob => {
    console.log(blob.size);
    });
  };
&lt;img src="https://upload.wikimedia.org/wikipedia/commons/thumb/5/55/John_William_Waterhouse_A_Mermaid.jpg/800px-John_William_Waterhouse_A_Mermaid.jpg" id="img"&gt;

【讨论】:

  • 我如何使用这个代码?我需要把它放在一个函数中吗?..
  • @KiRa,这取决于你。在这里,我正在等待图像已加载资源,以便获取使用 HTTP 缓存而不是向服务器发出新请求,但您可以随心所欲。您甚至可以先获取这些数据,然后将&lt;img&gt;src 设置为URL.createObjectURL(blob)
  • 冒昧地在这里展示了@Kaiido 的答案。请记住,Cross-Origin XMLHttpRequest 类型不支持这一点。需要从server 方允许。为Fiddle。结果见控制台。 :)
  • @Kaiido 我尝试放入函数但出错
  • @KiRa,此错误是否有名称或简短描述?请注意,您不必强制使用 fetch API,您也可以将 XHR 用于旧版浏览器,有一个 responseType = 'blob' 参数。此答案中的代码只是概念的广泛证明,您必须编写自己的版本。但主要思想是你不能直接从&lt;img&gt; 标签中做到这一点。
【解决方案2】:

您可以使用此函数通过 url 获取任何文件的文件大小:

function get_filesize(url, callback) {
    var xhr = new XMLHttpRequest();
    xhr.open("HEAD", url, true); // Notice "HEAD" instead of "GET",
                             //  to get only the header
    xhr.onreadystatechange = function() {
    if (this.readyState == this.DONE) {
        callback(parseInt(xhr.getResponseHeader("Content-Length")));
    }
};
    xhr.send();
}  

并像这样使用它:

get_filesize("https://upload.wikimedia.org/wikipedia/commons/1/1e/Stonehenge.jpg", function(size) {
     alert("The size of image is: " + size + " bytes.");
});

在这里试试: https://jsfiddle.net/emilvr/mv5r6xxm/

【讨论】:

  • 与其给出负利率,不如去做一些研究!这个函数返回正确的大小!对于文件,我们有两种不同的大小:磁盘大小和大小。此函数返回磁盘上的大小!阅读更多:fixedbyvonnie.com/2014/08/whats-difference-file-size-size-disk/…
  • 您的回答非常好!我不知道为什么那个人对你投了反对票,但我只是对你的回答投了赞成票以纠正他/她的错误。祝你有美好的一天^^
猜你喜欢
  • 1970-01-01
  • 2014-04-30
  • 2013-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-05
  • 2017-06-03
  • 1970-01-01
相关资源
最近更新 更多