ztefanie
ztefanie

Reputation: 850

Get width and height of image with ng2-file-upload

I want to get and check the width and height of an uploaded image using ng2-file-upload and Angular 6.

My code so far is:

constructor() {
    this.uploader = this.initializeUploader("url");
}

public uploader;


private initializeUploader(url: string): FileUploader {
    const uploadOptions: FileUploaderOptions = {
        allowedMimeType: ['image/jpeg', 'image/png' ],

    }
    const uploader = new FileUploader(uploadOptions);

    uploader.onAfterAddingFile = item => {
        console.log(item);
        //Want to get width here
    }

    return uploader;
}

and the HTML:

<input type="file" ng2FileSelect [uploader]="uploader" />

I was looking for solutions but nothing worked for me. Found the idea to use

Upload.imageDimensions(file).then()

here. But i don't understand how/where to import 'Upload'. Also found the solution to add

ngf-min-height="1"

in the input-element but i can't find where i can "catch" the error, if the size of the input image is wrong.

Upvotes: 0

Views: 1977

Answers (2)

ztefanie
ztefanie

Reputation: 850

Finally i got this working with some changes of the post of trichetriche:

    public change() {
    const input = document.querySelector('input');
    const file = input.files[0];

    this.getBase64(file).then(base64 => {
      const img = new Image();
      img.onload = () => console.log(img.width, img.height);
      img.src = base64.toString();
    });
  }

  public getBase64(file) {
    return new Promise((resolve, reject) => {
      const reader = new FileReader();
      reader.readAsDataURL(file);
      reader.onload = () => resolve(reader.result);
      reader.onerror = error => reject(error);
    });
  }

and html:

 <input type="file" (change)="change()">

Upvotes: 0

user4676340
user4676340

Reputation:

Transform your file to a base64, and create an image with that base as the source. During the load hook, you can get the size of the image. Here is a working snippet !

function change() {
  const input = document.querySelector('input');
  const file = input.files[0];
  
  getBase64(file).then(base64 => {
    const img = new Image();
    img.onload = () => console.log(img.width, img.height);
    img.src = base64;
  });
}

function getBase64(file) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.readAsDataURL(file);
    reader.onload = () => resolve(reader.result);
    reader.onerror = error => reject(error);
  });
}
<input type="file" onchange="change()">

Upvotes: 2

Related Questions