java图片byte
‘壹’ java:为什么传输图片是常用base64字符串转码,而不是直接传输byte[]呢求解
先说说base64吧:对于图片来说,一个字节占八位,如果都换成byte[]的话,会很长,不便于传输,那么就把没6个字节来对应一个新的字符(如010011是19,对应base64编码的T),,所以这个目的主要是精简数据,便于传输;
另外常用的用途是:做不严格的加密用,比如常见的磁力链接,你懂的;因为它相对于严格加密省时省力,速度快,况且可恢复(如果用MD5就不行)
‘贰’ php 如何将图片转换成java中Byte[]的
按照你的要求编写的Java程序如下:( 要注意的地方见语句后面的注释)
importjava.awt.image.BufferedImage;importjava.awt.image.RenderedImage;importjava.io.File;importjava.io.IOException;importjavax.imageio.ImageIO;publicclassImageWithArray{publicstaticvoidmain(String[]args){//读取图片到BufferedImageBufferedImagebf=readImage("c:\tmp\6\female.png");//这里写你要读取的绝对路径+文件名//将图片转换为二维数组int[][]rgbArray1=convertImageToArray(bf);//输出图片到指定文件writeImageFromArray("c:\tmp\2.png","png",rgbArray1);//这里写你要输出的绝对路径+文件名System.out.println("图片输出完毕!");}(StringimageFile){Filefile=newFile(imageFile);BufferedImagebf=null;try{bf=ImageIO.read(file);}catch(IOExceptione){e.printStackTrace();}returnbf;}publicstaticint[][]convertImageToArray(BufferedImagebf){//获取图片宽度和高度intwidth=bf.getWidth();intheight=bf.getHeight();//将图片sRGB数据写入一维数组int[]data=newint[width*height];bf.getRGB(0,0,width,height,data,0,width);//将一维数组转换为为二维数组int[][]rgbArray=newint[height][width];for(inti=0;i<height;i++)for(intj=0;j<width;j++)rgbArray[i][j]=data[i*width+j];returnrgbArray;}(StringimageFile,Stringtype,int[][]rgbArray){//获取数组宽度和高度intwidth=rgbArray[0].length;intheight=rgbArray.length;//将二维数组转换为一维数组int[]data=newint[width*height];for(inti=0;i<height;i++)for(intj=0;j<width;j++)data[i*width+j]=rgbArray[i][j];//将数据写入BufferedImageBufferedImagebf=newBufferedImage(width,height,BufferedImage.TYPE_INT_BGR);bf.setRGB(0,0,width,height,data,0,width);//输出图片try{Filefile=newFile(imageFile);ImageIO.write((RenderedImage)bf,type,file);}catch(IOExceptione){e.printStackTrace();}}}
运行结果:
图片输出完毕!
原图:
‘叁’ java中如何将字节数组转化成图片
java将byte数组转换成图片,可以File和IO操作来完成,实例如下:
//byte数组到图片到硬盘上 public void byte2image(byte[] data,String path){ if(data.length<3||path.equals("")) return;//判断输入的byte是否为空 try{ FileImageOutputStream imageOutput = new FileImageOutputStream(new File(path));//打开输入流 imageOutput.write(data, 0, data.length);//将byte写入硬盘 imageOutput.close(); System.out.println("Make Picture success,Please find image in " + path); } catch(Exception ex) { System.out.println("Exception: " + ex); ex.printStackTrace(); } }
‘肆’ java怎样把一个byte数组保存成图片到硬盘上
java将byte数组转换成图片,可以File和IO操作来完成,实例如下:
//byte数组到图片到硬盘上
publicvoidbyte2image(byte[]data,Stringpath){
if(data.length<3||path.equals(""))return;//判断输入的byte是否为空
try{
=newFileImageOutputStream(newFile(path));//打开输入流
imageOutput.write(data,0,data.length);//将byte写入硬盘
imageOutput.close();
System.out.println("MakePicturesuccess,Pleasefindimagein"+path);
}catch(Exceptionex){
System.out.println("Exception:"+ex);
ex.printStackTrace();
}
}
‘伍’ java中 图片是byte[]保存的 现在前台要怎么显示出来啊
是byte型的你在后台用response.write(byte[] b),输出,然后在前端用<img src="这个sevlet的地址"/>显示出来。
‘陆’ JAVA 如何读取接受到的byte[]图片
用文件的输入输入流来把byte数组的图片转换成文件。
参考API的FileInputStream与FileOutputStream
‘柒’ Java中如何把图片转换成二进制流
Java中将图片转为二进制流只需要使用FileImageInputStream取得图片文件,然后使用ByteArrayOutputStream 写入到二进制流中即可,下面是详细代码:
//图片到byte数组
publicbyte[]image2byte(Stringpath){
byte[]data=null;
FileImageInputStreaminput=null;
try{
input=newFileImageInputStream(newFile(path));
ByteArrayOutputStreamoutput=newByteArrayOutputStream();
byte[]buf=newbyte[1024];
intnumBytesRead=0;
while((numBytesRead=input.read(buf))!=-1){
output.write(buf,0,numBytesRead);
}
data=output.toByteArray();
output.close();
input.close();
}
catch(FileNotFoundExceptionex1){
ex1.printStackTrace();
}
catch(IOExceptionex1){
ex1.printStackTrace();
}
returndata;
}
另外,如果需要将byte[]存回图片或转为String,则:
//byte数组到图片
publicvoidbyte2image(byte[]data,Stringpath){
if(data.length<3||path.equals(""))return;
try{
=newFileImageOutputStream(newFile(path));
imageOutput.write(data,0,data.length);
imageOutput.close();
System.out.println("MakePicturesuccess,Pleasefindimagein"+path);
}catch(Exceptionex){
System.out.println("Exception:"+ex);
ex.printStackTrace();
}
}
//byte数组到16进制字符串
publicStringbyte2string(byte[]data){
if(data==null||data.length<=1)return"0x";
if(data.length>200000)return"0x";
StringBuffersb=newStringBuffer();
intbuf[]=newint[data.length];
//byte数组转化成十进制
for(intk=0;k<data.length;k++){
buf[k]=data[k]<0?(data[k]+256):(data[k]);
}
//十进制转化成十六进制
for(intk=0;k<buf.length;k++){
if(buf[k]<16)sb.append("0"+Integer.toHexString(buf[k]));
elsesb.append(Integer.toHexString(buf[k]));
}
return"0x"+sb.toString().toUpperCase();
}