Java中如何把图片转换成二进制流

如题所述

Java中将图片转为二进制流只需要使用FileImageInputStream取得图片文件,然后使用ByteArrayOutputStream 写入到二进制流中即可,下面是详细代码:


  //图片到byte数组
  public byte[] image2byte(String path){
    byte[] data = null;
    FileImageInputStream input = null;
    try {
      input = new FileImageInputStream(new File(path));
      ByteArrayOutputStream output = new ByteArrayOutputStream();
      byte[] buf = new byte[1024];
      int numBytesRead = 0;
      while ((numBytesRead = input.read(buf)) != -1) {
      output.write(buf, 0, numBytesRead);
      }
      data = output.toByteArray();
      output.close();
      input.close();
    }
    catch (FileNotFoundException ex1) {
      ex1.printStackTrace();
    }
    catch (IOException ex1) {
      ex1.printStackTrace();
    }
    return data;
  }

另外,如果需要将byte[]存回图片或转为String,则:

  //byte数组到图片
  public void byte2image(byte[] data,String path){
    if(data.length<3||path.equals("")) return;
    try{
    FileImageOutputStream imageOutput = new FileImageOutputStream(new File(path));
    imageOutput.write(data, 0, data.length);
    imageOutput.close();
    System.out.println("Make Picture success,Please find image in " + path);
    } catch(Exception ex) {
      System.out.println("Exception: " + ex);
      ex.printStackTrace();
    }
  }
  //byte数组到16进制字符串
  public String byte2string(byte[] data){
    if(data==null||data.length<=1) return "0x";
    if(data.length>200000) return "0x";
    StringBuffer sb = new StringBuffer();
    int buf[] = new int[data.length];
    //byte数组转化成十进制
    for(int k=0;k<data.length;k++){
      buf[k] = data[k]<0?(data[k]+256):(data[k]);
    }
    //十进制转化成十六进制
    for(int k=0;k<buf.length;k++){
      if(buf[k]<16) sb.append("0"+Integer.toHexString(buf[k]));
      else sb.append(Integer.toHexString(buf[k]));
    }
    return "0x"+sb.toString().toUpperCase();
  }
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-09-25

使用java的IO流对图片进行二进制读取操作即可

示例为:读取图片为二进制流,并写入到其他图片中

static void testCopyImage(){
File source=new File("E:\\share\\Wallpaper\\Bliss.jpg");
File desk=new File("d:\\images");
if(!desk.exists()){
desk.mkdir();
}

try {
FileInputStream inputStream=new FileInputStream(source);
FileOutputStream outputStream=new FileOutputStream(new File("d:/images/Bliss.jpg"));

int ch=inputStream.read();
while(ch!=-1){
outputStream.write(ch);
ch=inputStream.read();
}

inputStream.close();
outputStream.close();
System.out.println("图片复制成功!");
} catch (FileNotFoundException e) {
System.out.println("文件不存在:"+e.getMessage());
} catch (IOException e) {
System.out.println("文件读取错误:"+e.getMessage());
}

}

第2个回答  推荐于2017-09-14




我们知道数据库里的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;
  }

本回答被提问者和网友采纳

Java中如何把图片转换成二进制流
Java中将图片转为二进制流只需要使用FileImageInputStream取得图片文件,然后使用ByteArrayOutputStream 写入到二进制流中即可,下面是详细代码:\/\/图片到byte数组 public byte[] image2byte(String path){ byte[] data = null; FileImageInputStream input = null; try { input = new Fi...

java中如何把一个图片转换成二进制流存入到类中啊?
1.将Image图像文件存入到数据库中 我们知道数据库里的Image类型的数据是"二进制数据",因此必须将图像文件转换成字节数组才能存入数据库中.要这里有关数据的操作略写,我将一些代码段写成方法,方便直接调用.\/\/根据文件名(完全路径)public byte[] SetImageToByteArray(string fileName){ FileStream fs = ...

java把图片转换成二进制流
byte[] read = new byte[1024]; \/\/每次读取的字节 可以自己定义 256 512 1024 2048 等。。。int len = 0;while((len = fis.read(read))!= -1){ \/\/读取变成流的图片 fos.write(read,0,len);\/\/写入图片 } fis.close();\/\/关闭输入流 fos.close();\/\/关闭输出流 } ...

java如何把图片转换成二进制并存到oracle的blob中,求代码
str); } \/** * 图片转二进制字符串 * * @param path 图片路径 * @return *\/ public static String img2Binary(String path) { File file = new File(path); if (!file.exists()) {

java中怎样把图片转换成二进制
catch block e.printStackTrace();} } 我这里是一次把图片全读进来,所以定义的数组长度为10240,也就是10kb吧,当然你也可以定义小点,然後分次读。反正二进制都在这个数组里面,最後两句我只是举了个例子教你怎麼看这个二进制,第一个是现实二进制对应的整数,第二个是显示二进制了。

java里怎样把文件转换成二进制?
转换文件成为二进制数据并保存的Java代码:取出数据并还原文件到本地的java代码:[java] view plain copy\/\/读取数据库二进制文件 public void readerJpg() throws SQLException { connection=connectionManager.getconn();\/\/自己连接自己的数据库 String sqlString="select images from save_image where id...

谁能给我提供一个可以把图片转化成二进制的java代码,谢谢啊
原型:int WINAPI icePub_imgToFileTextdata(char *strImgFilename,char *strFilename,char *strFenge,int flag)输入:strImgFilename 待处理图像文件 (会被强制256级灰度化)strFilename 待生成BMP文本数据文件名 strFenge 列之间分隔符 flag 文本数据格式标志:0 10进制; 1 16进制; 10 RGB16...

用java把一张图片变成二进制码
这个其实很好解决通过文件缓冲流读入,再读出时就是二进制编码。

java怎么实现读取一个文件,拿到二进制流
Java读取二进制文件,以字节为单位进行读取,还可读取图片、音乐文件、视频文件等,在Java中,提供了四种类来对文件进行操作,分别是InputStream OutputStream Reader Writer ,前两种是对字节流的操作,后两种则是对字符流的操作。示例代码如下:public static void readFileByBytes(String fileName)...

java数据转换图片(java将图片转为字符串)
如果是将存储在数据库的二进制流拿到之后展示,有两种方式,一种是将二进制流写入到磁盘然后通过路径访问,一种是直接输出二进制流到呈现的view(如果你的view支持的话)。java后台返回了一段hex数据,前端如何转化为图片?两种思路,一种是你把图片下下来。告诉路径给前端。另一种是你直接把图片转换成...

相似回答