Получить ширину и высоту изображения с помощью ng2-file-upload - PullRequest
0 голосов
/ 07 декабря 2018

Я хочу получить и проверить ширину и высоту загруженного изображения, используя ng2-file-upload и Angular 6.

Пока мой код:

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;
}

иHTML:

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

Я искал решения, но у меня ничего не получалось.Нашел идею использовать

Upload.imageDimensions(file).then()

здесь .Но я не понимаю, как / где импортировать «Загрузить».Также найдено решение добавить

ngf-min-height="1"

во входной элемент, но я не могу найти, где я могу «поймать» ошибку, если размер входного изображения неправильный.

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Наконец-то я получил эту работу с некоторыми изменениями в посте Тричетрихе:

    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);
    });
  }

и html:

 <input type="file" (change)="change()">
0 голосов
/ 07 декабря 2018

Преобразуйте ваш файл в base64 и создайте изображение с этой базой в качестве источника.Во время ловушки load вы можете получить размер изображения.Вот рабочий фрагмент!

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()">
...