Есть ли надежный, независимый от структуры способ определения физических размеров <img src='xyz.jpg'>
измененного размера на стороне клиента?
javascript
image
Пекка
источник
источник
img.onload = function () {console.log(img.height, img.width)}
Ответы:
У вас есть 2 варианта:
Опция 1:
Удалите
width
иheight
атрибуты и читатьoffsetWidth
иoffsetHeight
Вариант 2:
Создайте
Image
объект JavaScript , установитеsrc
и прочтитеwidth
иheight
(для этого вам даже не нужно добавлять его на страницу).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 }
Отредактировал Пекка : Как было согласовано в комментариях, я изменил функцию, чтобы она запускалась при событии «загрузки» изображения. В противном случае с большими изображениями
height
иwidth
ничего не вернет, потому что изображение еще не было загружено.источник
newImg.onload
функцией, чтобы убедиться, что изображение загружено, когда я устанавливаю ширину / высоту. Вы согласны с тем, что я соответствующим образом отредактирую ваш ответ?if(newImg.complete || newImg.readyState === 4) newImg.onload();
в конце своей функции, это исправит проблему в Chrome / OSX, из-за которой onload не срабатывает при загрузке изображений из кеша.Изображения (по крайней мере, в Firefox) имеют
naturalWidth
свойство / height, поэтому вы можете использовать егоimg.naturalWidth
для получения исходной ширины.var img = document.getElementsByTagName("img")[0]; img.onload=function(){ console.log("Width",img.naturalWidth); console.log("Height",img.naturalHeight); }
Источник
источник
Вы можете предварительно загрузить изображение в объект Image javascript, а затем проверить свойства ширины и высоты этого объекта.
источник
/* 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
выбор JQuery? Что насчет высоты?Просто немного изменив второй вариант Габриэля, чтобы его было проще использовать:
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%">
Образец звонка:
getImgSize($("#_temp_circlePic").attr("src"), function (imgSize) { // do what you want with the image's size. var ratio = imgSize.height / $("#_temp_circlePic").height(); });
источник