java网络图片和二进制字符串间的转换

/**  
 * @Title           getImgeHexString  
 * @Description     网络图片转换成二进制字符串  
 * @param URLName   网络图片地址  
 * @param type      图片类型  
 * @return  String  转换结果  
 * @throws  
 */  
public static String getImgeHexString(String URLName,String type) {   
    String res = null;   
    try {   
        int HttpResult = 0; // 服务器返回的状态   
        URL url = new URL(URLName); // 创建URL   
        URLConnection urlconn = url.openConnection(); // 试图连接并取得返回状态码   
        urlconn.connect();   
        HttpURLConnection httpconn = (HttpURLConnection) urlconn;   
        HttpResult = httpconn.getResponseCode();   
        System.out.println(HttpResult);   
        if (HttpResult != HttpURLConnection.HTTP_OK) // 不等于HTTP_OK则连接不成功   
            System.out.print("fail");   
        else {   
            BufferedInputStream bis = new BufferedInputStream(urlconn.getInputStream());   
  
            BufferedImage bm = ImageIO.read(bis);   
            ByteArrayOutputStream bos = new ByteArrayOutputStream();   
            ImageIO.write(bm, type, bos);   
            bos.flush();   
            byte[] data = bos.toByteArray();   
  
            res = byte2hex(data);   
            bos.close();   
        }   
    } catch (Exception e) {   
        e.printStackTrace();   
    }   
    return res;   
}   
  
/**  
 * @title           根据二进制字符串生成图片  
 * @param data      生成图片的二进制字符串  
 * @param fileName  图片名称(完整路径)  
 * @param type      图片类型  
 * @return  
 */  
public static void saveImage(String data, String fileName,String type) {   
  
    BufferedImage image = new BufferedImage(300, 300,BufferedImage.TYPE_BYTE_BINARY);   
    ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream();   
    try {   
        ImageIO.write(image, type, byteOutputStream);   
        // byte[] date = byteOutputStream.toByteArray();   
        byte[] bytes = hex2byte(data);   
        System.out.println("path:" + fileName);   
        RandomAccessFile file = new RandomAccessFile(fileName, "rw");   
        file.write(bytes);   
        file.close();   
    } catch (IOException e) {   
        e.printStackTrace();   
    }   
}   
  
/**  
 * 反格式化byte  
 *   
 * @param s  
 * @return  
 */  
public static byte[] hex2byte(String s) {   
    byte[] src = s.toLowerCase().getBytes();   
    byte[] ret = new byte[src.length / 2];   
    for (int i = 0; i < src.length; i += 2) {   
        byte hi = src[i];   
        byte low = src[i + 1];   
        hi = (byte) ((hi >= 'a' && hi <= 'f') ? 0x0a + (hi - 'a')   
                : hi - '0');   
        low = (byte) ((low >= 'a' && low <= 'f') ? 0x0a + (low - 'a')   
                : low - '0');   
        ret[i / 2] = (byte) (hi << 4 | low);   
    }   
    return ret;   
}   
  
/**  
 * 格式化byte  
 *   
 * @param b  
 * @return  
 */  
public static String byte2hex(byte[] b) {   
    char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',   
            'B', 'C', 'D', 'E', 'F' };   
    char[] out = new char[b.length * 2];   
    for (int i = 0; i < b.length; i++) {   
        byte c = b[i];   
        out[i * 2] = Digit[(c >>> 4) & 0X0F];   
        out[i * 2 + 1] = Digit[c & 0X0F];   
    }   
  
    return new String(out);   
}  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值