JavaScript를 사용하여 이미지 크기 (높이 및 너비)를 얻는 방법은 무엇입니까?


답변:


792

자바 스크립트를 사용하여 프로그래밍 방식으로 이미지를 가져 와서 치수를 확인할 수 있습니다 ...

var img = new Image();
img.onload = function() {
  alert(this.width + 'x' + this.height);
}
img.src = 'http://www.google.com/intl/en_ALL/images/logo.gif';

이미지가 마크 업의 일부가 아닌 경우에 유용 할 수 있습니다.


4
@ blo0p3r-이미지를 DOM에로드 할 필요가 없습니다. 이미지를로드하고 onload를 실행하여 크기를 제공합니다. 그건 그렇고-여기에 최고의 답변!
Vik

XMLHttpRequest 객체 로도이 작업을 수행 할 수 있기를 바랍니다.
PHearst

이 코드를 여러 이미지 배열에 어떻게 사용할 수 있습니까? 아마 여기에서 최고의 답변과 결합해야 할 것입니다 : stackoverflow.com/questions/4288759/… ?
Kozuch

여러 이미지를위한 솔루션 : stackoverflow.com/questions/19269834/…
Kozuch

2
img.onerror = function () {alert (0); // 핸들러를 찾을 수 없음}
무한 isa

437

clientWidthclientHeight 는 DOM 요소의 내부 차원에 대한 현재 브라우저 크기를 표시하는 DOM 속성입니다 (여백 및 경계 제외). 따라서 IMG 요소의 경우 보이는 이미지의 실제 크기를 가져옵니다.

var img = document.getElementById('imageid'); 
//or however you get a handle to the IMG
var width = img.clientWidth;
var height = img.clientHeight;

33
@Nicky 정확하게 맞습니다. 해당 인스턴스에서 렌더링 될 때 이미지의 크기를 제공합니다 .
Rex M

8
@ 매트-비주얼 $.fn.width$.fn.height.
yckart

202
정답은 img.naturalWidth 및 img.naturalHeight
Octopus

5
document.getElementById입력하는 것이 길지만보다 10 배 빠릅니다 $('#...')[0].
bfontaine

17
크롬 35 @RexM에, 그것은 16 배 빠르다 : jsperf.com/document-getelementbyid-vs-jquery/5
bfontaine

335

또한 (Rex 및 Ian의 답변 외에도) :

imageElement.naturalHeight

imageElement.naturalWidth

이미지 요소가 아닌 이미지 파일 자체의 높이와 너비를 제공합니다.


15
이것은 이제 IE9 및 모든 최신 웹 브라우저에서 지원됩니다.
Aaron

이미지 로딩이 완료되지 않으면 0x0을 얻습니다.
brk

1
크롬을 사용하고 있으며 페이지가로드 된 후 돔의 이미지 크기가 변경되지 않는 경우에만 작동합니다.
Jonathan Czitkovics

네 .. 제가하는 일입니다. 그런 다음 "naturalwidth"또는 height가 NaN으로 다시 돌아 오면 이전 답변에서 다른 방법으로 되돌립니다 (이미지를 다시 새로운 Image ()로 가져 와서 onload 이벤트 중에 너비와 높이를 가져옵니다). 느리지 만이 방법은 IE8과 같은 오래된 브라우저에서 작동합니다
Randy


109

jQuery를 사용 중이고 이미지 크기를 요청하는 경우 이미지 크기가로드 될 때까지 기다려야합니다. 그렇지 않으면 0 만 얻을 수 있습니다.

$(document).ready(function() {
    $("img").load(function() {
        alert($(this).height());
        alert($(this).width());
    });
});

로드 핸들러에서 너비와 높이를 항상 사용할 수 있습니까?
Anders Lindén

@ AndersLindén-로드 이벤트에 Akseli가 추가 한 잉크를 참조하십시오. 이미지 전용 섹션이 있습니다. 기술 답변은 "아니오"이지만 실제로이 방법을 사용하는 사이트에는 문제가 없었습니다.
mrtsherman

그러나 기술적 답변이 '아니요'인 경우 사용할 수 없습니까? 그렇지 않습니까?
Anders Lindén

이미지 속성을로드하기 전에 가져올 수 있습니까?
no nein

98

이 답변에 대한 업데이트는 가장 투표가 많은 답글 중 하나가 using clientWidth및 clientHeight를 제안하기 때문에 유용 하다고 생각합니다.

실제로 어떤 값이 반환되는지 확인하기 위해 HTML5로 몇 가지 실험을 수행했습니다.

우선, Dash라는 프로그램을 사용하여 이미지 API에 대한 개요를 얻었습니다. 그것은한다고 heightwidth이미지의 렌더링 및 그 높이 / 너비 naturalHeightnaturalWidth이미지의 극한 높이 / 너비 (단 HTML5이다).

높이 300과 너비 400의 파일에서 아름다운 나비 이미지를 사용했습니다.

var img = document.getElementById("img1");

console.log(img.height,           img.width);
console.log(img.naturalHeight,    img.naturalWidth);
console.log($("#img1").height(),  $("#img1").width());

그런 다음 높이와 너비에 인라인 CSS와 함께이 HTML을 사용했습니다.

<img style="height:120px;width:150px;" id="img1" src="img/Butterfly.jpg" />

결과 :

/*Image Element*/ height == 300         width == 400
           naturalHeight == 300  naturalWidth == 400
/*Jquery*/      height() == 120       width() == 150

/*Actual Rendered size*/    120                  150

그런 다음 HTML을 다음과 같이 변경했습니다.

<img height="90" width="115" id="img1" src="img/Butterfly.jpg" />

즉, 인라인 스타일 대신 높이 및 너비 속성 사용

결과 :

/*Image Element*/ height ==  90         width == 115
           naturalHeight == 300  naturalWidth == 400
/*Jquery*/      height() ==  90       width() == 115

/*Actual Rendered size*/     90                  115

그런 다음 HTML을 다음과 같이 변경했습니다.

<img height="90" width="115" style="height:120px;width:150px;" id="img1" src="img/Butterfly.jpg" />

즉, 속성과 CSS를 모두 사용하여 어느 것이 우선하는지 확인하십시오.

결과 :

/*Image Element*/ height ==  90         width == 115
           naturalHeight == 300  naturalWidth == 400
/*Jquery*/      height() == 120       width() == 150

/*Actual Rendered size*/    120                  150

1
clientHeight가 더 이상 사용되지 않는다고 생각하는 이유는 무엇입니까?
Cactux

64

JQuery를 사용하여 다음을 수행하십시오.

var imgWidth = $("#imgIDWhatever").width();

63
그리고 이미지가 아직로드되지 않았다면?
James Westgate

11
이미지가 div의 background 속성에 있다면? :)
NDM

3
@JamesWestgate 이미지가 아직로드되지 않은 경우 실제 크기를 결정하는 방법이 없습니다. 그러나 요소 의 widthheight속성 을 읽으려고 시도 할 수 img있습니다.
Tim

@Tim 당신은 배경에로드 할 수 있으며로드시 크기를 가질 수 있습니다
디스

26

다른 모든 것들은 잊어 버린 것은로드 전에 이미지 크기를 확인할 수 없다는 것입니다. 작성자가 게시 된 모든 메소드를 확인하면 아마도 localhost에서만 작동합니다. 여기에서 jQuery를 사용할 수 있으므로 이미지가로드되기 전에 '준비'이벤트가 시작된다는 것을 기억하십시오. $ ( '# xxx'). width () 및 .height ()는 onload 이벤트 이상에서 실행되어야합니다.


9
업데이트 된 코드를 게시하면 불쾌감을 느끼고 역전 된 배지를 얻을 수도 있습니다!
제임스 웨스트 게이트

1
@Thinker, pls는 분석이 정확 해 보이므로 솔루션을 제공합니다.
a20

5
이것은 대답이 아닙니다. 다른 답변에 대한 의견.
jeffdill2

20

실제로로드가 완료 될 때까지 이미지의 크기를 알 수 없으므로 load 이벤트의 콜백을 사용하여이 작업을 실제로 수행 할 수 있습니다. 아래 코드와 같은 것 ...

var imgTesting = new Image();

function CreateDelegate(contextObject, delegateMethod)
{
    return function()
    {
        return delegateMethod.apply(contextObject, arguments);
    }
}

function imgTesting_onload()
{
    alert(this.width + " by " + this.height);
}


imgTesting.onload = CreateDelegate(imgTesting, imgTesting_onload);
imgTesting.src = 'yourimage.jpg';

1
jquery에서는 $ .proxy를 사용할 수 있습니다.
Jochem Van Der Spek

9

jQuery를 라이브러리 -

.width()및을 사용하십시오 .height().

jQuery 너비jQuery heigth에 대한 자세한 내용 .

예제 코드

$(document).ready(function(){
    $("button").click(function()
    {
        alert("Width of image: " + $("#img_exmpl").width());
        alert("Height of image: " + $("#img_exmpl").height());
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>

<img id="img_exmpl" src="http://images.all-free-download.com/images/graphicthumb/beauty_of_nature_9_210287.jpg">
<button>Display dimensions of img</button>


8

좋아, 나는 속성을 찾기 전에 이미지로드를 허용 할 수 있도록 소스 코드를 개선했다고 생각합니다. 그렇지 않으면 파일이로드되기 전에 다음 명령문이 호출되었으므로 '0 * 0'이 표시됩니다 브라우저. jquery가 필요합니다 ...

function getImgSize(imgSrc){
    var newImg = new Image();
    newImg.src = imgSrc;
    var height = newImg.height;
    var width = newImg.width;
    p = $(newImg).ready(function(){
        return {width: newImg.width, height: newImg.height};
    });
    alert (p[0]['width']+" "+p[0]['height']);
}

8

가정하면, 우리는 <img id="an-img" src"...">

// Query after all the elements on the page have loaded.
// Or, use `onload` on a particular element to check if it is loaded.
document.addEventListener('DOMContentLoaded', function () {
  var el = document.getElementById("an-img");

  console.log({
    "naturalWidth": el.naturalWidth, // Only on HTMLImageElement
    "naturalHeight": el.naturalHeight, // Only on HTMLImageElement
    "offsetWidth": el.offsetWidth,
    "offsetHeight": el.offsetHeight
  });

자연적인 차원

el.naturalWidth그리고 el.naturalHeight우리에게 얻을 것이다 자연 크기 , 이미지 파일의 크기를.

레이아웃 치수

el.offsetWidth그리고 el.offsetHeight우리에게 요소가 문서에 렌더링되는 차원을 얻을 것이다.


4
유용한 콘텐츠를 제공하는 기존 답변을 찬성하십시오. 그들 중 일부에서 새로운 것으로 복사하지 마십시오. 그러면 콘텐츠를 복제하는 것입니다.
TylerH

7

실제 이미지 크기를 사용하기 전에 소스 이미지를로드해야합니다. JQuery 프레임 워크를 사용하면 간단한 방법으로 실제 이미지 크기를 얻을 수 있습니다.

$("ImageID").load(function(){
  console.log($(this).width() + "x" + $(this).height())
})

7

답변은 내가 찾은 것입니다 (jQuery에서).

var imageNaturalWidth = $('image-selector').prop('naturalWidth');
var imageNaturalHeight = $('image-selector').prop('naturalHeight');

5

promiseimageDimensions() 사용을 두려워하지 않으면 다음과 같은 간단한 기능을 사용할 수 있습니다 .

// helper to get dimensions of an image
const imageDimensions = file => new Promise((resolve, reject) => {
    const img = new Image()

    // the following handler will fire after the successful parsing of the image
    img.onload = () => {
        const { naturalWidth: width, naturalHeight: height } = img
        resolve({ width, height })
    }

    // and this handler will fire if there was an error with the image (like if it's not really an image or a corrupted one)
    img.onerror = () => {
        reject('There was some problem with the image.')
    }
    
    img.src = URL.createObjectURL(file)
})

// here's how to use the helper
const getInfo = async ({ target: { files } }) => {
    const [file] = files
 
    try {
        const dimensions = await imageDimensions(file)
        console.info(dimensions)
    } catch(error) {
        console.error(error)
    }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/7.0.0-beta.3/babel.min.js"></script>

Select an image:
<input
  type="file"
  onchange="getInfo(event)"
/>
<br />
<small>It works offline.</small>



3

2019 년에 Javascript 및 / 또는 Typescript를 사용하는 일부 사용자에게 도움이 될 수 있다고 생각했습니다.

일부 사람들이 제안한대로 다음과 같은 것이 잘못되었다는 것을 알았습니다.

let img = new Image();
img.onload = function() {
  console.log(this.width, this.height) // Error: undefined is not an object
};
img.src = "http://example.com/myimage.jpg";

이것은 맞습니다 :

let img = new Image();
img.onload = function() {
  console.log(img.width, img.height)
};
img.src = "http://example.com/myimage.jpg";

결론:

사용 img하지 this에서 onload작동합니다.


위의 img.src에는 오타가 있습니다. "not :이 파일을 편집하려고했지만 편집 할 수 없습니다."편집은 6 자 이상이어야합니다. 이 게시물에서 개선해야 할 것이 있습니까? "그렇지 않으면 완벽하게 작동하는 매우 간단한 솔루션입니다!
user2677034

알려 주셔서 감사합니다 @ user2677034. 나는 그것을 보지 못했다. 나는 애플의 키보드를 비난 할 것이다. 농담이야 ... 아마 내 잘못 이었어 ; P
Brian

2

최근에 플렉스 슬라이더의 오류와 동일한 문제가있었습니다. 첫 번째 이미지의 높이는 로딩 지연으로 인해 더 작게 설정되었습니다. 해당 문제를 해결하기 위해 다음 방법을 시도해 보았습니다.

// create image with a reference id. Id shall be used for removing it from the dom later.
var tempImg = $('<img id="testImage" />');
//If you want to get the height with respect to any specific width you set.
//I used window width here.
tempImg.css('width', window.innerWidth);  
tempImg[0].onload = function () {
    $(this).css('height', 'auto').css('display', 'none');
    var imgHeight = $(this).height();
    // Remove it if you don't want this image anymore.
    $('#testImage').remove();
}
//append to body
$('body').append(tempImg);
//Set an image url. I am using an image which I got from google.
tempImg[0].src ='http://aspo.org/wp-content/uploads/strips.jpg';

이렇게하면 원래 너비 나 0이 아니라 설정 한 너비와 관련하여 높이가 표시됩니다.


1

다음을 사용할 수도 있습니다.

var image=document.getElementById("imageID");
var width=image.offsetWidth;
var height=image.offsetHeight;

1

Nicky De Maeyer는 배경 그림을 물었다. CSS에서 가져 와서 "url ()"을 바꿉니다.

var div = $('#my-bg-div');
var url = div.css('background-image').replace(/^url\(\'?(.*)\'?\)$/, '$1');
var img = new Image();
img.src = url;
console.log('img:', img.width + 'x' + img.height); // zero, image not yet loaded
console.log('div:', div.width() + 'x' + div.height());
img.onload = function() {
  console.log('img:', img.width + 'x' + img.height, (img.width/div.width()));
}

jQuery를 사용할 때 regexp의 사용을 이해하지 못했습니다. jQuery를 당신을 위해 속성을 정상화하기 때문에 당신은 사용하여 잘 도망 s.substr(4,s.length-5)이 눈에 적어도 쉽게,)
조나스 슈베르트 Erlandsson

1

페이지가 다음과 같이 js 또는 jquery로로드 될 때 onload 핸들러 특성을 적용 할 수 있습니다.

$(document).ready(function(){
   var width = img.clientWidth;
   var height = img.clientHeight;

 });

1

간단히, 이렇게 테스트 할 수 있습니다.

  <script>
  (function($) {
        $(document).ready(function() {
            console.log("ready....");
            var i = 0;
            var img;
            for(i=1; i<13; i++) {
                img = new Image();
                img.src = 'img/' + i + '.jpg';
                console.log("name : " + img.src);
                img.onload = function() {
                    if(this.height > this.width) {
                        console.log(this.src + " : portrait");
                    }
                    else if(this.width > this.height) {
                        console.log(this.src + " : landscape");
                    }
                    else {
                        console.log(this.src + " : square");
                    }
                }
            }
        });
    }(jQuery));
  </script>

0
var img = document.getElementById("img_id");
alert( img.height + " ;; " + img .width + " ;; " + img .naturalHeight + " ;; " + img .clientHeight + " ;; " + img.offsetHeight + " ;; " + img.scrollHeight + " ;; " + img.clientWidth + " ;; " + img.offsetWidth + " ;; " + img.scrollWidth )
//But all invalid in Baidu browser  360 browser ...

0

상위 div에서 브라우저 해석 설정을 제거하는 것이 중요합니다. 따라서 실제 이미지 너비와 높이를 원한다면

$('.right-sidebar').find('img').each(function(){
    $(this).removeAttr("width");
    $(this).removeAttr("height");
    $(this).imageResize();
});

이것은 올바른 관계로 이미지를 스케일링하기 위해 이미지의 실제 속성이 필요한 TYPO3 프로젝트 예제 중 하나입니다.


0
var imgSrc, imgW, imgH;
function myFunction(image){
    var img = new Image();
    img.src = image;
    img.onload = function() {   
        return {
            src:image,
            width:this.width,
            height:this.height};
        }
    return img;
}
var x = myFunction('http://www.google.com/intl/en_ALL/images/logo.gif');
    //Waiting for the image loaded. Otherwise, system returned 0 as both width and height.
x.addEventListener('load',function(){
    imgSrc = x.src;
    imgW = x.width;
    imgH = x.height;
});
x.addEventListener('load',function(){
    console.log(imgW+'x'+imgH);//276x110
});
console.log(imgW);//undefined.
console.log(imgH);//undefined.
console.log(imgSrc);//undefined.

이것이 나의 방법이다. 이것이 도움이되기를 바란다. :)


0
function outmeInside() {
var output = document.getElementById('preview_product_image');

 if (this.height < 600 || this.width < 600) {
     output.src = "http://localhost/danieladenew/uploads/no-photo.jpg";
     alert("The image you have selected is low resloution image.Your image width=" + this.width + ",Heigh=" + this.height + ". Please select image greater or equal to 600x600,Thanks!");
 } else {
     output.src = URL.createObjectURL(event.target.files[0]);

 }
 return;

 }

 img.src = URL.createObjectURL(event.target.files[0]);
}

이것은 여러 이미지 미리보기 및 업로드에 사용됩니다. 각 이미지를 하나씩 선택해야하는 경우. 그런 다음 모든 미리보기 이미지 기능으로 복사하여 붙여 넣고 확인하십시오 !!!


0

요소의 속성을 얻기 전에 문서 페이지가로드되어 있어야합니다.

window.onload=function(){
    console.log(img.offsetWidth,img.offsetHeight);
}

0

올바른 파일을 선택할 때 입력 요소로 얻은 img 파일 객체를 전달하면 이미지의 그물 높이와 너비가 나타납니다.

function getNeturalHeightWidth(file) {
     let h, w;
     let reader = new FileReader();
      reader.onload = () => {
        let tmpImgNode = document.createElement("img");
        tmpImgNode.onload = function() {
          h = this.naturalHeight;
          w = this.naturalWidth;
        };
        tmpImgNode.src = reader.result;
      };
      reader.readAsDataURL(file);
    }
   return h, w;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.