Existe-t-il un moyen fiable, indépendant du cadre, de déterminer les dimensions physiques d'un <img src='xyz.jpg'>
redimensionné côté client?
Vous avez 2 options:
Option 1:
Supprimez les attributs width
et height
et lisez offsetWidth
et offsetHeight
.
Option 2:
Créez un objet JavaScript Image
, définissez-le src
, puis lisez width
et height
(vous n'avez même pas besoin de l'ajouter à la page. fais ça).
function getImgSize(imgSrc) {
var newImg = new Image();
newImg.onload = function() {
var height = newImg.height;
var width = newImg.width;
alert ('The image size is '+width+'*'+height);
}
newImg.src = imgSrc; // this must be done AFTER setting onload
}
Edit by Pekka: Comme convenu dans les commentaires, j’ai modifié la fonction pour qu’elle s’exécute sur l’événement "onload" de l’image. Sinon, avec les grandes images, height
et width
ne renverraient rien car l’image n’a pas encore été chargée.
Les images (au moins sur Firefox) ont une propriété naturalWidth
/height afin que vous puissiez utiliser img.naturalWidth
pour obtenir la largeur d'origine
var img = document.getElementsByTagName("img")[0];
img.onload=function(){
console.log("Width",img.naturalWidth);
console.log("Height",img.naturalHeight);
}
Vous pouvez précharger l'image dans un objet Image javascript, puis vérifier les propriétés width et height de cet objet.
En changeant un peu la deuxième option de Gabriel, pour être plus facile à utiliser:
function getImgSize(imgSrc, callback) {
var newImg = new Image();
newImg.onload = function () {
if (callback != undefined)
callback({width: newImg.width, height: newImg.height})
}
newImg.src = imgSrc;
}
Html:
<img id="_temp_circlePic" src="http://localhost/myimage.png"
style="width: 100%; height:100%">
Exemple d'appel:
getImgSize($("#_temp_circlePic").attr("src"), function (imgSize) {
// do what you want with the image's size.
var ratio = imgSize.height / $("#_temp_circlePic").height();
});
/* Function to return the DOM object's in crossbrowser style */
function widthCrossBrowser(element) {
/* element - DOM element */
/* For FireFox & IE */
if( element.width != undefined && element.width != '' && element.width != 0){
this.width = element.width;
}
/* For FireFox & IE */
else if(element.clientWidth != undefined && element.clientWidth != '' && element.clientWidth != 0){
this.width = element.clientWidth;
}
/* For Chrome * FireFox */
else if(element.naturalWidth != undefined && element.naturalWidth != '' && element.naturalWidth != 0){
this.width = element.naturalWidth;
}
/* For FireFox & IE */
else if(element.offsetWidth != undefined && element.offsetWidth != '' && element.offsetWidth != 0){
this.width = element.offsetWidth;
}
/*
console.info(' widthWidth width:', element.width);
console.info(' clntWidth clientWidth:', element.clientWidth);
console.info(' natWidth naturalWidth:', element.naturalWidth);
console.info(' offstWidth offsetWidth:',element.offsetWidth);
console.info(' parseInt(this.width):',parseInt(this.width));
*/
return parseInt(this.width);
}
var elementWidth = widthCrossBrowser(element);