Existe-t-il un moyen fiable et indépendant du cadre de déterminer les dimensions physiques d'un <img src='xyz.jpg'>
redimensionné côté client?
Réponses:
Vous avez 2 options:
Option 1:
Retirez les width
et height
attributs et lire offsetWidth
etoffsetHeight
Option 2:
Créez un Image
objet JavaScript , définissez le src
, et lisez le width
et height
(vous n'avez même pas besoin de l'ajouter à la page pour ce faire).
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 par Pekka : Comme convenu dans les commentaires, j'ai changé la fonction pour qu'elle s'exécute sur l'événement «onload» de l'image. Sinon, avec de grandes images, height
et width
ne retournerait rien car l'image n'était pas encore chargée.
newImg.onload
fonction pour m'assurer que l'image est chargée lorsque je règle la largeur / hauteur. Êtes-vous d'accord pour que je modifie votre réponse en conséquence?
if(newImg.complete || newImg.readyState === 4) newImg.onload();
à la fin de votre fonction, cela résoudra le problème sur Chrome / OSX qui empêche le chargement de se déclencher lorsque les images sont chargées à partir du cache.
Les images (au moins sur Firefox) ont une naturalWidth
propriété / height, vous pouvez donc l'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);
}
/* 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);
element
une sélection jQuery? Qu'en est-il de la hauteur?
Il suffit de changer 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();
});
img.onload = function () {console.log(img.height, img.width)}