图片和base64编码字符串 互相转换,图片和byte数组互相转换

时间:2023-01-11 12:14:35

图片和base64编码字符串 互相转换

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import java.io.*;

/**
*
@author lishupeng
* @create 2017-05-06 下午 2:56
*
*/
public class Base64Test {
public static void main(String[] args) {
String strImg
= GetImageStr();
System.out.println(strImg);
GenerateImage(strImg);
}

//图片转化成base64字符串
public static String GetImageStr() {//将图片文件转化为字节数组字符串,并对其进行Base64编码处理
String imgFile = "C:\\Users\\Administrator\\Desktop\\a\\1.png";//待处理的图片
InputStream in = null;
byte[] data = null;
//读取图片字节数组
try {
in
= new FileInputStream(imgFile);
data
= new byte[in.available()];
in.read(data);
in.close();
}
catch (IOException e) {
e.printStackTrace();
}
//对字节数组Base64编码
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(data);//返回Base64编码过的字节数组字符串
}

//base64字符串转化成图片
public static boolean GenerateImage(String imgStr) { //对字节数组字符串进行Base64解码并生成图片
if (imgStr == null) //图像数据为空
return false;
BASE64Decoder decoder
= new BASE64Decoder();
try {
//Base64解码
byte[] b = decoder.decodeBuffer(imgStr);
for (int i = 0; i < b.length; ++i) {
if (b[i] < 0) {//调整异常数据
b[i] += 256;
}
}
//生成jpeg图片
String imgFilePath = "d://222.jpg";//新生成的图片
OutputStream out = new FileOutputStream(imgFilePath);
out.write(b);
out.flush();
out.close();
return true;
}
catch (Exception e) {
return false;
}
}


 

图片和byte数组互相转换

import javax.imageio.stream.FileImageInputStream;
import javax.imageio.stream.FileImageOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;

/**
*
@author lishupeng
* @create 2017-05-06 下午 3:48
*
*/
public class Image2Byte {

public static void main(String[] args){
byte[] data = image2byte("C:\\Users\\Administrator\\Desktop\\a\\1.png");
System.out.println(data.toString());
byte2image(data,
"d://222.jpg");
}

//图片到byte数组
public static byte[] image2byte(String path) {
byte[] data = null;
FileImageInputStream input
= null;
try {
input
= new FileImageInputStream(new File(path));
ByteArrayOutputStream output
= new ByteArrayOutputStream();
byte[] buf = new byte[1024];
int numBytesRead = 0;
while ((numBytesRead = input.read(buf)) != -1) {
output.write(buf,
0, numBytesRead);
}
data
= output.toByteArray();
output.close();
input.close();
}
catch (FileNotFoundException ex1) {
ex1.printStackTrace();
}
catch (IOException ex1) {
ex1.printStackTrace();
}
return data;
}

//byte数组到图片
public static void byte2image(byte[] data, String path) {
if (data.length < 3 || path.equals("")) return;
try {
FileImageOutputStream imageOutput
= new FileImageOutputStream(new File(path));
imageOutput.write(data,
0, data.length);
imageOutput.close();
System.out.println(
"Make Picture success,Please find image in " + path);
}
catch (Exception ex) {
System.out.println(
"Exception: " + ex);
ex.printStackTrace();
}
}

//byte数组到16进制字符串
public String byte2string(byte[] data) {
if (data == null || data.length <= 1) return "0x";
if (data.length > 200000) return "0x";
StringBuffer sb
= new StringBuffer();
int buf[] = new int[data.length];
//byte数组转化成十进制
for (int k = 0; k < data.length; k++) {
buf[k]
= data[k] < 0 ? (data[k] + 256) : (data[k]);
}
//十进制转化成十六进制
for (int k = 0; k < buf.length; k++) {
if (buf[k] < 16) sb.append("0" + Integer.toHexString(buf[k]));
else sb.append(Integer.toHexString(buf[k]));
}
return "0x" + sb.toString().toUpperCase();
}
}