簡體   English   中英

以角度 2 將圖像轉換為 base64

[英]Converting an image to base64 in angular 2

將圖像轉換為 angular 2 中的 base64,圖像從本地上傳。 當前正在使用 fileLoadedEvent.target.result。 問題是,當我通過 REST 服務將此 base64 字符串發送到 java 時,它無法對其進行解碼。 當我用免費的在線編碼器-解碼器嘗試這個 base64 字符串時,我也看不到解碼的圖像。 我也嘗試使用畫布。 我沒有得到正確的結果。 有一件事是確定得到的 base64 字符串不正確,我需要為此添加任何包嗎? 或者在 angular 2 中是否有任何特定的方式將圖像編碼為 base64,就像它在 angular 1 - angular-base64-upload 包中一樣。

請在我的示例代碼下方找到

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

用於 base64 字符串的工作 plunkr

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

我稍微修改了 Parth Ghiya 的答案,所以你可以上傳 1- 多張圖片,它們都作為 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));
}

HTML文件

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

另一個適用於 base64 的解決方案類似於這篇文章https://stackoverflow.com/a/36281449/6420568

就我而言,我做到了

getImagem(readerEvt, midia){
    //console.log('change no input file', readerEvt);
    let file = readerEvt.target.files[0];
    var reader = new FileReader();
    reader.readAsDataURL(file);
    reader.onload = function () {
        //console.log('base64 do arquivo',reader.result);
        midia.binario = btoa(reader.result);
        //console.log('base64 do arquivo codificado',midia.binario);
    };
    reader.onerror = function (error) {
        console.log('Erro ao ler a imagem : ', error);
    };
}

和 html 組件

<input type="file" class="form-control"  (change)="getImagem($event, imagem)">

<img class="img-responsive"  src="{{imagem.binario | decode64 }}" alt="imagem..." style="width: 200px;"/>

為了顯示圖像,我創建了管道 decode64

@Pipe({
  name: 'decode64'
})
export class Decode64Pipe implements PipeTransform {
  transform(value: any, args?: any): any {
    let a = '';
    if(value){
       a = atob(value);
    }
    return a;
  }
}

您是否嘗試過使用 btoa 或 Crypto.js 將圖像編碼為 base64 ?

鏈接到cryptojs - https://code.google.com/archive/p/crypto-js/

var imgSrcData = window.btoa(fileLoadedEvent.target.result);

var imgSrcData = CryptoJS.enc.Base64.stringify(fileLoadedEvent.target.result);

這是來自 Parth Ghiya 的相同代碼,但以 ES6/TypeScript 格式編寫

picture: string;
handleFileSelect(evt){
    const file = evt.target.files[0];
    if (!file) {
        return false;
    }
    const reader = new FileReader();
    
    reader.onload = () => {
        this.picture = reader.result as string;
    };

    console.log(btoa(this.picture));
}

我想出了一個用 json 調用 post 方法的 HTTP 請求的答案

1.event 參數來自 HTML 輸入標簽。
2. self.imagesrc 是一個組件變量,用於存儲數據並在頭文件中使用它,我們需要將“this”轉換為 self 變量並在閱讀器中使用它。 加載功能
3. this.server是我在這個組件中使用的API調用服務組件變量

UploadImages(event) {
    var file = event.target.files[0];
    var reader = new FileReader();
    reader.readAsDataURL(file);
    var self = this;
    reader.onload = function() {
      self.imageSrc = reader.result.toString();
    };

    var image_data = {
      authentication_token: this.UD.getAuth_key ,
      fileToUpload: this.imageSrc,
      attachable_type: "Photo"
    };

    this.server.photo_Upload(image_data).subscribe(response => {
      if (response["success"]) {
        console.log(response);
      } else {
        console.log(response);
      }
    });
  }

請考慮使用這個包: image-to-base64

將圖像生成為 base64,您可以使用路徑或 url 進行生成。

或者這個接受的答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM