【问题标题】:how do I get the width and height values from this object in javascript如何在 javascript 中从此对象获取宽度和高度值
【发布时间】:2020-04-24 19:13:05
【问题描述】:

我正在使用 dropzone 和cropper 上传文件。我不知道如何引用所选图像的宽度和高度。

这是相关代码:

Dropzone.options.myDropzone = {
    url: '{{ route('user.upload') }}',
    transformFile: function(file, done) {

        console.log(file);
        //console.log(file[height]);

        for (var property in file) {
            output = property + ': ' + file[property]+'; ';
            console.log(output);
        }

console.log(file) 行输出如下:

所以它有高度和宽度。

文件属性的循环输出如下:

有人知道如何在这里获取高度和宽度吗?

谢谢。

编辑

感谢@kmoser,这是现在可以运行的代码。

transformFile: function(file, done) {

    console.log(file['height']);

    var width = 0;
    var height = 0;
    var reader = new FileReader(); 
    reader.onload = (function(file) {
        var image = new Image();
        image.src = file.target.result;
        image.onload = function() { 
            height = this.height;
            width = this.width;
            console.log('1 '+width);
            console.log('1 '+height);
        }; 
    });
    reader.readAsDataURL(file)

    console.log('2 '+width);
    console.log('2 '+height);
    if (width > height)
    {
        console.log('wider');
    }
    else
    {
        console.log('tall');
    }

唯一的问题是 console.log('2 '+width);在 console.log('1 '+width); 之前输出;

我可以让它等待吗?

编辑 2

我也想通了。

async function readFileAsDataURL(file) {
    let result_base64 = await new Promise((resolve) => {

        let reader = new FileReader(); 
        reader.onload = (function(file) {
            var image = new Image();
            image.src = file.target.result;
            image.onload = function(file) { 
                height = this.height;
                width = this.width;
                console.log('1 '+width);
                console.log('1 '+height);
                resolve(reader.result);
            }; 
        });
        reader.readAsDataURL(file)

    });
    return result_base64;
}

Dropzone.options.myDropzone = {
    url: '{{ route('user.upload') }}',
    transformFile: async function(file, done) {

        let result = await readFileAsDataURL(file);

        console.log('2 '+width);
        console.log('2 '+height);
        if (width > height)
        {
            console.log('wider');
        }
        else
        {
            console.log('tall');
        }

效果很好!感谢您的帮助!

【问题讨论】:

标签: javascript dropzone.js


【解决方案1】:

最终解决方案

async function readFileAsDataURL(file) {
    let result_base64 = await new Promise((resolve) => {

        let reader = new FileReader(); 
        reader.onload = (function(file) {
            var image = new Image();
            image.src = file.target.result;
            image.onload = function(file) { 
                height = this.height;
                width = this.width;
                console.log('1 '+width);
                console.log('1 '+height);
                resolve(reader.result);
            }; 
        });
        reader.readAsDataURL(file)

    });
    return result_base64;
}

Dropzone.options.myDropzone = {
    url: '{{ route('user.upload') }}',
    transformFile: async function(file, done) {

        let result = await readFileAsDataURL(file);

        console.log('2 '+width);
        console.log('2 '+height);
        if (width > height)
        {
            console.log('wider');
        }
        else
        {
            console.log('tall');
        }

【讨论】:

  • 你从哪里给transformFile()打电话?
【解决方案2】:

要调用属性使用点

console.log(file.height);

【讨论】:

  • console.log(file["height"]); ?
  • 它不工作
【解决方案3】:

要访问高度和宽度,您可以使用它们中的任何一个。

console.log(file['height']); 

console.log(file.height);

两者都会给出相同的结果。 当您确定属性中存在某些值时使用点,而当您不确定它是否未定义或是否存在某些值时可以使用其他方式

【讨论】:

  • 你确定你正在安慰的文件是 JSON,可能在使用 dot 访问它之前你可以尝试做 .parse() 将其转换为 JSON
  • file.parse() 给了我这个错误:Uncaught TypeError: file.parse is not a function
  • 我在这里评论是因为我没有太多的声誉,回答你的问题:唯一的问题是 console.log('2 '+width);在 console.log('1 '+width); 之前输出您可以执行异步等待以等待它控制台并继续,由于 Js 的异步性质,您正面临此问题
  • 谢谢。知道怎么做吗?我搞不定。
  • 我看到你从异步等待中理解了我的意思。太好了!
猜你喜欢
  • 2012-10-10
  • 1970-01-01
  • 2013-05-04
  • 2019-12-26
  • 2014-05-20
  • 1970-01-01
  • 2011-09-16
  • 2023-04-09
相关资源
最近更新 更多