JAVA 如何将一个字节数组的内容转换成一张图片

hjx_code 2013-06-03 12:05:38
我从终端收到一个包含有图片数据的字节数组,要怎么样才能把它转换成一张图片呢?
...全文
5691 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
n27741 2014-02-14
  • 打赏
  • 举报
回复
显然是失败的? fin.read(bytes); 这句话没看到? 这和你写的 while((i=in.read(buf))!=-1){//这个时候 buf才是流的具体内容 out.write(buf,0,i); } 有什么本质区别? 你这么相信自己的眼睛啊?
zs529654899 2013-12-04
  • 打赏
  • 举报
回复
楼上那老哥的代码 不知道自己测试没有,就贴上来告诉楼主 楼上的代码在image2Bytes的是 明显错误 你返回但只是一个拥有流的可读长度的 byte数组 说白了就是一个全部是0的byte的数组 并不是流的内容,然后你在把这个空数组写入文件,显然是失败的。 楼主应该这样 byte[] buf = new byte[in.available()];这个是用来存流的数据 但先在还只是全部由0组成的 int i = 0; while((i=in.read(buf))!=-1){//这个时候 buf才是流的具体内容 out.write(buf,0,i); } out.close();
hjx_code 2013-06-03
  • 打赏
  • 举报
回复
嗯,你的代码确实可行,也非常规范。 可能真的是我没有获取到所有字节数据的原因。 感谢你。
suciver 2013-06-03
  • 打赏
  • 举报
回复
楼主这个跟文件copy是一样的无非就是读流写流的过程。从网络中不断的读取图片的字节内容不断的写到图片文件中,直到读取和写入完就是了
n27741 2013-06-03
  • 打赏
  • 举报
回复
没啥区别,既然是byte[],就可以用FileOutputStream 如果没有得到图片,应该是byte[] 没读完吧? 下面实现通过URL 读取你论坛头像的方式 也是网络上得到的,本质还是一样的嘛,


import java.io.*;
import java.net.*;
/**
 模拟一个jpeg位图到byte[]
 */
class Image2Buff
{
	static byte[] image2Bytes(String imgSrc) throws Exception
	{
		FileInputStream fin = new FileInputStream(new File(imgSrc));
		//可能溢出,简单起见就不考虑太多,如果太大就要另外想办法,比如一次传入固定长度byte[]
		byte[] bytes  = new byte[fin.available()];
		//将文件内容写入字节数组,提供测试的case
		fin.read(bytes);
		fin.close();
		return bytes;
	}

	//从网上读取图片地址,存入本地
	static byte[] image2BytesFromURL(String address) throws Exception
	{
		URL url = new URL(address);
		InputStream is = url.openStream();
		byte[] bytes  = new byte[is.available()];
		//将文件内容写入字节数组,提供测试的case
		is.read(bytes);
		return bytes;
	}

}

class Buff2Image
{
	/**
	 @param b 传入的byte
	 @param tagSrc 目标文件名
		
	 */
	static void buff2Image(byte[] b,String tagSrc) throws Exception
	{
		FileOutputStream fout = new FileOutputStream(tagSrc);
		//将字节写入文件
		fout.write(b);
		fout.close();
	}
}

 
public class ImageBufTest
{
	public static void main(String[] args) throws Exception
	{
		//先模拟一个图形byte[]
		byte[] b = Image2Buff.image2Bytes("c:/1.jpg");
		//存为文件
		Buff2Image.buff2Image(b,"c:/test.jpg");
		//通过url 读取图片得到bytes,复制你的头像到本地
		byte[] b2 = Image2Buff.image2BytesFromURL("http://avatar.profile.csdn.net/D/C/3/1_hjx_code.jpg");
		Buff2Image.buff2Image(b2,"c:/test2.jpg");
		System.out.println("Hello World!");
	}
}

hjx_code 2013-06-03
  • 打赏
  • 举报
回复
但是,我的字节数组是从网络上获得的,并不是直接从一个现在有的Jpg文件上读取。 我把字节数组传给以下的fout对象后,得到的JPG文件,打开时显示无法预览!!!! FileOutputStream fout = new FileOutputStream(tagSrc); //将字节写入文件 fout.write(b); fout.close();
n27741 2013-06-03
  • 打赏
  • 举报
回复
用FileOutputStream ,代码如下,不过我就不做有效验证了


import java.io.*;
/**
 模拟一个jpeg位图到byte[]
 */
class Image2Buff
{
	static byte[] image2Bytes(String imgSrc) throws Exception
	{
		FileInputStream fin = new FileInputStream(new File(imgSrc));
		//可能溢出,简单起见就不考虑太多,如果太大就要另外想办法,比如一次传入固定长度byte[]
		byte[] bytes  = new byte[fin.available()];
		//将文件内容写入字节数组,提供测试的case
		fin.read(bytes);
		fin.close();
		return bytes;
	}
}

class Buff2Image
{
	/**
	 @param b 传入的byte
	 @param tagSrc 目标文件名
		
	 */
	static void buff2Image(byte[] b,String tagSrc) throws Exception
	{
		FileOutputStream fout = new FileOutputStream(tagSrc);
		//将字节写入文件
		fout.write(b);
		fout.close();
	}
}

//本质上实现了copy 命令
public class ImageBufTest
{
	public static void main(String[] args) throws Exception
	{
		//先模拟一个图形byte[]
		byte[] b = Image2Buff.image2Bytes("c:/1.jpg");
		//存为文件
		Buff2Image.buff2Image(b,"c:/test.jpg");

		System.out.println("Hello World!");
	}
}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧