이미지 크로스 브라우저의 원래 크기를 결정 하시겠습니까?


90

<img src='xyz.jpg'>클라이언트 측 에서 크기 조정 의 물리적 크기를 결정하는 안정적이고 프레임 워크 독립적 인 방법이 있습니까?


img.onload = function () {console.log(img.height, img.width)}
neaumusic

답변:


130

두 가지 옵션이 있습니다.

옵션 1:

제거 widthheight속성을 읽기 offsetWidthoffsetHeight

옵션 2 :

자바 스크립트 작성 Image객체의 설정 src및 읽기 widthheight(당신도 이렇게 페이지에 추가 할 필요가 없습니다).

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 : 의견에서 동의 한대로 이미지의 "onload"이벤트에서 실행되도록 기능을 변경했습니다. 그렇지 않으면 큰 이미지가 height있고 width이미지가 아직로드되지 않았기 때문에 아무것도 반환하지 않습니다.


아직로드되지 않은 이미지에서는 작동하지 않습니다. 이 답변에 걸림돌이되는 다른 사람들을 위해 제대로 작동하도록 조정하는 것이 좋습니다.
James

11
@Gabriel, 나는 이것을 사용하고 있지만 newImg.onload너비 / 높이를 설정할 때 이미지가로드되는지 확인 하는 기능이 있습니다. 그에 따라 답변을 편집해도 괜찮습니까?
Pekka

2
참고 : Chrome / OSX는이 기술을 사용하여 높이 / 너비가 0 인 캐시 된 이미지에 문제가있을 수 있습니다.
David Hellsing

2
반환 높이와 너비를 어떻게 얻을 수 있습니까 ... ?? 그 변수는 온로드의 외부지고 있지 않기 때문에

5
@GabrielMcAdams, if(newImg.complete || newImg.readyState === 4) newImg.onload();함수 끝에 추가 하면 이미지가 캐시에서로드 될 때 onload가 실행되지 않는 Chrome / OSX의 문제가 해결됩니다.
Prestaul

101

이미지 (적어도 Firefox에서는)에 naturalWidth/ height 속성이 있으므로 img.naturalWidth원래 너비를 얻는 데 사용할 수 있습니다.

var img = document.getElementsByTagName("img")[0];
img.onload=function(){
    console.log("Width",img.naturalWidth);
    console.log("Height",img.naturalHeight);
}

출처


8
너무 크롬에서 작동
bcoughlan

4
이 주제는 2013 년에도 여전히 관련이 있습니다. 다음은 IE7 / 8에 대한 훌륭한 해결 방법이있는 링크입니다. jacklmoore.com/notes/naturalwidth-and-naturalheight-in-ie
BurninLeo

4
이것이 2018 년에이기는 답입니다. 어디서나 작동합니다. ( MDN의 브라우저 호환성 표 에 따라.)
7vujy0f0hy

3

이미지를 자바 스크립트 이미지 개체에 미리로드 한 다음 해당 개체의 너비 및 높이 속성을 확인할 수 있습니다.


물론-문서에 넣을 필요는 없습니다. 그렇게 할 것입니다, 건배!
Pekka

3
/* 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);

이다 elementJQuery와 선택은? 높이는 무엇입니까?
Istiaque Ahmed

2

사용하기 쉽도록 Gabriel의 두 번째 옵션을 약간 변경하십시오.

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();
});
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.