how can I get an image's width and height in cm by JavaScript? I wrote a simple script, but when images have different resolutions so it couldn't show correct w and h. Please help me. (sorry for my English)
-
How about adding your code example so that people can suggest improvements ? – the-noob Apr 30 '16 at 09:49
-
In short: you can’t get the real dimension because images are built in pixels and different devices have a different pixel per inch ratio. – KittMedia Apr 30 '16 at 22:45
4 Answers
$('img').width();
$('img').height();
or
$('img').clientWidth;
$('img').clientHeight;

- 10,145
- 15
- 56
- 70

- 19
- 1
- 5
Small sample on pure JavaScript with pixel to cm converter (size depends on screen's DPI):
var
getSizeInCM,
ready;
/* Convert px to cm */
getSizeInCM = function(sizeInPX) {
return sizeInPX * 2.54 / (96 * window.devicePixelRatio)
};
ready = function() {
var
img = document.getElementById('img'),
width = getSizeInCM(img.clientWidth),
height = getSizeInCM(img.clientHeight);
alert('width: ' + width.toFixed(2) + ' cm, height: ' + height.toFixed(2) + ' cm');
};
<body onload="ready()">
<img id="img" src="http://placehold.it/250x150">
</body>
Result (MacBook Pro late 2011, Google Chrome):
Result (Apple Iphone 6, Safari):

- 5,116
- 3
- 33
- 47
If it is sufficient to assume 96 pixels per inch, the formula is to calculate cm
is:
centimeters = pixels * 2.54 / 96
function getImgSize() {
var img = document.getElementById('img');
var width = img.clientWidth * 2.54 / 96;
var height = img.clientHeight * 2.54 / 96;
document.getElementById('demo').innerHTML = 'width: ' + width + ', height: ' + height;
};
<body onload="getImgSize()">
<img id="img" src="http://placehold.it/250x150">
<p id="demo"></p>
</body>

- 3,346
- 9
- 33
- 51
-
Thanks a lot! but my program is dynamic and users have many images in different dpi! – Mhe Mrg Apr 30 '16 at 10:21
Some experiments with HTML5, to see which values actually get returned.
First of all I used a program called Dash to get an overview of the image API. It states that 'height' and 'width' are the rendered height/width of the image and that 'naturalHeight' and 'naturalWidth' are the intrinsic height/width of the image (and are HTML5 only).
I used an image of a beautiful butterfly, from a file with height 300 and width 400. And this Javascript:
var img = document.getElementById("img1");
console.log(img.height, img.width);
console.log(img.naturalHeight, img.naturalWidth);
console.log($("#img1").height(), $("#img1").width());
Then I used this HTML, with inline CSS for the height and width.
<img style="height:120px;width:150px;" id="img1" src="img/Butterfly.jpg" />
Results:
/*Image Element*/ height == 300 width == 400
naturalHeight == 300 naturalWidth == 400
/*Jquery*/ height() == 120 width() == 150
/*Actual Rendered size*/ 120 150
I then changed the HTML to the following:
<img height="90" width="115" id="img1" src="img/Butterfly.jpg" />
i.e. using height and width attributes rather than inline styles
Results:
/*Image Element*/ height == 90 width == 115
naturalHeight == 300 naturalWidth == 400
/*Jquery*/ height() == 90 width() == 115
/*Actual Rendered size*/ 90 115
I then changed the HTML to the following:
<img height="90" width="115" style="height:120px;width:150px;" id="img1" src="img/Butterfly.jpg" />
i.e. using both attributes and CSS, to see which takes precedence.
Results:
/*Image Element*/ height == 90 width == 115
naturalHeight == 300 naturalWidth == 400
/*Jquery*/ height() == 120 width() == 150
/*Actual Rendered size*/ 120 150
NOTE : I have copied this answer from Height and Width. Its really worth to know these differences.
Hope this helps you.

- 1
- 1

- 888
- 6
- 7