如何在上传之前预览图像,获取文件大小,图像高度和宽度?

Afs*_*hin 93 html javascript jquery dimensions image-size

如何使用jQuery或JavaScript在上传到我的网站之前获取文件大小,图像高度和宽度?

Rok*_*jan 170

HTML5和文件API

这是未注释的工作代码段示例:

const EL_browse  = document.getElementById('browse');
const EL_preview = document.getElementById('preview');

const readImage  = file => {
  if ( !(/^image\/(png|jpe?g|gif)$/).test(file.type) )
    return EL_preview.insertAdjacentHTML('beforeend', `Unsupported format ${file.type}: ${file.name}<br>`);

  const img = new Image();
  img.addEventListener('load', () => {
    EL_preview.appendChild(img);
    EL_preview.insertAdjacentHTML('beforeend', `<div>${file.name} ${img.width}×${img.height} ${file.type} ${Math.round(file.size/1024)}KB<div>`);
    window.URL.revokeObjectURL(img.src); // Free some memory
  });
  img.src = window.URL.createObjectURL(file);
}

EL_browse.addEventListener('change', ev => {
  EL_preview.innerHTML = ''; // Remove old images and data
  const files = ev.target.files;
  if (!files || !files[0]) return alert('File upload not supported');
  [...files].forEach( readImage );
});
Run Code Online (Sandbox Code Playgroud)
#preview img { max-height: 100px; }
Run Code Online (Sandbox Code Playgroud)
<input id="browse" type="file" multiple>
<div id="preview"></div>
Run Code Online (Sandbox Code Playgroud)


使用输入和div作为图像预览区域

const EL_browse  = document.getElementById('browse');
const EL_preview = document.getElementById('preview');

const readImage = file => {
  if ( !(/^image\/(png|jpe?g|gif)$/).test(file.type) )
    return EL_preview.insertAdjacentHTML('beforeend', `<div>Unsupported format ${file.type}: ${file.name}</div>`);

  const reader = new FileReader();
  reader.addEventListener('load', () => {
    const img  = new Image();
    img.addEventListener('load', () => {
      EL_preview.appendChild(img);
      EL_preview.insertAdjacentHTML('beforeend', `<div>${file.name} ${img.width}×${img.height} ${file.type} ${Math.round(file.size/1024)}KB</div>`);
    });
    img.src = reader.result;
  });
  reader.readAsDataURL(file);  
};

EL_browse.addEventListener('change', ev => {
  EL_preview.innerHTML = ''; // Clear Preview
  const files = ev.target.files;
  if (!files || !files[0]) return alert('File upload not supported');
  [...files].forEach( readImage );
});
Run Code Online (Sandbox Code Playgroud)

让我们也使用CSS来保持生成的图像合理的高度:

#preview img { max-height: 100px; }
Run Code Online (Sandbox Code Playgroud)

JavaScript:

<input id="browse" type="file"  multiple>
<div id="preview"></div>
  
Run Code Online (Sandbox Code Playgroud)

的jsfiddle


Web*_*her 10

演示

不确定它是否是你想要的,但只是简单的例子:

var input = document.getElementById('input');

input.addEventListener("change", function() {
    var file  = this.files[0];
    var img = new Image();

    img.onload = function() {
        var sizes = {
            width:this.width,
            height: this.height
        };
        URL.revokeObjectURL(this.src);

        console.log('onload: sizes', sizes);
        console.log('onload: this', this);
    }

    var objectURL = URL.createObjectURL(file);

    console.log('change: file', file);
    console.log('change: objectURL', objectURL);
    img.src = objectURL;
});
Run Code Online (Sandbox Code Playgroud)


小智 8

如果你可以使用jQuery验证插件,你可以这样做:

HTML:

<input type="file" name="photo" id="photoInput" />
Run Code Online (Sandbox Code Playgroud)

JavaScript的:

$.validator.addMethod('imagedim', function(value, element, param) {
  var _URL = window.URL;
        var  img;
        if ((element = this.files[0])) {
            img = new Image();
            img.onload = function () {
                console.log("Width:" + this.width + "   Height: " + this.height);//this will give you image width and height and you can easily validate here....

                return this.width >= param
            };
            img.src = _URL.createObjectURL(element);
        }
});
Run Code Online (Sandbox Code Playgroud)

该函数作为ab onload函数传递.

代码取自这里