Get actual image size, after resizing it
One way you could do it is create a separate image object.
function getImageDimensions(path,callback){
var img = new Image();
img.onload = function(){
callback({
width : img.width,
height : img.height
});
}
img.src = path;
}
getImageDimensions('image_src',function(data){
var img = data;
//img.width
//img.height
});
That way, you'll use the same image but not the one on the DOM, which has modified dimensions. Cached images, as far as i know, will be recycled using this method. So no worries about additional HTTP requests.
you have the 'natural' kws to help you out:
with js:
var imageheight = document.getElementById(imageid).naturalHeight;
or with jquery
var imageheight = $('#' + imageid).naturalHeight;
@Dinesh's answer to just use the naturalHeight
and naturalWidth
property is great and probably should be the accepted answer.
Just wanted to add two things here that could save people hours since I see many SO posts around this issue and have myself spent quite sometime on it.
naturalHeight
may return0
orundefined
if called before the image is loaded. Just settingsrc
attribute may not mean that the image is loaded immediately. I have seen that it is best to fetch it inonload
.$('selector')[0].onload = function() { alert(this.naturalHeight); alert(this.naturalWidth); }
If not using
this
, just$('selector').naturalHeight
may not work. You may need to access the associated DOM element i.e$('selector')[0].naturalHeight
or$('selector').get(0).naturalHeight
since we are using native Javascript's attributenaturalHeight
. See this SO post for more details.