Java 8实现图片BASE64编解码

前言

Basic编码是标准的BASE64编码,用于处理常规的需求:输出的内容不添加换行符,而且输出的内容由字母加数字组成。

最近做了个Web模版,其中想用Base64背景图。虽然网络上有现成的编码器,但总想自己实现一个。可能很多人不知道,JDK 8新提供的Base64类可以非常方便地处理此项任务:Base64 (Java Platform SE 8 )

一、先选一张图片

mm.png

二、建立HTML演示文件模版

test.html

<!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>测试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编码字符串植入其中。

三、编写Java程序

这里将实现Base64编解码的双向实现,尽管本例中只需要用到Base64解码。Java程序的注释很清楚了,直接上代码:

`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 {

 /**
  * 从图片文件中读取内容。
  * @param path 图片文件的路径。
  * @return 二进制图片内容的byte数组。
  *
  */
 private byte[] readFile(Path path) {
  byte[] imageContents = null;

  try {
   imageContents = Files.readAllBytes(path);
  } catch (IOException e) {
   out.println("读取文件出错了...~zZ");
  }

  return imageContents;
 }

 /**
  * 编码图片文件,编码内容输出为{@code String}格式。
  * @param imageContents 二进制图片内容的byte数组。
  * @return {@code String}格式的编码内容。
  */
 private String base64Encoding(byte[] imageContents) {
  if(imageContents != null)
   return Base64.getEncoder().encodeToString(imageContents);
  else return null;
 }

 /**
  * 解码图片文件。
  * @param imageContents 待解码的图片文件的字符串格式。
  * @return 解码后图片文件的二进制内容。
  */
 private byte[] base64Decoding(String imageContents) {
  if(imageContents != null)
   return Base64.getDecoder().decode(imageContents);
  else return null;
 }

 /**
  * 将解码后的二进制内容写入文件中。
  * @param path 写入的路径。
  * @param imageContents 解码后的二进制内容。
  */
 private void writeFile(Path path, byte[] imageContents) {
  if(imageContents != null)
   try {
    Files.write(path, imageContents, StandardOpenOption.CREATE);
   } catch (IOException e) {
    out.println("写入文件出错了...~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("二进制图片文件Base64码:" + encodingString);

  bt.writeFile(Paths.get("D:/temp/mm2.png"), bt.base64Decoding(encodingString));

  out.println("任务结束...");
 }
}

程序结果如下:

二进制图片文件Base64码:iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAABGdBTUEAALGPC/xhBQAAACB
...(此处省略n多字符)
8xNTIwL2Vhc3lpY29uLmNuL2Vhc3lpY29uLmNuL2Nkbi1pbWcuZWFzeWljb24uY24vcG5nLzEwODcwLzEwODcwODYucG5nPLffdwAAAABJRU5ErkJggg==
任务结束...

四、最后设置

要在HTML文件模版test.html中引用Base64编码内容,还有一步工作要做:将以下内容加到Base64编码内容的开头处:data:image/png;base64,

最终结果也就是类似这样:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAABGdBTUEAALGPC/xhBQAAACB
...(此处省略n多字符)
8xNTIwL2Vhc3lpY29uLmNuL2Vhc3lpY29uLmNuL2Nkbi1pbWcuZWFzeWljb24uY24vcG5nLzEwODcwLzEwODcwODYucG5nPLffdwAAAABJRU5ErkJggg==

之后,将这一长串字符串植入以下代码行的url()括号中:

background: url() no-repeat center center;

如果图片是JPG格式,请将上面data:image/png;base64中的png改为jpeg,如果是GIF格式就改为gif。好了,刷新页面,看看结果:

有圆圈圈是因为我们设置了一些CSS3特效。

我们还实现了Base64解码,并生成一个新的mm2.png图片,在图片浏览器中打开mm2.png,效果应该跟mm.png是一模一样的。

其实,每次JDK新版发布,都蕴藏着许多大大小小的更新,只是你是否有意去发掘它而已。Java总是那么健壮和让人放心。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

(0)

相关推荐

  • java 后台将base64字符串保存为图片的方法

    本文介绍了java 后台将base64字符串保存为图片的方法,分享给大家,具体如下: 直接上代码: import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; public class Base64T

  • Java实现图片与Base64编码互转

    淘宝里面的html用base64转换图片,不知道为什么,不过看起来好像很美好,话不多说,直接上代码: import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import sun.misc.BASE64Decoder; import sun.misc.BA

  • 实例详解Java实现图片与base64字符串之间的转换

    废话不多说了,直接给大家贴java实现图片与base84字符串之间的转换代码了,具体代码如下所示: package cn.com; import <a href="http://lib.csdn.net/base/javase" class='replace_word' title="Java SE知识库" target='_blank' style='color:#df3434; font-weight:bold;'>Java</a>.io

  • Java 处理图片与base64 编码的相互转换的示例

    今天项目优化了一下上传头像的功能.采用 imagecropper 插件完成裁剪图片的效果. 这个插件裁剪完的图片都是 base64 加密的字符串,上传头像也就涉及到了如何把加密的字符串转换成图片的问题. 以下是代码: /** * @Description: 将base64编码字符串转换为图片 * @Author: * @CreateTime: * @param imgStr base64编码字符串 * @param path 图片路径-具体到文件 * @return */ public stat

  • Java 8实现图片BASE64编解码

    前言 Basic编码是标准的BASE64编码,用于处理常规的需求:输出的内容不添加换行符,而且输出的内容由字母加数字组成. 最近做了个Web模版,其中想用Base64背景图.虽然网络上有现成的编码器,但总想自己实现一个.可能很多人不知道,JDK 8新提供的Base64类可以非常方便地处理此项任务:Base64 (Java Platform SE 8 ). 一.先选一张图片 mm.png 二.建立HTML演示文件模版 test.html <!DOCTYPE html> <html>

  • Python3内置模块之base64编解码方法详解

    概述 Base64 是网络上最常见的用于传输 8Bit 字节码的编码方式之一,Base64 就是一种基于 64 个可打印字符来表示二进制数据的方法.可查看 RFC2045 - RFC2049,上面有 MIME 的详细规范.Base64 编码是从二进制到字符的过程,可用于在 HTTP 环境下传递较长的标识信息.比如使二进制数据可以作为电子邮件的内容正确地发送,用作 URL 的一部分,或者作为 HTTP POST 请求的一部分. 即 base64 其实不能归属密码领域,作用也不是用于加密,它是一种编

  • c++base64编解码使用示例

    复制代码 代码如下: #include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>static const char b64_table[65] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";static const char reverse_table[128

  • Java JDK1.7对字符串的BASE64编码解码方法

    如下所示: package cn.itcast; import java.io.IOException; import java.io.UnsupportedEncodingException; import org.junit.Test; import sun.misc.BASE64Decoder; /* * @author soto * BASE64编码 解码 * */ public class Demo1 { @Test public void fun1() throws IOExcept

  • js对图片base64编码字符串进行解码并输出图像示例

    复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv=&qu

  • OpenCV实现图片编解码实践

    原图: 图像信息,可以看到图像是一个816*2100像素的图片: python代码: import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread('11.jpg', 0) img1 = img.astype('float') img_dct = cv2.dct(img1) img_dct_log = np.log(abs(img_dct)) img_recor = cv2.idct(img_dct)

  • java实现的图片裁剪功能示例

    本文实例讲述了java实现的图片裁剪功能.分享给大家供大家参考,具体如下: PicCut.java: package Tsets; import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.Iterator; import javax

  • Java实现文件和base64流的相互转换功能示例

    本文实例讲述了Java实现文件和base64流的相互转换功能.分享给大家供大家参考,具体如下: import java.io.FileInputStream; import java.io.FileOutputStream; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; /** * 文件与base64的互相转换操作 */ public class testFile { public static void main(S

  • Java处理Webp图片格式转换的示例代码

    前言 Webp是Google推出的一种新型图片格式,相比于 传统的PNG/JPG图片有着更小体积的优势,在Web中有着广泛的应用.由于Webp格式推出比较晚, Jdk 内置的图片编解码库对此并不支持. 网上给出的Java环境解决方案往往需要手动在java.library.path中安装对应的动态链接库,windows是dll文件,linux是so文件.这对于开发部署非常不方便. 本文提供一种无需手动安装动态链接库,同时可以方便处理Webp的解决方案 WebP是谷歌的图片格式,java 类库ima

  • 基于Java实现文件和base64字符串转换

    这篇文章主要介绍了基于Java实现文件和base64字符串转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 项目中遇到需要将图片转成base64编码的字符串的需求,但是,考虑到扩展性,写了一个可以转换任务类型文件的方法.需要引入的包: <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId

随机推荐