*本事例主要讲了如下几点:
* 1:将图片转换为BASE64加密字符串.
* 2:将图片流转换为BASE64加密字符串.
* 3:将BASE64加密字符串转换为图片.
* 4:在jsp文件中以引用的方式和BASE64加密字符串方式展示图片.
首先看工具类:
1 import java.awt.image.BufferedImage;
2 import java.io.ByteArrayInputStream;
3 import java.io.ByteArrayOutputStream;
4 import java.io.File;
5 import java.io.IOException;
6 import java.io.InputStream;
8 import javax.imageio.ImageIO;
10 import sun.misc.BASE64Decoder;
11 import sun.misc.BASE64Encoder;
13 /**
14 * @author IluckySi
15 * @since 20150122
16 */
17 public class ImageUtil {
19 private static BASE64Encoder encoder = new sun.misc.BASE64Encoder();
20 private static BASE64Decoder decoder = new sun.misc.BASE64Decoder();
22 /**
23 * 将图片转换为BASE64加密字符串.
24 * @param imagePath 图片路径.
25 * @param format 图片格式.
26 * @return
27 */
28 public String convertImageToByte(String imagePath, String format) {
29 File file = new File(imagePath);
30 BufferedImage bi = null;
31 ByteArrayOutputStream baos = null;
32 String result = null;
33 try {
34 bi = ImageIO.read(file);
35 baos = new ByteArrayOutputStream();
36 ImageIO.write(bi, format == null ? "jpg" : format, baos);
37 byte[] bytes = baos.toByteArray();
38 result = encoder.encodeBuffer(bytes).trim();
39 System.out.println("将图片转换为BASE64加密字符串成功!");
40 } catch (IOException e) {
41 System.out.println("将图片转换为 BASE64加密字符串失败: " + e);
42 } finally {
43 try {
44 if(baos != null) {
45 baos.close();
46 baos = null;
47 }
48 } catch (Exception e) {
49 System.out.println("关闭文件流发生异常: " + e);
50 }
51 }
52 return result;
53 }
55 /**
56 * 将图片流转换为BASE64加密字符串.
57 * @param imageInputStream
58 * @param format 图片格式.
59 * @return
60 */
61 public String convertImageStreamToByte(InputStream imageInputStream, String format) {
62 BufferedImage bi = null;
63 ByteArrayOutputStream baos = null;
64 String result = null;
65 try {
66 bi = ImageIO.read(imageInputStream);
67 baos = new ByteArrayOutputStream();
68 ImageIO.write(bi, format == null ? "jpg" : format, baos);
69 byte[] bytes = baos.toByteArray();
70 result = encoder.encodeBuffer(bytes).trim();
71 System.out.println("将图片流转换为BASE64加密字符串成功!");
72 } catch (IOException e) {
73 System.out.println("将图片流转换为 BASE64加密字符串失败: " + e);
74 } finally {
75 try {
76 if(baos != null) {
77 baos.close();
78 baos = null;
79 }
80 } catch (Exception e) {
81 System.out.println("关闭文件流发生异常: " + e);
82 }
83 }
84 return result;
85 }
87 /**
88 * 将BASE64加密字符串转换为图片.
89 * @param base64String
90 * @param imagePath 图片生成路径.
91 * @param format 图片格式.
92 */
93 public void convertByteToImage(String base64String, String imagePath, String format) {
94 byte[] bytes = null;
95 ByteArrayInputStream bais = null;
96 BufferedImage bi = null;
97 File file = null;
98 try {
99 bytes = decoder.decodeBuffer(base64String);
100 bais = new ByteArrayInputStream(bytes);
101 bi = ImageIO.read(bais);
102 file = new File(imagePath);
103 ImageIO.write(bi, format == null ? "jpg" : format, file);
104 System.out.println("将BASE64加密字符串转换为图片成功!");
105 } catch (IOException e) {
106 System.out.println("将BASE64加密字符串转换为图片失败: " + e);
107 } finally {
108 try {
109 if(bais != null) {
110 bais.close();
111 bais = null;
112 }
113 } catch (Exception e) {
114 System.out.println("关闭文件流发生异常: " + e);
115 }
116 }
117 }
118 }
然后看测试类:
1 import java.io.InputStream;
3 import com.ilucky.util.image.ImageUtil;
5 /**
6 * 本事例主要讲了如下几点:
7 * 1:将图片转换为BASE64加密字符串.
8 * 2:将图片流转换为BASE64加密字符串.
9 * 3:将BASE64加密字符串转换为图片.
10 * 4:在jsp文件中以引用的方式和BASE64加密字符串方式展示图片.
11 * @author IluckySi
12 * @since 20150122
13 */
14 public class MainTest {
16 public static void main(String[] args) {
17 ImageUtil imageUtil = new ImageUtil();
19 String base64String = imageUtil.convertImageToByte("D:\\test.png", "png");
20 System.out.println(base64String);
21 imageUtil.convertByteToImage(base64String, "D:\\test2.png", "png");
23 InputStream is = MainTest.class.getResourceAsStream("test.png");
24 String base64String2 = imageUtil.convertImageStreamToByte(is, "png");
25 System.out.println(base64String2);
26 imageUtil.convertByteToImage(base64String2, "D:\\test3.png", "png");
27 }
最后看jsp文件:
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title>index.html</title>
5 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
6 <meta http-equiv="description" content="this is my page">
7 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
8 </head>
9 <body>
10 <!--
11 data表示取得数据的协定名称,image/png是数据类型名称,base64 是数据的编码方法,
12 逗号后面是image/png文件base64编码后的数据.
13 data:text/css;base64,base64编码的CSS代码
14 data:text/javascript,Javascript代码
15 data:text/javascript;base64,base64编码的Javascript代码
16 data:image/gif;base64,base64编码的gif图片数据
17 data:image/png;base64,base64编码的png图片数据
18 data:image/jpeg;base64,base64编码的jpeg图片数据
19 data:image/x-icon;base64,base64编码的icon图片数据
20 -->
21 <img src="test.png"/>
22 <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAFYklEQVR42sVXfUyUdRz/8XKhMZQO
23 7nmeuwMFwrBEVJqgDOcUHZvNuTarrdKam0zdKrckAy4goowxbaM5hE1yjVVzLjLRokBFz2qsQPGF
24 F8vmamtkL4s4OHDy6ff5EQcXx91hf/jHB777fj8v3+d57p7nOQFA3EuoPxcLhV90SlxziOSeUrHd
25 WRz5fv1uc1fl03OGizdGgmBd/5K5mzNyyO0M4EkEXqBAiI58Ed9WEFp1+MXYm1vW68hKM7AwJR5W
26 mx3RZqsCa/Y4I4dcaqilx10t0PGqCOssEjuvH7H9vW1zEgzNgK5ZYVh02HUN86w65tvGwJo9zhRH
27 cqmhlh70mtEC7a8Ie2ep6dPfW5eM3OnbhMo9S6GbLV6h04Eccqmhlh70omdQC3TsFbbLZaYL/W2Z
28 wA+PYbQ9B780rUJu1nxoMZaAC5BDLjXU0oNe9KS33wXkqRKXXguv+as1HejOxYhzNdwS+G4NjlUs
29 U0cX7+cscEYOudRQSw960ZPezPC9QIE69dv6Pk4exLX1GDm/Cu5z2Qojzmy4WrOxZUOSPELNz9Fr
30 ikMuNR699KInvZkx/sH0WqB9rzCuH5j7Mzrk1uel8HQW3GcmgK+y4axOR0qCVX7gpoazxxk55E7W
31 0oue9GYGs7wXKFCnP7+/cdEovs7GUHMm3C0rvHD7jMTZFSjYugAW89RvAXuckUPuf/X0pDczmMVM
32 zwJyI8v3lVFX7pzLxMiXGXB/sdwncDoDvfXLkJFqh1WbuBSs2eOMnOn09GYGs5g5eYHcXw/HAWcz
33 MfRZOtwSQz7APloexcHdD0GLnVhAlzV7nPnT8j8zmMVMzwKdjtCy/qPJuN0kSY1L/OL250tw61ga
34 Nqy0Q7doCqzZ4yygXmYwi5meBa6Wmk4NNaRgpDEVQ8cX+YVbAk2L0VCcrL52BGv23AG0hMqQWcz0
35 LNBTHtGFkw9D4UQQkLxR+X/LujiF0RMz0xIqc3yBb4sifmp+80G0lCcFhWYJZ0USDu6ar8C6OUit
36 0sssZnoWaNhh+tFqGIg3dM9p9QvJM5t1vP1cvALrmWiZxUzPAidfMLWlJBjqZhKMiRarY+UiAzer
37 5ymwZi8Y7dgNywAzPQuc3xNet3Ypv8+Bn3Y0sUqTQ3k24MM4BdZW3f9zYuKeoYNZzPQscNkRsv35
38 1WbExhoBDXT5zN+4XMcfNVYMv2dTYM0eZ4H0zGAWMz0L9JaK1P1PRQ7EWa0Bn3aJdh2NL2vAEQ2u
39 2jGwZo+zQHq7zJBZrusyc9IZEOEX8sM/yFxokafI8LO9jrx1GgaqY+CujYHr0BhYs5eXoynO9Kff
40 ADOc+eEfyUyT19Owp0SsKd0U5eYrlU+xvMaLk3S0OcxAbTRcB73BHmdpSWNcn5dPejNDZq2d8jiW
41 G4W07Q39JCctVr3T+br2ZY+bcac6CoPvzoGryhvscUaOr88CPenNDGb5fCPqKha2o3kRF1MTKfA+
42 +uxHNNx4IwrDVZFwveMbnJFD7uSzQC960psZft8Je4rFkzXPzh5eME+HTTfUs94mbxx1W+cCVbMw
43 uH82XNOAM3LIpUZppQe96EnvoN6K5TXaVfPMbCxO1BAVbeCJzBj89tYsDO+/DwOVEX5BDrmbpYZa
44 etCLnkG/ll8qEqK7WOQe32lybs54AKd23I/RA+EYqDAFBXJPSg219KAXPWf8y+iKQxhXHaLyRklI
45 363yUAzsC8OghGtfqE9wRg651FBLj7v/aTb+ul4oUi4VipIuh+i+WSKG+spC8Gd5CPr/BWv2OJOc
46 Hsl9XWoW/v/fht5LhLUXiARZb71cJOquFIlv5BH2EqzZ40xyEsm9OJMfp/cS/wC6xRqbyM2GFQAA
47 AABJRU5ErkJggg=="/>
48 </body>
49 </html>