❶ 求助,帮我用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;
}