2017-04-27 33 views
0

1)下面是我怎樣,編碼我無法顯示基本64編碼圖像?

StringBuilder prefixToImageEncodedString=new StringBuilder("data:image/*;base64,"); 

InputStream in =new BufferedInputStream(new FileInputStream("D:/resources/Australia.jpg")); 
byte[] bytes=ImageIO.read(in).toString().getBytes(); 
String encodedfile = new String(Base64.encode(bytes), "UTF-8"); 
String imageBaseURL=prefixToImageEncodedString.append(encodedfile).toString(); 

我得到以下輸出的image--: -

data:image/*;base64,QnVmZmVyZWRJbWFnZUAxMzA5OWNjOiB0eXBlID0gNSBDb2xvck1vZGVsOiAjcGl4ZWxCaXRzID0gMjQgbnVtQ29tcG9uZW50cyA9IDMgY29sb3Igc3BhY2UgPSBqYXZhLmF3dC5jb2xvci5JQ0NfQ29sb3JTcGFjZUAxYzEyMWI2IHRyYW5zcGFyZW5jeSA9IDEgaGFzIGFscGhhID0gZmFsc2UgaXNBbHBoYVByZSA9IGZhbHNlIEJ5dGVJbnRlcmxlYXZlZFJhc3Rlcjogd2lkdGggPSAxODggaGVpZ2h0ID0gMTE5ICNudW1EYXRhRWxlbWVudHMgMyBkYXRhT2ZmWzBdID0gMg== 

在前端(AngularJS),當我通過顯示圖像設置字符串,它不顯示圖像。

<img src="{{countryImageNew}}" class="img1"> 

需要指導。

回答

2

這不是你如何從文件中讀取的字節:

byte[] bytes=ImageIO.read(in).toString().getBytes(); 

ImageIO.read返回一個BufferedImage。 BufferedImage的toString()方法不返回圖像的字節,事實上它不能,因爲Java字符串不是字節容器。它們包含字符,而不是字節。試圖假設一個字符串包含字節將導致您的字節損壞;具體來說,String.getBytes()encodes使用字符集編碼轉換的字符串代碼點。

根本不應該使用ImageIO。你沒有做任何與數據相關的圖像;你只是想字節:

byte[] bytes = Files.readAllBytes(Paths.get("D:/resources/Australia.jpg")); 

此外,由於字符串不是字節的安全容器中,不要使用new String(Base64.encode(bytes), "UTF-8")。這損壞你的一些字節。創建一個Base 64編碼串正確的方法是與encodeToString方法:

String encodedfile = Base64.getEncoder().encodeToString(bytes); 
+0

它的工作。我的編碼方式不對。謝謝。 –

+0

,但這encodeToString(字節[]字節)無論如何會將編碼文件放入字符串容器,對不對? –

+0

@YogeshSanchihar Base64編碼的數據是ASCII文本,所以存儲在字符串中是安全的。 – VGR

0

使用try

<img [src]="countryImageNew" class="img1"> 

括號結束語src告訴角度來替換變量值的值。否則,字符串'countryImageNew'被設置爲源,而不是變量的值。

+0

應當'NG-src'折角1.x的 – Sajan

+0

你不需要'{{''}}' – Powkachu

+0

仍然無法工作。 –

0

使用

<img ng-attr-src="{{countryImageNew}}" class="img1"> 

或者

<img ng-src="{{countryImageNew}}" class="img1"> 
+0

我試過了。它沒有工作。 –

2

<img src="data:image/*;base64,QnVmZmVyZWRJbWFnZUAxMzA5OWNjOiB0eXBlID0gNSBDb2xvck1vZGVsOiAjcGl4ZWxCaXRzID0gMjQgbnVtQ29tcG9uZW50cyA9IDMgY29sb3Igc3BhY2UgPSBqYXZhLmF3dC5jb2xvci5JQ0NfQ29sb3JTcGFjZUAxYzEyMWI2IHRyYW5zcGFyZW5jeSA9IDEgaGFzIGFscGhhID0gZmFsc2UgaXNBbHBoYVByZSA9IGZhbHNlIEJ5dGVJbnRlcmxlYXZlZFJhc3Rlcjogd2lkdGggPSAxODggaGVpZ2h0ID0gMTE5ICNudW1EYXRhRWxlbWVudHMgMyBkYXRhT2ZmWzBdID0gMg==">

我覺得編碼是壞否則上述方式必須工作。 我建議做Base64編碼類似 -

Base64.encode(FileUtils.readFileToByteArray(file));

+0

你是對的.. –