`
zl-2577
  • 浏览: 80217 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

BufferedImage与byte[]互转

 
阅读更多
转载自:http://www.cnblogs.com/XL-Liang/archive/2011/12/30/2307220.html
BufferedImage与byte[]互转

一、需要用到的类
java.awt.image.BufferedImage;
javax.imageio.ImageIO;
java.io.*;


二、为什么要将BufferedImage转为byte数组

在传输中,图片是不能直接传的,因此需要把图片变为字节数组,然后传输比较方便;只需要一般输出流的write方法即可;
而字节数组变成BufferedImage能够还原图像;

三、如何取得BufferedImage

BufferedImage image = ImageIO.read(new File("1.gif"));


四、BufferedImage  ---->byte[]

ImageIO.write(BufferedImage image,String format,OutputStream out);方法可以很好的解决问题;
参数image表示获得的BufferedImage;
参数format表示图片的格式,比如“gif”等;
参数out表示输出流,如果要转成Byte数组,则输出流为ByteArrayOutputStream即可;
执行完后,只需要toByteArray()就能得到byte[];

五、byte[] ------>BufferedImage

ByteArrayInputStream in = new ByteArrayInputStream(byte[]b);    //将b作为输入流;
BufferedImage image = ImageIO.read(InputStream in);     //将in作为输入流,读取图片
存入image中,而这里in可以为ByteArrayInputStream();

六、显示BufferedImage

public void paint(Graphics g){
super.paint(g);
g.drawImage(image);    //image为BufferedImage类型
}


七、实例

要求:编写一个网络程序,通过Socket将图片从服务器端传到客户端,并存入文件系统;
Server端:
package org.exam3;

import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.net.ServerSocket;
import java.net.Socket;

import javax.imageio.ImageIO;

public class T6Server {

public static void main(String[] args) throws Exception {
        ServerSocket server = new ServerSocket(8888);
        Socket s = server.accept();
        DataOutputStream dout = new DataOutputStream(s.getOutputStream());
        BufferedImage image = ImageIO.read(new File("1.gif"));
        ByteArrayOutputStream out = new ByteArrayOutputStream();
boolean flag = ImageIO.write(image, "gif", out);
byte[] b = out.toByteArray();
        dout.write(b);
        s.close();
    }

}



Client端:

package org.exam3;

import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.PrintWriter;
import java.net.Socket;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class T6Client extends JFrame {
    JButton button;
    MyPanel panel;
public T6Client() {
        setSize(300, 400);
        button = new JButton("获取图像");
        add(button,BorderLayout.NORTH);
        button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
try {
                    Socket s = new Socket("localhost",8888);
                    PrintWriter out = new PrintWriter(s.getOutputStream());
                    out.print("a");
                    DataInputStream in = new DataInputStream(s.getInputStream());
byte[]b = new byte[1000000];
                    in.read(b);
                    ByteArrayInputStream bin = new ByteArrayInputStream(b);
                    BufferedImage image = ImageIO.read(bin);
                    ImageIO.write(image, "gif", new File("2.gif"));
                    s.close();
                } catch (Exception e) {
                }
            }
        });
        panel = new MyPanel();
        add(panel);

    }
public static void main(String[] args) throws Exception {
        T6Client frame = new T6Client();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }

}
分享到:
评论

相关推荐

    IplImage 与BufferedImage互相转换

    public static BufferedImage iplToBufImgData(IplImage ipl,BufferedImage image ) public static IplImage BufImgToIplData(IplImage ipl,BufferedImage bi)

    Java Image转BufferedImage

    否则,创建一个新的`BufferedImage`实例,其宽度和高度与原始`Image`相同,并根据`Image`的色彩模型和透明度选择适当的`BufferedImage`类型。然后,使用`Graphics2D`将`Image`绘制到`BufferedImage`上,完成转换过程...

    转换Image数据为byte数组

    当涉及到网络传输或存储时,将图像数据转换为字节数组(byte array)成为了一种实用且高效的手段。下面,我们将深入探讨如何在Java中实现图像数据与字节数组之间的相互转换,并分析这一过程中的关键步骤和技术细节。...

    image与字节数组byte的互转

    以上就是关于在Java、Python和C#中实现图像与字节数组互转的方法。在实际应用中,确保正确处理异常和资源管理是非常重要的。此外,选择正确的图像格式(如JPEG、PNG等)会影响转换后的文件大小和质量。在处理大量...

    Java将图片转换为byte数组例子总结

    1. **创建缓冲图像**:首先创建一个与输入图像尺寸相同的`BufferedImage`对象,类型为`BufferedImage.TYPE_INT_ARGB`,这是为了确保图像具有透明度通道。 2. **绘制图像**:使用`Graphics`对象将原始图像绘制到缓冲...

    java opencv BufferedImage与Mat互相转换.rar_OpenCV_Java_

    总结来说,理解和掌握`Mat`与`BufferedImage`之间的转换对于在Java环境中有效地使用OpenCV至关重要。无论是进行图像显示、保存还是进一步的处理,这种转换都是不可或缺的步骤。熟练运用这些转换方法,可以极大地扩展...

    java 将图片进行180度旋转

    BufferedImage rotatedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); // 创建Graphics2D对象 Graphics2D g2d = rotatedImage.createGraphics(); // 平移坐标系统到图像中心 g2d....

    java中如何使用BufferedImage判断图像通道顺序并转RGB/BGR

    Java中使用BufferedImage判断图像通道顺序并转RGB/BGR 在Java中,使用BufferedImage处理图像时,需要判断图像的通道顺序,判断图像是否为RGB或BGR格式,并对其进行相应的转换。本文将详细介绍如何使用BufferedImage...

    将BufferedImage保存为BMP格式的文件

    下面,我们将深入分析与BMP文件格式相关的知识点,以及如何在Java中实现`BufferedImage`到BMP文件的转换。 ### BMP文件结构 BMP文件由多个部分组成,主要包括文件头(File Header)和信息头(Info Header),以及...

    java互转jpg和raw格式图片

    要实现JPEG转RAW,首先需要确保项目中引入了JAI-ImageIO库。你可以通过Maven或Gradle等构建工具添加依赖。接着,你可以使用以下步骤进行转换: 1. 创建`BufferedImage`对象,读取JPEG文件。 2. 获取`RenderedImage`...

    读取图片数据到byte[]数组,合并inputStream每次读取产生的缓冲byte[]

    本文将深入探讨如何将图片数据读取到`byte[]`数组,并如何合并由多次`InputStream`读取产生的缓冲`byte[]`。这涉及到Java编程语言中的IO流操作以及数据转换。 首先,我们来理解“读取图片数据到byte[]数组”。在...

    通过BufferedImage实现将几张图片合成一张图片,图片效果类型为依次排列图片

    在Java编程语言中,`BufferedImage`类是用于创建和操作图像的重要工具。这个类提供了丰富的功能,包括读取、写入、绘制和修改图像。在这个特定的场景中,我们利用`BufferedImage`来实现一个有趣的功能:将四张图片...

    java实现的PDF与JPG文件互转

    本文将详细讲解如何使用Java实现PDF与JPG文件的互转。 首先,我们需要理解转换过程涉及的主要技术。PDF转JPG主要涉及到PDF解析和图像渲染,而JPG转PDF则需要图像处理和PDF生成。Java提供了一些库来支持这些操作,如...

    java图片旋转

    - 使用`createCompatibleImage()`方法创建一个新的`BufferedImage`对象,确保颜色模型与原始图像兼容,这样在绘制时能提高效率。 - 考虑性能:对于大量或大尺寸的图片,直接操作原始图像可能会很慢。可以先缩小...

    解析:android 如何从JPEG生成BufferedImage

    在Android开发中,有时我们需要对图像进行处理,例如解析JPEG图像并将其转换为BufferedImage对象。BufferedImage是Java AWT库中的一个类,提供了一种更高级别的图像操作接口。在Android环境中,虽然不直接支持AWT库...

    itext7 pdf转图片

    - 图像编码与解码:图像在存储和传输时通常会被压缩,如JPEG使用有损压缩,而PNG使用无损压缩。解码是将压缩后的图像数据恢复为原始像素的过程。 - 图像转换:将PDF转换为图像,实际上是将PDF的每一页解析并渲染...

    将图片转成二进制并生成Base64编码字符串,再将二进制转换成各种图片

    这将返回一个`byte[]`,与最初读取图片时的字节数组相同。 4. **将字节数组转换回图片**: 有了解码后的字节数组,我们再次使用`ImageIO.write`方法,将这些字节写入一个新的`BufferedImage`对象,然后可以保存或...

    Ycbcr转RGB 以ppm图片打开、图片十六进制字符串互转

    总之,通过理解颜色空间转换、图片数据的16进制表示,以及Java中的图像处理技术,我们可以实现YCbCr到RGB的转换,以及图片与16进制字符串之间的相互转换。这在图像处理、数据存储和网络传输等领域有着广泛应用。

    java 使用ImageIO.writer从BufferedImage生成jpeg图像遇到问题总结及解决

    public static byte[] writeJPEGBytes(BufferedImage source) { if (null == source) throw new NullPointerException(); ByteArrayOutputStream output = new ByteArrayOutputStream(); JPEGImageEncoder ...

    java中ImageReader和BufferedImage获取图片尺寸实例

    Java 中 ImageReader 和 BufferedImage 获取图片尺寸实例 Java 中获取图片尺寸有多种方法,其中使用 ImageReader 和 BufferedImage 是两种常见的方法。本文将对这两种方法进行详细介绍,并提供相应的代码实现。 ...

Global site tag (gtag.js) - Google Analytics