知识大全 Java图像传输方法

Posted

篇首语:提兵百万西湖上,立马吴山第一峰!本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java图像传输方法相关的知识,希望对你有一定的参考价值。

Java图像传输方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  一 序列化后传输

  图像对象可以编码成指定图像格式文件保存在硬盘上 需要时再对其进行解码读入内存 但是除了这样还有别的办法可以将图像对象保存在硬盘上吗?熟悉Java I/O 的人也许可以想到采用对象序列化(Object serialization) BufferedImage 提供一般图像管理

  BufferedImage 对象包括另外两个对象 Raster 和 ColorModel Raster 对象包含另外两个对象 DataBuffer 和 SampleModel 不幸的是 他们都没有实现序列化所必需的 Serializable 接口 所以无法直接对他们进行对象序列化 JAI 的 dia jai remote 包里有一个类 SerializableRenderedImage 这个类实现了RenderedImage Serializable 接口 可以将 RanderedImage 对象作为构造函数的参数实例化一个可以序列化的图像对象

  查看JDK的文档可以知道无论 Java D 中的 BufferedImage 还是 JAI 中的 PlanarImage 都实现了 RenderedImage 接口 也就是说所有实现自 RenderedImage

  

  接口的对象均可作为参数包装出一个 SerializableRenderedImage 类型对象 将其序列化

  下面是一个简单的例子说明了这个类的使用方法

  查看复制到剪切板打印

  import java io *;

  import dia jai remote *;

  import java awt image *;

  public class SomeSerializableClass implements Serializable

  protected transient RenderedImage image;

  public SomeSerializableClass(RenderedImage image)

  this image = image;

  

  // Serialization method

  private void writeObject(ObjectOutputStream out) throws

  IOException

  out defaultWriteObject();

  out writeObject(new SerializableRenderedImage(image true));

  

  // Deserialization method

  private void readObject(ObjectInputStream in) throws IOException ClassNotFoundException

  in defaultReadObject();

  image = (RenderedImage) in readObject();

  

  

  二 以字节流的方式传输

   图像编码

  因为图像编码解码主要目的是针对图像在网络中的传输 所以编码之后的图像不必保存在硬盘上 可以直接放入一个字节数组

  查看复制到剪切板打印

  public byte[] getCompressedImage(BufferedImage image)

  byte[] imageData = null;

  try

  ByteArrayOutputStream baos = new ByteArrayOutputStream();

  ImageIO write(image jpg baos);

  imageData = baos toByteArray();

   catch (IOException ex)

  imageData = null;

  

  return imageData;

  

   图像解码

  接收端接收到表示图像数据的字节数组后 对其进行解码 得到图像对象 因为我们在发送端将其编码成JPEG格式 所以可以直接在接收端使用ImageIO对其进行解码

  查看复制到剪切板打印

  public BufferedImage getDepressedImage(byte[] imageData)

  try

  ByteArrayInputStream bais = new ByteArrayInputStream(imageData);

  return ImageIO read(bais);

   catch (IOException ex)

  return null;

  

  

   网络传输

cha138/Article/program/Java/hx/201311/25572

相关参考