❶ 求助,幫我用java語言寫一個位元組轉換成圖片的方法,返回圖片類型
我直接把做驗證碼的代碼發出來了。如果你不是要做驗證碼。那你自己看下就知道你問題的答案了。
//清空瀏覽器緩存。確保驗證圖片更換
response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", -1);
//以圖片形式打開數據
response.setHeader("Content-Type","image/jpeg");
//response.setContentType("image/jpeg");
//在內存中創建一副圖片
BufferedImage image=new BufferedImage(80,30,BufferedImage.TYPE_INT_RGB);
//在圖片上寫數據
Graphics g=image.getGraphics();
g.setColor(Color.black);
//畫個寬為80.、高30的實心矩形剛好將圖片遮蓋
g.fillRect(0, 0, 80, 30);
//設置圖片上字體的顏色及格式
g.setColor(Color.red);
g.setFont(new Font("宋體",Font.BOLD,20));
//將字體寫入圖片
String num=makeNum();
//將字串保存到session中
request.getSession().setAttribute("checkcode", num);
//寫字元串。坐標是從基線為准。
g.drawString(num, 0, 20);
//將圖片輸出給瀏覽器。參數分別為要寫入的 RenderedImage。 包含格式非正式名稱的 String。 將在其中寫入數據的 OutputStream。
ImageIO.write(image, "jpg",response.getOutputStream());
}
public String makeNum(){
Random r=new Random();
String num=r.nextInt(10000000)+"";
StringBuffer stringBuffer=new StringBuffer();
for (int i = 0; i < 7-num.length(); i++) {
stringBuffer.append("0");
}
num=stringBuffer.toString()+num;
return num;
}
❷ java如何用byte構造BufferedImage,處理之後怎麼再輸出為byte / 藍訊
ByteArrayOutputStream os=new ByteArrayOutputStream();//新建流。
BufferedImage bi=null;//BufferedImage對象。
ImageIO.write(bi, "png", os);//利用ImageIO類提供的write方法,將bi以png圖片的數據模式寫入流。
byte b[]=os.toByteArray();//從流中獲取數據數組。
❸ java怎樣把一個byte數組保存成圖片到硬碟上
轉成的圖片 要麼是個文件File 要麼是個文件流. 那都只需要通過輸入輸出流往磁碟上寫就行了
❹ java實現數組轉化成圖片 請指教
你用一個char存一個顏色是不夠的,要3個char。
另java中有Color這個類的,可以使用它來存顏色
❺ 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();
}
❻ 請教java里的byte型如何通過jni的jbyte轉成opencv里的IplImage型
iplImage = cvCreateImageHeader(cvSize(width,height),depth,channels);
cvSetData(iplImage,data,step);
首先由cvCreateImageHeader()創建IplImage圖像頭,制定圖像的尺寸,深度和通道數;然後由
cvSetData()根據 BYTE*圖像數據指針設置IplImage圖像頭的數據數據,其中step指定該IplImage圖像
每行占的位元組數,對於1通道的 IPL_DEPTH_8U圖像,step可以等於width。
2.1,如果是從新創造一個Iplimage,則用IplImage* cvCreateImage( CvSize size, int depth, int
channels ),它創建頭並分配數據。
註:當不再使用這個新圖像時,要調用void cvReleaseImage( IplImage** image )將它的頭和圖像數
據釋放!
2.2,如果有圖像數據沒有為圖像頭分配存儲空間(即,沒有為IplImage*指針分配動態存儲空間),則
先調用IplImage* cvCreateImageHeader( CvSize size, int depth, int channels )創建圖像頭,再
調用void cvSetData( CvArr* arr, void* data, int step )指定圖像數據,可以理解為將這個新圖
像的數據指針指向了一個已存在的圖像數據上,不存在圖像數據存儲空間的分配操作。
註:當不再使用這個新圖像時,要調用void cvReleaseImageHeader( IplImage** image )將它的圖像
頭釋放!
2.3,如果有圖像數據也有圖像頭(用於IplImage為靜態分配存儲空間的情況),則先調用IplImage*
cvInitImageHeader( CvSize size, int depth, int channels )更改圖像頭,再調用void
cvSetData( CvArr* arr, void* data, int step )指定圖像數據。
註:因為這個新圖像使用的是其它圖像的數據和已有的圖像頭,所以不能使用cvReleaseImage將它的
頭和圖像數據釋放,也不能使用cvReleaseData將它的圖像數據釋放!
2.4,如果從已有的一個圖像創建,則用IplImage* cvCloneImage( const IplImage* image ),它製作
圖像的完整拷貝包括頭、ROI和數據。
註:當不再使用這個新圖像時,要調用void cvReleaseImage( IplImage** image )將它的頭和圖像數
據釋放!
❼ JAVA如何將byte數組轉變為BMP
//我在程序中列印出了每一個坐標的RGB值,你自己整理整理,求個平均值,
//放到你的那個二維數組里。
//自己用畫圖工具做一個小圖片,注意圖片的名字和程序中一致哦~
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.io.*;
public class Test{
public static void main(String args[]) {
int[] rgb = new int[3];
File file = new File("a.bmp");
BufferedImage bi=null;
try{
bi = ImageIO.read(file);
}catch(Exception e){
e.printStackTrace();
}
int width=bi.getWidth();
int height=bi.getHeight();
int minx=bi.getMinX();
int miny=bi.getMinY();
System.out.println("width="+width+",height="+height+".");
System.out.println("minx="+minx+",miniy="+miny+".");
for(int i=minx;i<width;i++){
for(int j=miny;j<height;j++){
//System.out.print(bi.getRGB(jw, ih));
int pixel=bi.getRGB(i, j);
rgb[0] = (pixel & 0xff0000 ) >> 16 ;
rgb[1] = (pixel & 0xff00 ) >> 8 ;
rgb[2] = (pixel & 0xff );
System.out.println("i="+i+",j="+j+":("+rgb[0]+","+rgb[1]+","+rgb[2]+")");
}
}
}
}
❽ java如何將連續的位元組數據轉成圖片數據
java是可以將圖片位元組轉成圖片的,但是你需要知道接受的數據對應一個圖片有多長,可以在每個圖片數據包前面加上此次圖片的長度,按長度截取位元組,轉成圖片,或者直接將位元組轉成視頻,畢竟你是連續的圖像
❾ java 怎麼把byte[]轉換成圖片顯示在頁面上
Servlet的doGet/doPost中
httpResponse.setHeader("Content-Type","image/jpeg");
Stringsql="SELECT*FROMUserWHEREID=2";
statement=connection.createStatement();
resultSet=statement.executeQuery(sql);
InputStreamin=null;
OutputStreamout=httpResponse.getOutputStream();
while(resultSet.next()){
//讀取BLOB
Blobblob=resultSet.getBlob("image");
in=blob.getBinaryStream();
byte[]blobBuffer=newbyte[1024];
intlength=0;
while((length=in.read(blobBuffer))!=-1){
out.write(blobBuffer,0,length);
}
}
in.close();
❿ java中如何把一個圖片轉換成二進制流存入到類中啊
1.將Image圖像文件存入到資料庫中
我們知道資料庫里的Image類型的數據是"二進制數據",因此必須將圖像文件轉換成位元組數組才能存入資料庫中.
要這里有關數據的操作略寫,我將一些代碼段寫成方法,方便直接調用.
//根據文件名(完全路徑)
public byte[] SetImageToByteArray(string fileName)
{
FileStream fs = new FileStream(fileName, FileMode.Open);
int streamLength = (int)fs.Length;
byte[] image = new byte[streamLength];
fs.Read(image, 0, streamLength);
fs.Close();
return image;
}
//另外,在ASP.NET中通過FileUpload控制項得到的圖像文件可以通過以下方法
public byte[] SetImageToByteArray(FileUpload FileUpload1)
{
Stream stream = FileUpload1.PostedFile.InputStream;
byte[] photo = new byte[FileUpload1.PostedFile.ContentLength];
stream.Read(photo, 0, FileUpload1.PostedFile.ContentLength);
stream.Close();
return photo;
}
2.從SQL Server資料庫讀取Image類型的數據,並轉換成bytes[]或Image圖像文件
//要使用SqlDataReader要載入using System.Data.SqlClient命名空間
//將資料庫中的Image類型轉換成byte[]
public byte[] SetImage(SqlDataReader reader)
{
return (byte[])reader["Image"];//Image為資料庫中存放Image類型欄位
}
//將byte[]轉換成Image圖像類型
//載入以下命名空間using System.Drawing;/using System.IO;
using System.Data.SqlClient;*/
public Image SetByteToImage(byte[] mybyte)
{
Image image;
MemoryStream mymemorystream = new MemoryStream(mybyte,0, mybyte.Length);
image = Image.FromStream(mymemorystream);
return image;
}