JS-文件阅读器API获取图像文件大小和尺寸

JS - File Reader API get image file size and dimensions

本文关键字:文件大小 图像 获取 API 文件 JS-      更新时间:2023-09-26

嗨,我正在使用以下代码使用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数据。

现在我也想得到图像文件的大小以及图像的宽度和高度。

有可能吗?

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

有人帮忙,非常感谢!

类似的东西?

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);

实时版本

更新使用Fiddle替换Live版本,但是,由于跨站点脚本问题,无法有效检索大小。

const reader = new FileReader()
reader.onload = (theFile) => {
     const image = new Image()
     image.src = theFile.target.result
     image.onload = () => {
         console.log('image width ===== ' + image.width + 'Image height 
          ===== ' + image.height)
     }
}
reader.readAsDataURL(item)

我不相信JS能够在不首先将图像渲染到视口的情况下获得这些数据。也就是说,我不熟悉任何可以按照JavaScript或JQuery库中的要求执行操作的方法。要获得这样的数据,最好的办法是以预览的方式将图像呈现到页面上,或者使用更强大的语言(如PHP),并使用Ajax请求来获得您想要的数据。