图片转为byte[]、String、图片之间的转换
package com.horizon.action; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import javax.imageio.stream.FileImageInputStream; import javax.imageio.stream.FileImageOutputStream; public class Hello { // 图片到byte数组 public 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 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(); } } /** * Convert byte[] to hex * string.这里我们可以将byte转换成int,然后利用Integer.toHexString(int)来转换成16进制字符串。 * * @param src * byte[] data * @return hex string */ public static String bytesToHexString(byte[] src) { StringBuilder stringBuilder = new StringBuilder(""); if (src == null || src.length <= 0) { return null; } for (int i = 0; i < src.length; i++) { int v = src[i] & 0xFF; String hv = Integer.toHexString(v); if (hv.length() < 2) { stringBuilder.append(0); } stringBuilder.append(hv); } return stringBuilder.toString(); } /** * Convert hex string to byte[] * * @param hexString * the hex string * @return byte[] */ public static byte[] hexStringToBytes(String hexString) { if (hexString == null || hexString.equals("")) { return null; } hexString = hexString.toUpperCase(); int length = hexString.length() / 2; char[] hexChars = hexString.toCharArray(); byte[] d = new byte[length]; for (int i = 0; i < length; i++) { int pos = i * 2; d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1])); } return d; } /** * Convert char to byte * * @param c * char * @return byte */ private static byte charToByte(char c) { return (byte) "0123456789ABCDEF".indexOf(c); } @SuppressWarnings("static-access") public static void main(String[] args) { String fromPath = "C:/Users/Administrator/123.jpg"; String toPath = "C:/Users/Administrator/456.jpg"; Hello hello = new Hello(); byte[] bytes = hello.image2byte(fromPath); String hexString = hello.bytesToHexString(bytes); byte[] bytes2 = hello.hexStringToBytes(hexString); hello.byte2image(bytes2, toPath); } }