如何使用angular-file-upload获取图像尺寸

时间:2014-08-26 01:09:33

标签: angularjs

我目前正在使用angular-file-upload指令,而且我几乎使用了演示中的确切代码。

我需要在那里添加一个步骤来测试图像的尺寸,我目前只能通过jQuery / javascript来做。

只是想知道是否有"棱角分明的"在上传图像之前检查图像尺寸的方法是什么?

$scope.uploadImage = function($files) {
    $scope.selectedFiles = [];
    $scope.progress = [];

    if ($scope.upload && $scope.upload.length > 0) {
        for (var i = 0; i < $scope.upload.length; i++) {
            if ($scope.upload[i] !== null) {
                $scope.upload[i].abort();
            }
        }
    }
    $scope.upload = [];
    $scope.uploadResult = [];
    $scope.selectedFiles = $files;
    $scope.dataUrls = [];

    for ( var j = 0; j < $files.length; j++) {
        var $file = $files[j];
        if (/*$scope.fileReaderSupported && */$file.type.indexOf('image') > -1) {
            var fileReader = new FileReader();
            fileReader.readAsDataURL($files[j]);
            var loadFile = function(fileReader, index) {
                fileReader.onload = function(e) {
                    $timeout(function() {
                        $scope.dataUrls[index] = e.target.result;

                        //------Suggestions?-------//
                        $('#image-upload-landscape').on('load', function(){
                            console.log($(this).width());
                        });
                        //-------------------------//
                    });
                };
            }(fileReader, j);
        }
        $scope.progress[j] = -1;
        if ($scope.uploadRightAway) {
            $scope.start(j);
        }

    }
};

2 个答案:

答案 0 :(得分:6)

我认为你可以通过以下方式实现:

var reader = new FileReader();
reader.onload = onLoadFile;
reader.readAsDataURL(filtItem._file);

function onLoadFile(event) {
    var img = new Image();
    img.src = event.target.result;
    console.log(img.width, img.height)
}

这是从https://github.com/nervgh/angular-file-upload/blob/master/examples/image-preview/directives.js复制的代码段。

我认为这更像是angularjs。但是,您可能需要对其进行修改以满足您的要求。

答案 1 :(得分:0)

试试此代码

uploader.filters.push({
        name: 'asyncFilter',
        fn: function(item /*{File|FileLikeObject}*/ , options, deferred) {
            setTimeout(deferred.resolve, 1e3);
             var reader = new FileReader();
            reader.onload = onLoadFile;
             reader.readAsDataURL(item);
                function onLoadFile(event) {
                    var img = new Image();
                    img.onload = function(scope) {
                       console.log(img.width,img.height);
                    }
                    img.src = event.target.result;
                }
        }

    });