JS - File Reader API 获取图像文件大小和尺寸

Posted

技术标签:

【中文标题】JS - File Reader API 获取图像文件大小和尺寸【英文标题】:JS - File Reader API get image file size and dimensions 【发布时间】:2013-07-20 09:16:38 【问题描述】:

您好,我正在使用以下代码通过 File Reader API 获取上传图片:

<script type="text/javascript">
var loadImageFile = (function () 
    if (window.FileReader) 
        var oPreviewImg = null, oFReader = new window.FileReader(),
            rFilter = /^(?:image\/bmp|image\/cis\-cod|image\/gif|image\/ief|image\/jpeg|image\/jpeg|image\/jpeg|image\/pipeg|image\/png|image\/svg\+xml|image\/tiff|image\/x\-cmu\-raster|image\/x\-cmx|image\/x\-icon|image\/x\-portable\-anymap|image\/x\-portable\-bitmap|image\/x\-portable\-graymap|image\/x\-portable\-pixmap|image\/x\-rgb|image\/x\-xbitmap|image\/x\-xpixmap|image\/x\-xwindowdump)$/i;

        oFReader.onload = function (oFREvent) 

            /*get image*/
            var _img = oFREvent.target.result;
            console.log(oFREvent.target);
            /*add img to hidden input text*/
            localStorage.photo = _img;
            oPreviewImg.src = oFREvent.target.result;
        ;

        return function () 
            var aFiles = document.getElementById("imageInput").files;
            if (aFiles.length === 0)  return; 
            if (!rFilter.test(aFiles[0].type))  
                notify("You must select a valid image file!",3400,false); return; 
            
            oFReader.readAsDataURL(aFiles[0]);
        

    

)();
</script>

<form name="uploadForm">
<p><input id="imageInput" type="file" name="myPhoto" onchange="loadImageFile();" /><br />
<input type="submit" value="Send" /></p>
<input type="hidden" id="photo_1_hidden" name="photo_1"/>
</form>

效果很好,它返回图像的 base64 数据。

现在我还想获取图像文件大小以及图像宽度和高度。

有可能吗?

我尝试登录控制台文件,但找不到我要搜索的内容。

非常感谢任何帮助!

【问题讨论】:

【参考方案1】:

这样的?

var oPreviewImg = new Image();
oPreviewImg.onload = function()
  console.log(this.size);
  alert("'" + this.name + "' is " + this.width + " by " + this.height + " pixels in size.");
  return true;
;

oPreviewImg.onerror = function()
  alert("'" + this.name + "' failed to load.");
  return true;


oPreviewImg.src = "//placeholdit.imgix.net/~text?txtsize=33&txt=350%C3%97150&w=350&h=150";

var xhr = new XMLHttpRequest();
xhr.open('HEAD', oPreviewImg.src, true);
xhr.onreadystatechange = function() 
    console.log('this', this);
  if ( xhr.readyState == 4 ) 
    if ( xhr.status == 200 ) 
      alert('Size in bytes: ' + xhr.getResponseHeader('Content-Length'));
     else 
      alert('ERROR');
    
  
;
xhr.send(null);

Live version

更新 Live 版本替换为 Fiddle,但是,由于跨站点脚本问题,不再有效地检索大小。

【讨论】:

是的,但是文件大小呢? 增加了尺寸,对此感到抱歉,只是错过了您想要的尺寸。如果你够聪明,你可能只能提出一个要求。 你的 live 版本 url 遇到了 DNS 问题。 @LukyVj 谢谢,我已经改成 jsfiddle,不幸的是,由于跨站点脚本问题,大小部分似乎不起作用【参考方案2】:

我不相信 JS 能够在不先将图像渲染到视口的情况下获取这些数据。也就是说,我不熟悉任何可以在 JavaScript 或 JQuery 库中执行您要求的方法。获取此类数据的最佳选择是以预览能力将图像呈现到页面,或者使用更强大的语言(如 php)并使用 Ajax 请求来获取您正在寻找的数据。

【讨论】:

以上是关于JS - File Reader API 获取图像文件大小和尺寸的主要内容,如果未能解决你的问题,请参考以下文章

在js中获取上传图片的宽度和高度

Node JS & MongoDB - 发布和获取 iOS 服务器 api 的图像

使用 Javascript 文件 API 获取图像尺寸

js通过fileReader获取图片的base64格式

获取 ZXing Reader 解码位图

JS 文件互转10 个 HTML 文件上传技巧Web 用户体验设计提升指南奇怪的知识——位掩码 | 思否技术周刊