Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Determining image file size + dimensions via Javascript?

As part of a web app, once images have been downloaded and rendered on a web page, I need to determine an image's file size (kb) and resolution within the browser context (so I could, for example, display that info on the page. This needs to be done client-side, obviously. Must be able to be solved x-browser without an ActiveX control or Java applet (IE7+, FF3+, Safari 3+, IE6 nice to have), though it doesn't have to be the same solution per browser.

Ideally this would be done using system Javascript, but if I absolutely need a JQuery or similar library (or a tiny subset of it), that could be done.

like image 975
scottru Avatar asked Aug 21 '09 06:08

scottru


People also ask

How do I find out the dimensions of an image?

You can also right-click on an image & choose properties from the drop-down menu. A new window will appear with several tabs. You'll click the details tab, and there you'll find you image size and dimensions.


2 Answers

Edit:

To get the current in-browser pixel size of a DOM element (in your case IMG elements) excluding the border and margin, you can use the clientWidth and clientHeight properties.

var img = document.getElementById('imageId');   var width = img.clientWidth; var height = img.clientHeight; 

Now to get the file size, now I can only think about the fileSize property that Internet Explorer exposes for document and IMG elements...

Edit 2: Something comes to my mind...

To get the size of a file hosted on the server, you could simply make an HEAD HTTP Request using Ajax. This kind of request is used to obtain metainformation about the url implied by the request without transferring any content of it in the response.

At the end of the HTTP Request, we have access to the response HTTP Headers, including the Content-Length which represents the size of the file in bytes.

A basic example using raw XHR:

var xhr = new XMLHttpRequest(); xhr.open('HEAD', 'img/test.jpg', true); xhr.onreadystatechange = function(){   if ( xhr.readyState == 4 ) {     if ( xhr.status == 200 ) {       alert('Size in bytes: ' + xhr.getResponseHeader('Content-Length'));     } else {       alert('ERROR');     }   } }; xhr.send(null); 

Note: Keep in mind that when you do Ajax requests, you are restricted by the Same origin policy, which allows you to make requests only within the same domain.

Check a working proof of concept here.

Edit 3:

1.) About the Content-Length, I think that a size mismatch could happen for example if the server response is gzipped, you can do some tests to see if this happens on your server.

2.) For get the original dimensions of a image, you could create an IMG element programmatically, for example:

var img = document.createElement('img');  img.onload = function () { alert(img.width + ' x ' + img.height); };  img.src='http://sstatic.net/so/img/logo.png'; 
like image 94
Christian C. Salvadó Avatar answered Oct 13 '22 11:10

Christian C. Salvadó


Check the uploaded image size using Javascript

<script type="text/javascript">     function check(){       var imgpath=document.getElementById('imgfile');       if (!imgpath.value==""){         var img=imgpath.files[0].size;         var imgsize=img/1024;          alert(imgsize);       }     } </script> 

Html code

<form method="post" enctype="multipart/form-data" onsubmit="return check();"> <input type="file" name="imgfile" id="imgfile"><br><input type="submit"> </form> 
like image 39
Mohanrajan Avatar answered Oct 13 '22 11:10

Mohanrajan