【问题标题】:Javascript - Image dimensions form multiple file inputJavascript - 图像尺寸形成多个文件输入
【发布时间】:2019-05-28 12:06:58
【问题描述】:

无法获得尺寸 - 高度和宽度:结果始终是“未定义”。我显然不明白 JavaScript 在这里是如何工作的。但是,我能够显示该文件。

PHP文件包含如下输入标签,选择多张图片:

$output = "<input class=\"wpisNazwyWkladow\" 
id=\"wpis_tabela_zdjecie_wybieracz\" type=\"file\" multiple 
name=\"ads_photofile\">";

这是有问题的 JavaScript 脚本:

var input = $(this); // works
var ilosc = input[0].files.length;
var pliki = input[0].files;

for (var i = 0; i < ilosc; i++)
{
   var tmppath = URL.createObjectURL(pliki[i]); // works - displays
   var nazwa = pliki[i].name; // works
   var tempRozmiar = pliki[i].size; // works
   var typ = pliki[i].type; // typ fotki // works

   // The part that does not work:
   tempWysokosc = tmppath.height;
   tempSzerokosc = tmppath.width;

}

我期待“tempWysokosc”和“tempSzerokosc”的整数值。

需要帮助。

【问题讨论】:

    标签: javascript html


    【解决方案1】:

    在您的代码中tmppathURL.createObjectURL() 的结果,即一个字符串。
    这个字符串显然没有width 也没有height。 您想要的是从加载的&lt;img&gt; 元素中检索这些值,该元素的src 将设置为tmppath。但是这个过程总是异步的,所以你可能需要重构你的代码来接受这种异步性:

    input.oninput = e => {
    const ilosc = input.files.length;
    const pliki = input.files;
    
    for (let i = 0; i < ilosc; i++)
    {
       const tmppath = URL.createObjectURL(pliki[i]); // works - displays
       const nazwa = pliki[i].name; // works
       const tempRozmiar = pliki[i].size; // works
       const typ = pliki[i].type; // typ fotki // works
       
       const img = new Image();
       // async
       img.onload = e => {
        const tempWysokosc = img.height;
        const tempSzerokosc = img.width;
        console.log({
          name: nazwa,
          size: tempRozmiar,
          type: typ,
          width: tempWysokosc,
          height: tempSzerokosc
        });
       };
       img.src = tmppath;
      }
    
    }
    &lt;input id="input" type="file" accept="image/*" multiple&gt;

    请注意,如果您有很多想要检索其尺寸的此类图像,您可能会对this Q/A 感兴趣,它公开了一种通过直接读取文件来获取它的方法,避免解码图像的巨大开销。

    【讨论】:

    • 非常有趣。这是什么 "= e =>" ?我会试试的。
    • 这是 ES6 中引入的Arrow Functions。您可以将其重写为 function(e) {
    【解决方案2】:

    在您询问高度时,图像可能尚未完全渲染,因此请在 onload 事件之后设置宽度和高度:

    tmppath.onload=function() {
        tempWysokosc = tmppath.height;
        tempSzerokosc = tmppath.width;
    }
    

    类似答案:Can't get height and width of image in javascript

    【讨论】:

    • 这是一个有趣的定位,因为此时图片根本没有加载,我试图从包含所有发送到的文件的数组中获取图像文件的尺寸有问题的 JavaScript 文件函数 - 它们稍后显示。我试图找到一种方法来获取图像的尺寸,假设这是可能的(我现在猜测它不是),在临时 URL 被设置为稍后的 标签的“src”属性之前。
    • 你抓取的数据只是一张图片吗?
    • 应该是图片,它们是一起上传的,实际上是作为文件输入的。
    • 在那种情况下,我会使用@Kaiido的回答
    猜你喜欢
    • 1970-01-01
    • 2011-11-19
    • 2011-08-03
    • 2015-09-20
    • 2017-07-11
    • 2010-11-21
    • 2023-04-05
    • 1970-01-01
    相关资源
    最近更新 更多