Apakah ada cara kerangka kerja yang andal untuk menentukan dimensi fisik dari ukuran yang <img src='xyz.jpg'>
diubah di sisi klien?
javascript
image
Pekka
sumber
sumber
img.onload = function () {console.log(img.height, img.width)}
Jawaban:
Anda memiliki 2 pilihan:
Pilihan 1:
Lepaskan
width
danheight
atribut dan membacaoffsetWidth
danoffsetHeight
Pilihan 2:
Buat
Image
objek JavaScript , setelsrc
, dan bacawidth
danheight
(Anda bahkan tidak perlu menambahkannya ke halaman untuk melakukan ini).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 oleh Pekka : Seperti yang telah disepakati dalam komentar, saya mengubah fungsi untuk berjalan pada acara ´onload´ pada gambar. Sebaliknya, dengan gambar besar,
height
danwidth
tidak akan mengembalikan apa pun karena gambar tersebut belum dimuat.sumber
newImg.onload
fungsi untuk memastikan gambar dimuat ketika saya mengatur lebar / tinggi. Apakah Anda setuju dengan saya mengedit jawaban Anda?if(newImg.complete || newImg.readyState === 4) newImg.onload();
di akhir fungsi Anda, itu akan memperbaiki masalah di Chrome / OSX yang menyebabkan onload tidak aktif saat gambar dimuat dari cache.Gambar (setidaknya di Firefox) memiliki
naturalWidth
properti a / height sehingga Anda dapat menggunakannyaimg.naturalWidth
untuk mendapatkan lebar aslinyavar img = document.getElementsByTagName("img")[0]; img.onload=function(){ console.log("Width",img.naturalWidth); console.log("Height",img.naturalHeight); }
Sumber
sumber
Anda dapat melakukan pramuat gambar ke dalam objek Gambar javascript, lalu periksa properti lebar dan tinggi pada objek tersebut.
sumber
/* 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);
sumber
element
pilihan jQuery? Bagaimana dengan tinggi badan?Hanya mengubah sedikit opsi kedua Gabriel, agar lebih mudah digunakan:
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%">
Contoh panggilan:
getImgSize($("#_temp_circlePic").attr("src"), function (imgSize) { // do what you want with the image's size. var ratio = imgSize.height / $("#_temp_circlePic").height(); });
sumber