public class PicToHex {
/**
* 将图片转16进制
* @param picPath
* @param hexPath
*/
public static void pic2Hex(String picPath,String hexPath) {
FileInputStream fis =null;
BufferedInputStream bis = null;
try {
StringBuffer sb = new StringBuffer();
fis = new FileInputStream(picPath);
bis =new BufferedInputStream(fis);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buff = new byte[1024];
int len = 0;
while ((len = fis.read(buff)) != -1) {
bos.write(buff, 0, len);
}
//得到图片的字节数组
byte[] result = bos.toByteArray();
// System.out.println("++++" + byte2HexStr(result));
//字节数组转成十六进制
String str = byte2HexStr(result);
//将十六进制串保存到txt文件
PrintWriter pw = new PrintWriter(new FileWriter(hexPath));
pw.println(str);
pw.close();
} catch (IOException e) {
}finally {
if(fis!=null) {
try {
fis.close();
}catch(Exception e){
}
}
if(bis!=null) {
try {
bis.close();
}catch(Exception e){
}
}
}
}
/**
* 实现字节数组向十六进制的转换方法
* @param b
* @return
*/
private static String byte2HexStr(byte[] b) {
String hs="";
String stmp="";
for (int n=0;n<b.length;n++) {
stmp=(Integer.toHexString(b[n] & 0XFF));
if (stmp.length()==1) hs=hs+"0"+stmp;
else hs=hs+stmp;
}
return hs.toLowerCase();
}
/**
* 实现字节数组向十六进制的转换方法
* @param b
* @return
*/
public static List<String> byte2HexList(byte[] b) {
List<String> list=new ArrayList<>();
System.out.println(b.length);
for (int n=0;n<b.length;n++) {
String stmp="";
stmp=(Integer.toHexString(b[n] & 0XFF));
if (stmp.length()==1) {
stmp = "0" + stmp;
}
list.add(stmp);
}
return list;
}
//图片转成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();
} catch (FileNotFoundException ex1) {
ex1.printStackTrace();
} catch (IOException ex1) {
ex1.printStackTrace();
}finally {
if(input!=null){
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return data;
}
//byte数组到图片
public void byte2image(byte[] data, String path) {
if (data.length < 3 || path.equals("")) return;
FileImageOutputStream imageOutput=null;
try {
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();
}finally {
if(imageOutput!=null){
try {
imageOutput.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}