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、付费专栏及课程。

余额充值