获取图像宽度高度javascript

Posted

技术标签:

【中文标题】获取图像宽度高度javascript【英文标题】:Get image width height javascript 【发布时间】:2013-06-19 19:16:51 【问题描述】:

好吧,我有这个代码:

http://jsfiddle.net/hv9gB/3/

    (function() 

    var img = document.getElementById('my_image');

    // Original
    var width, height;

    // Display
    var d_width = img.width;
    var d_height = img.height;

    var updateDetail = function() 
        document
            .getElementById('display_size')
            .innerhtml = 'Display Size: ' + d_width + ' x ' + d_height;

        document
            .getElementById('native_size')
            .innerHTML = 'Original Size: ' + width + ' x ' + height;
    ;

    // Using naturalWidth/Height
    if (img.naturalWidth) 
        width = img.naturalWidth;
        height = img.naturalHeight;

        updateDetail();
     else 
        // Using an Image Object
        img = new Image();
        img.onload = function() 
            width = this.width;
            height = this.height;

            updateDetail();
        ;
        img.src = 'http://lorempixel.com/output/nature-q-c-640-480-3.jpg';
    

());

那是我的网站:

http://dhems.x10.mx/

但在我的网站上无法显示图像的宽度和高度

为什么?!?!

【问题讨论】:

【参考方案1】:

把你的代码放进去

window.onload = function() 
 //insert code here

您的 js 文件在引擎到达图片之前执行。您收到以下控制台错误:

Uncaught TypeError: Cannot read property 'width' of null 

将所有脚本文件放在页面末尾并将所有 css 文件放在开头也是一个好习惯。它会增加页面的加载时间,因为如果 JS 文件在开头,则在下载这些文件之前,您的浏览器不会开始渲染。

您的代码应如下所示:

window.onload = function() 

var img = document.getElementById('my_image');

// Original
var width, height;

// Display
var d_width = img.width;
var d_height = img.height;

var updateDetail = function() 
    document
        .getElementById('display_size')
        .innerHTML = 'Display Size: ' + d_width + ' x ' + d_height;

    document
        .getElementById('native_size')
        .innerHTML = 'Original Size: ' + width + ' x ' + height;
;

// Using naturalWidth/Height
if (img.naturalWidth) 
    width = img.naturalWidth;
    height = img.naturalHeight;

    updateDetail();
 else 
    // Using an Image Object
    img = new Image();
    img.onload = function() 
        width = this.width;
        height = this.height;

        updateDetail();
    ;
    img.src = 'http://lorempixel.com/output/nature-q-c-640-480-3.jpg';



【讨论】:

是的,只要把你的代码放在 window.onload = function () code here 不客气。顺便说一句,考虑将最佳答案标记为已回答,这样其他人就不会无缘无故进入这里了。【参考方案2】:

将脚本标签移动到 HTML 中的图像之后。在图像进入页面之前执行脚本。

【讨论】:

你看剧本了吗? window.onload = function() var img = document.getElementById('my_image'); 不在加载中【参考方案3】:

将代码放在<body> 底部的<script type='text/javascript'> 中或使用window.onload。如果您有其他东西正在加载onload,第一个选项是您的最佳选择,否则使用此代码:

<script type='text/javascript'>
  (function()
    var pre = window.onload;
    onload = function()
      if(pre)pre();
      //other code here
    
  )();
</script>

这个例子可以用在你的&lt;head&gt;

【讨论】:

感谢您的回答!但我想学习 .js 文件上的代码:D【参考方案4】:
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
<script>
function readImage(file) 

    var reader = new FileReader();
    var image  = new Image();

    reader.readAsDataURL(file);  
    reader.onload = function(_file) 
        image.src    = _file.target.result;              // url.createObjectURL(file);
        image.onload = function() 
            var w = this.width,
                h = this.height,
                t = file.type,                           // ext only: // file.type.split('/')[1],
                n = file.name,
                s = ~~(file.size/1024) +'KB';
            $('#uploadPreview').append('<img src="'+ this.src +'"> '+w+'x'+h+' '+s+' '+t+' '+n+'<br>');
        ;
        image.onerror= function() 
            alert('Invalid file type: '+ file.type);
        ;      
    ;


$("#choose").change(function (e) 
    if(this.disabled) return alert('File upload not supported!');
    var F = this.files;
    if(F && F[0]) for(var i=0; i<F.length; i++) readImage( F[i] );
);
</script>
<meta charset=utf-8 />
<title>Multiple image upload with preview by Roko C.B.</title>
</head>
<body>
  <input type="file" id="choose" multiple="multiple" />
<br>
<div id="uploadPreview"></div>
</body>
</html>

【讨论】:

以上是关于获取图像宽度高度javascript的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JavaScript 获取图像大小(高度和宽度)?

使用 JavaScript 获取图像的真实宽度和高度? (在 Safari/Chrome 中)

获取在 JavaScript 中加载的图像的宽度

上传前获取文件大小、图片宽度和高度

怎样用 JavaScript 准确获取手机屏幕的宽度和高度

旋转后如何获取图像的宽度和高度?