一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語(yǔ)言 - JAVA教程 - Java 8實(shí)現(xiàn)圖片BASE64編解碼

Java 8實(shí)現(xiàn)圖片BASE64編解碼

2020-06-26 15:21daisy JAVA教程

Java 8終于有了標(biāo)準(zhǔn)的方法來(lái)處理base64的編解碼。Java一直缺少BASE64編碼API,以至于通常在項(xiàng)目開(kāi)發(fā)中會(huì)選用第三方的API實(shí)現(xiàn)。但是,Java 8實(shí)現(xiàn)了BASE64編解碼API,它包含到j(luò)ava.util包。下面這篇文章我會(huì)對(duì)Java 8的BASE64編解碼做一個(gè)詳細(xì)的

前言

Basic編碼是標(biāo)準(zhǔn)的BASE64編碼,用于處理常規(guī)的需求:輸出的內(nèi)容不添加換行符,而且輸出的內(nèi)容由字母加數(shù)字組成。

最近做了個(gè)Web模版,其中想用Base64背景圖。雖然網(wǎng)絡(luò)上有現(xiàn)成的編碼器,但總想自己實(shí)現(xiàn)一個(gè)??赡芎芏嗳瞬恢溃琂DK 8新提供的Base64類可以非常方便地處理此項(xiàng)任務(wù):Base64 (Java Platform SE 8 ) 。

一、先選一張圖片

mm.png

Java 8實(shí)現(xiàn)圖片BASE64編解碼

二、建立HTML演示文件模版

test.html

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!DOCTYPE html>
<html>
<head lang="zh-CN">
 <meta charset="UTF-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width">
 <title>測(cè)試Base64編碼 - 2gua</title>
 <style type="text/css">
  #thisImage {
   margin: 20px auto;
   -webkit-border-radius: 50%;
   border-radius: 50%;
   background: url() no-repeat center center;
   background-size: contain;
   border: 8px solid #EDEDED;
   width: 128px;
   height: 128px;
  }
 </style>
</head>
<body>
 <div id="thisImage"></div>
</body>
</html>

注意url()為空,稍后我們要把生成的Base64編碼字符串植入其中。

三、編寫(xiě)Java程序

這里將實(shí)現(xiàn)Base64編解碼的雙向?qū)崿F(xiàn),盡管本例中只需要用到Base64解碼。Java程序的注釋很清楚了,直接上代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
`Base64Trans.java`
 
package com.gua;
 
/**
 * Created by 2gua on 2014/10/5.
 */
 
import java.io.IOException;
import java.nio.file.*;
import java.util.Base64;
 
import static java.lang.System.out;
 
public class Base64Trans {
 
 /**
  * 從圖片文件中讀取內(nèi)容。
  * @param path 圖片文件的路徑。
  * @return 二進(jìn)制圖片內(nèi)容的byte數(shù)組。
  *
  */
 private byte[] readFile(Path path) {
  byte[] imageContents = null;
 
  try {
   imageContents = Files.readAllBytes(path);
  } catch (IOException e) {
   out.println("讀取文件出錯(cuò)了...~zZ");
  }
 
  return imageContents;
 }
 
 /**
  * 編碼圖片文件,編碼內(nèi)容輸出為{@code String}格式。
  * @param imageContents 二進(jìn)制圖片內(nèi)容的byte數(shù)組。
  * @return {@code String}格式的編碼內(nèi)容。
  */
 private String base64Encoding(byte[] imageContents) {
  if(imageContents != null)
   return Base64.getEncoder().encodeToString(imageContents);
  else return null;
 }
 
 /**
  * 解碼圖片文件。
  * @param imageContents 待解碼的圖片文件的字符串格式。
  * @return 解碼后圖片文件的二進(jìn)制內(nèi)容。
  */
 private byte[] base64Decoding(String imageContents) {
  if(imageContents != null)
   return Base64.getDecoder().decode(imageContents);
  else return null;
 }
 
 /**
  * 將解碼后的二進(jìn)制內(nèi)容寫(xiě)入文件中。
  * @param path 寫(xiě)入的路徑。
  * @param imageContents 解碼后的二進(jìn)制內(nèi)容。
  */
 private void writeFile(Path path, byte[] imageContents) {
  if(imageContents != null)
   try {
    Files.write(path, imageContents, StandardOpenOption.CREATE);
   } catch (IOException e) {
    out.println("寫(xiě)入文件出錯(cuò)了...~zZ");
   }
 }
 
 public static void main(String[] args) {
  Base64Trans bt = new Base64Trans();
  String encodingString = bt.base64Encoding(bt.readFile(Paths.get("D:/temp/mm.png")));
 
  out.println("二進(jìn)制圖片文件Base64碼:" + encodingString);
 
  bt.writeFile(Paths.get("D:/temp/mm2.png"), bt.base64Decoding(encodingString));
 
  out.println("任務(wù)結(jié)束...");
 }
}

程序結(jié)果如下:

?
1
2
3
4
二進(jìn)制圖片文件Base64碼:iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAABGdBTUEAALGPC/xhBQAAACB
...(此處省略n多字符)
8xNTIwL2Vhc3lpY29uLmNuL2Vhc3lpY29uLmNuL2Nkbi1pbWcuZWFzeWljb24uY24vcG5nLzEwODcwLzEwODcwODYucG5nPLffdwAAAABJRU5ErkJggg==
任務(wù)結(jié)束...

四、最后設(shè)置

要在HTML文件模版test.html中引用Base64編碼內(nèi)容,還有一步工作要做:將以下內(nèi)容加到Base64編碼內(nèi)容的開(kāi)頭處:data:image/png;base64,

最終結(jié)果也就是類似這樣:

?
1
2
3
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAABGdBTUEAALGPC/xhBQAAACB
...(此處省略n多字符)
8xNTIwL2Vhc3lpY29uLmNuL2Vhc3lpY29uLmNuL2Nkbi1pbWcuZWFzeWljb24uY24vcG5nLzEwODcwLzEwODcwODYucG5nPLffdwAAAABJRU5ErkJggg==

之后,將這一長(zhǎng)串字符串植入以下代碼行的url()括號(hào)中:

?
1
background: url() no-repeat center center;

如果圖片是JPG格式,請(qǐng)將上面data:image/png;base64中的png改為jpeg,如果是GIF格式就改為gif。好了,刷新頁(yè)面,看看結(jié)果:

Java 8實(shí)現(xiàn)圖片BASE64編解碼

有圓圈圈是因?yàn)槲覀冊(cè)O(shè)置了一些CSS3特效。

我們還實(shí)現(xiàn)了Base64解碼,并生成一個(gè)新的mm2.png圖片,在圖片瀏覽器中打開(kāi)mm2.png,效果應(yīng)該跟mm.png是一模一樣的。

其實(shí),每次JDK新版發(fā)布,都蘊(yùn)藏著許多大大小小的更新,只是你是否有意去發(fā)掘它而已。Java總是那么健壯和讓人放心。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。

延伸 · 閱讀

精彩推薦
  • JAVA教程Java如何從服務(wù)器中下載圖片

    Java如何從服務(wù)器中下載圖片

    這篇文章主要為大家詳細(xì)介紹了Java如何從服務(wù)器中下載圖片,代碼中附有詳細(xì)注釋,感興趣的小伙伴們可以參考一下 ...

    java教程網(wǎng)2962020-04-30
  • JAVA教程java中transient關(guān)鍵字用法分析

    java中transient關(guān)鍵字用法分析

    這篇文章主要介紹了java中transient關(guān)鍵字用法,以實(shí)例形式分析了java中transient關(guān)鍵字的功能及使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下 ...

    Benjamin_whx4242019-12-09
  • JAVA教程Java用戶登錄驗(yàn)證代碼

    Java用戶登錄驗(yàn)證代碼

    本文給大家使用java代碼實(shí)現(xiàn)用戶登錄驗(yàn)證功能,當(dāng)用戶輸入三次錯(cuò)誤后,用戶不可以再次登錄的。具體實(shí)現(xiàn)代碼,大家可以參考下本教程 ...

    xbyk3382020-06-07
  • JAVA教程Java中break、continue、return語(yǔ)句的使用區(qū)別對(duì)比

    Java中break、continue、return語(yǔ)句的使用區(qū)別對(duì)比

    這篇文章主要介紹了Java中break、continue、return語(yǔ)句的使用區(qū)別對(duì)比,本文用非常清爽簡(jiǎn)明的語(yǔ)言總結(jié)了這三個(gè)關(guān)鍵字的使用技巧,并用一個(gè)實(shí)例對(duì)比使用結(jié)果...

    junjie2462019-12-20
  • JAVA教程一道關(guān)于java異常處理的題目

    一道關(guān)于java異常處理的題目

    本文給大家分享一道關(guān)于java異常處理的題目,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下...

    荊小八3062020-06-18
  • JAVA教程java隨機(jī)抽取指定范圍不重復(fù)的數(shù)字

    java隨機(jī)抽取指定范圍不重復(fù)的數(shù)字

    這篇文章主要介紹了java隨機(jī)抽取指定范圍不重復(fù)的數(shù)字的相關(guān)資料,需要的朋友可以參考下 ...

    Healtheon3792020-05-09
  • JAVA教程Java基礎(chǔ)教程之封裝與接口

    Java基礎(chǔ)教程之封裝與接口

    這篇文章主要介紹了Java基礎(chǔ)教程之封裝與接口,本文用淺顯易懂的語(yǔ)言講解了Java中的封裝與接口,很形象的說(shuō)明了這兩個(gè)面向?qū)ο笮g(shù)語(yǔ),需要的朋友可以參考...

    junjie3292019-11-27
  • JAVA教程JAVAEE項(xiàng)目結(jié)構(gòu)以及并發(fā)隨想

    JAVAEE項(xiàng)目結(jié)構(gòu)以及并發(fā)隨想

    每個(gè)代碼里面的工具都是工具,API是你最需要理解的,哪個(gè)好,哪個(gè)不好,沒(méi)有準(zhǔn)確答案。 一切皆對(duì)象,對(duì)于Java來(lái)講是純粹的,代理是對(duì)象,反射是對(duì)象...

    鴆懟孑1372020-04-21
主站蜘蛛池模板: 国产日韩欧美不卡www | 国产综合亚洲欧美日韩一区二区 | 私人影院免费 | 高清欧美videossexo免费 | 91日本在线 | 成人精品网 | 亚洲99久久无色码中文字幕 | 九九在线免费视频 | 好男人资源免费播放在线观看 | 日韩aⅴ在线观看 | 嫩草在线视频www免费观看 | 国产日韩欧美在线一二三四 | 91夜夜操| 出轨同学会免费观看 | 乌克兰成人性色生活片 | 欧美日韩在线观看精品 | 免费视频完整版在线观看网站 | 国产精品久久久久久吹潮 | 爆操俄罗斯美女 | 国产成人精品视频午夜 | 亚洲欧美一级夜夜爽w | 四虎一区| 精品午夜久久福利大片免费 | 日韩在线中文字幕 | 色噜噜狠狠色综合 | 91yellow吧字幕网zmff7 | 华人亚洲欧美精品国产 | 初尝黑人巨大h文 | 夫妇交换小说全文阅读 | 外国a级片 | 精品亚洲视频在线观看 | 日韩一级免费毛片 | 久久不射电影网 | 啊啊啊好大在线观看 | 亚洲xxxxxhd奶水女人 | 99热久久这里只有精品23 | 日韩视频一区 | naruto hentai玖辛奈 | 女人叉开腿让男人桶 | 欧美日韩精品亚洲精品v18 | 久久偷拍免费2017 |