Tìm kiếm trang web

javascript - Chuyển đổi hình ảnh sang base64 trong angular 2


Chuyển đổi hình ảnh sang base64 trong Angular 2, hình ảnh được tải lên từ máy local. Hiện tại tôi đang sử dụng fileLoadedEvent.target.result. Vấn đề là, khi tôi gửi chuỗi base64 này qua các dịch vụ REST đến Java, nó không thể giải mã được. Khi tôi thử chuỗi base64 này với bộ mã hóa-giải mã trực tuyến miễn phí, tôi cũng không thể thấy hình ảnh được giải mã. Tôi đã thử dùng canvas nhưng cũng không có kết quả đúng. Một điều chắc chắn là chuỗi base64 tôi nhận được không đúng, liệu tôi có cần thêm gói nào cho việc này không? Hoặc trong Angular 2 có cách đặc biệt nào để mã hóa hình ảnh sang base64 như trong Angular 1 - gói angular-base64-upload không?

Vui lòng xem bên dưới mã mẫu của tôi

onFileChangeEncodeImageFileAsURL(event:any,imgLogoUpload:any,imageForLogo:any,imageDiv:any)
{
    var filesSelected = imgLogoUpload.files;
    var self = this;
    if (filesSelected.length > 0) {
      var fileToLoad = filesSelected[0]; 

      //Reading Image file, encode and display
       var  reader: FileReader = new FileReader();
       reader.onloadend = function(fileLoadedEvent:any) {

       //SECOND METHO
       var imgSrcData = fileLoadedEvent.target.result; // <--- data: base64 

        var newImage = imageForLogo;
        newImage.src = imgSrcData;
        imageDiv.innerHTML = newImage.outerHTML;

      }
      reader.readAsDataURL(fileToLoad);
    }
}

Câu trả lời #1

Plunkr hoạt động cho chuỗi base64

https://plnkr.co/edit/PFfebmnqH0eQR9I92v0G?p=preview

  handleFileSelect(evt){
      var files = evt.target.files;
      var file = files[0];

    if (files && file) {
        var reader = new FileReader();

        reader.onload =this._handleReaderLoaded.bind(this);

        reader.readAsBinaryString(file);
    }
  }



  _handleReaderLoaded(readerEvt) {
     var binaryString = readerEvt.target.result;
            this.base64textString= btoa(binaryString);
            console.log(btoa(binaryString));
    }

Câu trả lời #2

Tôi đã chỉnh sửa câu trả lời của Parth Ghiya một chút, vì vậy bạn có thể tải lên từ 1 đến nhiều hình ảnh, và tất cả chúng đều được lưu trong một mảng dưới dạng chuỗi mã hóa base64

base64textString = [];

onUploadChange(evt: any) {
  const file = evt.target.files[0];

  if (file) {
    const reader = new FileReader();

    reader.onload = this.handleReaderLoaded.bind(this);
    reader.readAsBinaryString(file);
  }
}

handleReaderLoaded(e) {
  this.base64textString.push('data:image/png;base64,' + btoa(e.target.result));
}

tệp HTML

<input type="file" (change)="onUploadChange($event)" accept=".png, .jpg, .jpeg, .pdf" />
<img *ngFor="let item of base64textString"  src={{item}} alt="" id="img">

Bài viết liên quan