java如何通過(guò)流讀取圖片做base64編碼
通過(guò)流讀取圖片做base64編碼
在web頁(yè)面上,顯示圖片,一般是給出圖片地址,然后以u(píng)rl的方式顯示,但是有一些特殊情況,如果我們的圖片保存在ftp服務(wù)器上,不能外部輕易訪問(wèn),但是可以通過(guò)用戶名密碼的方式登錄ftp服務(wù)器,然后下載圖片,但是這種方式需要將圖片另存一份,然后以路徑或者url的方式返回給前端頁(yè)面展示,有一種方式,讀取圖片流數(shù)據(jù),然后將二進(jìn)制數(shù)據(jù)做base64編碼,最后交給頁(yè)面顯示。
<img src="data:image/png;base64,xxxxxxxxxxxxxxxxxxxxxxx"/>
就可以顯示圖片了,目前很多地方都使用這種方式展示圖片。
案例
下面是一個(gè)java讀取圖片流數(shù)據(jù),并通過(guò)base64編碼工具編碼的代碼:
package com.xxx.test; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import sun.misc.BASE64Encoder; public class ReadImageInputStreamDemo { public static void main(String[] args) { InputStream inputStream = null; ByteArrayOutputStream outputStream = null; try { String fileName = "/Users/buejee/Downloads/電路.jpeg"; String mediaType = fileName.substring(fileName.lastIndexOf(".")+1); File imageFile= new File(fileName); boolean exists = imageFile.exists(); if(exists) { inputStream = new FileInputStream(fileName); outputStream = new ByteArrayOutputStream(); int len; byte[] buf = new byte[1024]; while((len = inputStream.read(buf))!=-1) { outputStream.write(buf, 0, len); } outputStream.flush(); byte[] data = outputStream.toByteArray(); BASE64Encoder encoder = new BASE64Encoder(); String encodeStr = encoder.encode(data); encodeStr = "data:image/"+mediaType+";base64,"+encodeStr; System.out.println(encodeStr); } } catch (Exception e) { e.printStackTrace(); }finally { try { if(inputStream!=null) { inputStream.close(); } if(outputStream!=null) { outputStream.close(); } } catch (IOException e) { e.printStackTrace(); } } } }
運(yùn)行代碼,可以看到打印信息:
這個(gè)圖片原圖是這樣的:
生成的base64編碼經(jīng)過(guò)加工,添加data:image/jpeg;base64,然后就可以放到img標(biāo)簽上作為圖片顯示了。
做一個(gè)簡(jiǎn)單的html頁(yè)面,內(nèi)容如下:
最后,通過(guò)瀏覽器打開(kāi)這個(gè)網(wǎng)頁(yè):
這樣生成的圖片base64字符串會(huì)很長(zhǎng),在拷貝的時(shí)候可能會(huì)因?yàn)榭崭駟?wèn)題導(dǎo)致最終顯示失敗。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
全網(wǎng)最全最細(xì)的jmeter接口測(cè)試教程以及接口測(cè)試流程(入門(mén)教程)
本文主要介紹了全網(wǎng)最全最細(xì)的jmeter接口測(cè)試教程以及接口測(cè)試流程,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11解決@Autowired報(bào)錯(cuò)Could not autowire. No bea
介紹了在IDEA中使用@Autowired報(bào)錯(cuò)Couldnot autowire. No beans of 'XXX' type found的解決方法,原因是@Autowired在注入service時(shí),由于service接口沒(méi)有實(shí)現(xiàn)類(lèi),而mybatis僅需提供Dao接口,導(dǎo)致@Autowired無(wú)法識(shí)別2024-12-12詳解java中finalize的實(shí)現(xiàn)與相應(yīng)的執(zhí)行過(guò)程
在常規(guī)的java書(shū)籍中,即會(huì)描述 object的finalize方法是用于一些特殊的對(duì)象在回收之前再做一些掃尾的工作,但是并沒(méi)有說(shuō)明此是如何實(shí)現(xiàn)的.本篇從java的角度(不涉及jvm以及c++),有需要的朋友們可以參考借鑒。2016-09-09Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之教室預(yù)訂管理系統(tǒng)的實(shí)現(xiàn)
這是一個(gè)使用了java+SpringBoot+Maven+Vue+mysql開(kāi)發(fā)的教室預(yù)訂管理系統(tǒng),是一個(gè)畢業(yè)設(shè)計(jì)的實(shí)戰(zhàn)練習(xí),具有教室預(yù)訂管理該有的所有功能,感興趣的朋友快來(lái)看看吧2022-02-02為spring get請(qǐng)求添加自定義的參數(shù)處理操作(如下劃線轉(zhuǎn)駝峰)
這篇文章主要介紹了為spring get請(qǐng)求添加自定義的參數(shù)處理操作(如下劃線轉(zhuǎn)駝峰),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09SpringBoot關(guān)于List集合的校驗(yàn)方式
這篇文章主要介紹了SpringBoot關(guān)于List集合的校驗(yàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07