通过输入[Javascript]获取图像的比例

FoolischEx

我在以下问题上苦苦挣扎了好几个小时:我通过输入字段收到一张图像,需要验证该比率是否在1.90和1.92之间。我需要做的是创建一个Reader,创建一个Image,从加载的图像中获取宽度和高度,并返回true / false。

现在,如前所述,文件需要加载时间,因此我需要某种方式来异步处理它。不幸的是,我是Promises / Asyncs的初学者,因此需要一些主要帮助...

以下部分只是功能链的开始-我检查是否已上传图像(选中了单选按钮。

... 
if (document.editWeb.radio_share[1].checked || document.editWeb.radio_share[2].checked) {
        let promise = processFile();
        promise.then(function(data){
            if (!data){return false;}
        });
}
...

我的processFile函数。对于我的理解,这返回了一个Promise,这就是为什么我尝试在上端代码中截取该Promise并为获取的“数据”返回false的原因。

async function processFile(){
    try {
        let contentBuffer = await getReader();
        return new Promise((resolve, reject) => {
            let img = new Image;
            img.onload = () => {
            let ratio = img.width / img.height;
                if (ratio > 1.92 ||ratio < 1.90 ){
                    resolve(false);
                }else {
                    resolve(true);
                }

            };

            console.log(contentBuffer);
        })

    } catch(err) {
        console.log(err);
    }

}

让我获得读者的功能。

function getReader() {
    let x = document.getElementById("share_file").files[0];

    return new Promise((resolve, reject) => {
        let reader = new FileReader();
        reader.onload = () => {
            resolve(reader.result);
        };

        reader.onerror = reject;

        reader.readAsDataURL(x);
    })

后续:所有这些都称为

<input id="saveAndStay" type="submit" name="buttonSaveAndStay" onclick="return checkRequirements(lang , data")>

之后我们有了

function checkRequirements(lang , data) {
...
if (document.editWeb.radio_share[1].checked === true || document.editWeb.radio_share[2].checked) {
        let promise = processFile();
        promise.then(function(data){
            if (!data){return false;}
        });
    }
}

}

需要注意的重要一点是,如果数据返回false-checkRequirements也应该返回false,以便停止将请求发送到服务器,而是用“此图像的比率错误”警告用户。

我希望这可以清除一切。

布莱克斯

您忘记了该processFile功能中最重要的部分:)

img.src = contentBuffer;

工作演示:

var fileInput = document.getElementById("share_file");

fileInput.addEventListener('change', function() {
  if ("some boxes are checked blah blah") {
    processFile()
      .then(ok => {
        if (!ok) {
          alert("The ratio needs to be between 1.90 and 1.92");
        } else {
          alert("Everything ok!");
        }
      });
  }
});

function processFile() {
  return getReader()
    .then(dataUrl => {
      return new Promise((resolve, reject) => {
        const img = new Image;
        img.onload = () => {
          let ratio = img.width / img.height;
          resolve(ratio <= 1.92 && ratio >= 1.90);
        };
        img.onerror = reject;
        img.src = dataUrl;
      });
    }).catch(err => {
      console.error(err);
      return false;
    });
}

function getReader() {
  const x = fileInput.files[0];

  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.onload = (e) => resolve(e.target.result);
    reader.onerror = reject;
    reader.readAsDataURL(x);
  })
}
<input type='file' id="share_file" />
<p>Demo files you can try uploading:</p>
<img src="https://i.imgur.com/O4tveTG.jpg" />
<img src="https://i.imgur.com/pMavCF8.jpg" />

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ffmpeg比例输入图像

来自分类Dev

从移动目录获取图像比例

来自分类Dev

如何通过Javascript获取输入字段的值?

来自分类Dev

无法通过JavaScript从输入中获取值

来自分类Dev

如何通过Javascript获取输入字段的值?

来自分类Dev

如何通过URL获取图像?(JavaScript)

来自分类Dev

通过javascript更改页面比例

来自分类Dev

无法通过javascript获取输入框的输入值

来自分类Dev

通过JavaScript设置HTML表单图像输入的'capture'属性

来自分类Dev

获取图像的路径,宽度和高度,并通过上传图像将其放入输入字段中

来自分类Dev

如何通过按下向上箭头(Javascript)获取最新输入

来自分类Dev

通过用户输入JavaScript获取当前年龄

来自分类Dev

如何通过javascript从html内容获取图像标签的域名

来自分类Dev

通过javascript onclick增加变换比例

来自分类Dev

如何通过css不成比例地缩放图像?

来自分类Dev

通过保留比例和最大尺寸使图像宽度适合屏幕

来自分类Dev

回形针-通过图像比例进行条件裁切

来自分类Dev

如何通过css不成比例地缩放图像?

来自分类Dev

无法获取通过Javascript设置的输入值,然后无法通过Blazor按钮进行读取单击

来自分类Dev

通过Ajax获取表单输入

来自分类Dev

如何通过组装获取输入

来自分类Dev

通过指针数组获取输入

来自分类Dev

通过Ajax获取表单输入

来自分类Dev

通过 xPath 获取输入文本

来自分类Dev

烧瓶:通过帖子获取图像

来自分类Dev

Android通过URL获取图像

来自分类Dev

载波通过url获取图像

来自分类Dev

Xamarin通过图像获取ResourceId

来自分类Dev

Android通过URL获取图像