【问题标题】:How to get Image File Size after Resizing image in Javascript?在 Javascript 中调整图像大小后如何获取图像文件大小?
【发布时间】:2018-11-11 12:46:05
【问题描述】:

鉴于以下脚本,我可以将图像大小调整为图像的最大预定义尺寸,并且它显示在Canvas

$(function() {
  $("#file_select").change(function(e) {
    var fileReader = new FileReader();
    fileReader.onload = function(e) {
      var img = new Image();
      img.onload = function() {

        var MAX_WIDTH = 100;
        var MAX_HEIGHT = 100;

        var width = img.width;
        var height = img.height;

        if (width > height) {
          if (width > MAX_WIDTH) {
            height *= MAX_WIDTH / width;
            width = MAX_WIDTH;
          }
        } else {
          if (height > MAX_HEIGHT) {
            width *= MAX_HEIGHT / height;
            height = MAX_HEIGHT;
          }
        }

        var canvas = document.createElement("canvas");
        canvas.setAttribute('id', 'canvas')
        canvas.width = width;
        canvas.height = height;
        canvas.getContext("2d").drawImage(this, 0, 0, width, height);
        this.src = canvas.toDataURL();
        document.body.appendChild(this); //remove this if you don't want to show it
      }
      img.src = e.target.result;
    }
    fileReader.readAsDataURL(e.target.files[0]);

    // console.log('file size after resized is...');

  });

});
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.js"></script>
<script src="http://malsup.github.com/jquery.form.js"></script>

<h1 class="logo">Upload Picture</h1>
<div id="upload_form_div">
  <form id="upload_form" method="POST" enctype="multipart/form-data" action="upload">
    <input type="file" name="file" capture="camera" id="file_select" />
  </form>
</div>

<div id="loading" style="display:none;">
  Uploading your picture...
</div>

但是,我想获得调整后图像的文件大小;不是宽度和高度。

调整大小后如何获取图像文件大小?

谢谢。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    您可以通过 newImageData.length * 3 / 4 计算粗略的字节大小

    $(function() {
      $("#file_select").change(function(e) {
        var fileReader = new FileReader();
        fileReader.onload = function(e) {
          var img = new Image();
          img.onload = function() {
    
            var MAX_WIDTH = 100;
            var MAX_HEIGHT = 100;
    
            var width = img.width;
            var height = img.height;
    
            if (width > height) {
              if (width > MAX_WIDTH) {
                height *= MAX_WIDTH / width;
                width = MAX_WIDTH;
              }
            } else {
              if (height > MAX_HEIGHT) {
                width *= MAX_HEIGHT / height;
                height = MAX_HEIGHT;
              }
            }
    
            var canvas = document.createElement("canvas");
            canvas.setAttribute('id', 'canvas')
            canvas.width = width;
            canvas.height = height;
            canvas.getContext("2d").drawImage(this, 0, 0, width, height);
            //Line added
            var canvasData = canvas.toDataURL();
            //Line edited
            this.src = canvasData;
            //Line added
            console.log(canvasData.length * 3 / 4, ' bytes');
            document.body.appendChild(this); //remove this if you don't want to show it
          }
          img.src = e.target.result;
        }
        fileReader.readAsDataURL(e.target.files[0]);
    
        // console.log('file size after resized is...');
    
      });
    
    });
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.js"></script>
    <script src="http://malsup.github.com/jquery.form.js"></script>
    
    <h1 class="logo">Upload Picture</h1>
    <div id="upload_form_div">
      <form id="upload_form" method="POST" enctype="multipart/form-data" action="upload">
        <input type="file" name="file" capture="camera" id="file_select" />
      </form>
    </div>
    
    <div id="loading" style="display:none;">
      Uploading your picture...
    </div>

    【讨论】:

    • 它不适用于newImageData.length 无法读取未定义的属性“长度”。谢谢
    • 检查大小是否计算正确:)。旁注 - 由于某种原因,我的浏览器上多次执行 onload 函数。
    • 在我的 Windows 电脑上,我右键单击并保存了图像文件并检查了它的大小,它显示大小:15.0 KB(15,408 字节),而计算出的大小为 15,425 字节。这就是我所说的粗略尺寸。
    • 啊,它是:),它是正确和准确的。是的,正如附注中所说,我不知道为什么它会这样无限期地执行,它消耗这么多 CPU 资源,有什么办法可以摆脱这种情况,非常感谢:(
    • 我通过在img.onload=function(){..} 之外定义变量canvas 解决了这个问题,它对我有用。感谢您对我的帮助:)
    猜你喜欢
    • 1970-01-01
    • 2018-06-10
    • 2015-06-04
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多