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();
}