BufferedImage与byte[]互转

转载自   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,x,y,width,height,null);    //image为BufferedImage类型

}

如果要自动调用paint方法,则需要调用repaint()方法;


七、实例


要求:编写一个网络程序,通过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(8889);  System.out.println("服务器开启连接...端口为8889");  Socket s = server.accept();  while(true){  System.out.println("一客户端连接服务器,服务器传输图片...");  DataOutputStream dout = new DataOutputStream(s.getOutputStream());  BufferedImage image = ImageIO.read(new File("1.gif"));  //读取1.gif并传输  ByteArrayOutputStream out = new ByteArrayOutputStream();  boolean flag = ImageIO.write(image, "gif", out);  byte[] b = out.toByteArray();  dout.write(b);  s.close();  System.out.println("图片传送完毕,服务器开启连接...端口为8889");  s = server.accept();  }  }  
}  

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.ByteArrayOutputStream;  
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;  JPanel panel;  int count = 0;  BufferedImage image ;  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",8889);  PrintWriter out = new PrintWriter(s.getOutputStream());  out.print("a");  DataInputStream in = new DataInputStream(s.getInputStream());  byte[]b = new byte[1024];  ByteArrayOutputStream bout = new ByteArrayOutputStream();  int length = 0;  while((length=in.read(b))!=-1){  bout.write(b, 0, length);  }  ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());  image = ImageIO.read(bin);  repaint();  ImageIO.write(image, "gif", new File("output-"+count+".gif"));  count++;  s.close();  } catch (Exception e) {  }  }  });  panel = new JPanel();  add(panel);  }  @Override  public void paint(Graphics g){  super.paint(g);  g.drawImage(image, 20, 20, 300, 150, null);//image为BufferedImage类型  }  public static void main(String[] args) throws Exception {  T6Client frame = new T6Client();  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  frame.setVisible(true);  }  }  


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328670.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2016经典微小说:《轮回》

内容来源于:网络 多年前,每到清晨,她要送他去幼儿园前。他总是哭着对她恳求:“妈妈,我在家听话,我不惹你生气,求你别送我去幼儿园,我想和你在一起。” 急匆匆忙着要上班的她&#xf…

delphi dll是否可用var参数_时间序列之向量自回归(VAR)学习重点

综合整理自:百度文库等向量自回归介绍:当我们对变量是否真是外生变量的情况不自信时,传递函数分析的自然扩展就是均等地对待每一个变量。在双变量情况下,我们可以令{yt}的时间路径受序列{zt}的当期或过去的实际值的影响&#xff0…

关于TCP/IP必须知道的几个基础问题

转载自 关于TCP/IP必须知道的几个基础问题描述一下TCP三次握手的过程 接下来我们根据下面这幅图来解释一下TCP三次握手。p.s: 每个箭头代表一次握手。第一次握手 client(客户端)发送一个SYN(seqx)包给server(服务器),然后“期待”server的ACK回复。p.s: seq为sequ…

升讯威微信营销系统开发实践:(3)中控服务器的设计 .Net 还是 Java?

在上一篇文章中,简要介绍了升讯威微信营销系统的功能设计和架构设计,限于篇幅只能抛砖引玉,从本章节开始将围绕功能的设计和架构的设计进行详细的论述。 中控服务器的设计 在上文中,我们谈到需要一个中控服务器,用来维…

Java 虚拟机部分面试题

https://www.imooc.com/article/31018?block_idtuijian_wz https://www.imooc.com/article/31018?block_idtuijian_wz https://github.com/Snailclimb/Java_Guide https://github.com/Snailclimb/Java_Guide

linux 提取cpio_15. Linux提取RPM包文件(cpio命令)详解

在讲解如何从 RPM 包中提取文件之前,先来系统学习一下 cpio 命令。cpio 命令用于从归档包中存入和读取文件,换句话说,cpio 命令可以从归档包中提取文件(或目录),也可以将文件(或目录)复制到归档包中。归档包,也可称为文…

升讯威微信营销系统开发实践:(2)功能设计与架构设计

在上一篇中,我们详细分析了微信订阅号和服务号的区别,在本篇中,将进入正题:升讯威微信营销系统的功能设计及架构设计。 一、功能设计 1)设计目标 ◇ 为微信服务号提供运营及管理所需的各种功能,包括微官网、…

解读分库分表中间件Sharding-JDBC

转载自 解读分库分表中间件Sharding-JDBC编者按】数据库分库分表从互联网时代开启至今,一直是热门话题。在NoSQL横行的今天,关系型数据库凭借其稳定、查询灵活、兼容等特性,仍被大多数公司作为首选数据库。因此,合理采用分库分表…

java面试设计模式

https://blog.csdn.net/yinyuehepijiu/article/details/38663843

新闻发布项目——实体类(User)

package bdqn.newsMange.entity; /*** User的实体类* author Administrator**/ public class User {private int userId;//编号private String userName;//用户名private String userPassword;//密码private String uRole;//角色public int getUserId() {return userId;}public…

js webpack 配置路径_webpack中如何设置html引入js的路径

如题所示,如果webpack这样配置var htmlWebpackPlugin require(html-webpack-plugin);const CleanWebpackPlugin require(clean-webpack-plugin);let pathsToClean [dist,];module.exports {entry: ./src/app.js,output: {path: __dirname /dist,filename: main.[chunkhash…

HTTP 报文结构

https://www.jianshu.com/p/a2c4ede32d11

Java魔法堂:URI、URL(含URL Protocol Handler)和URN

转载自 Java魔法堂:URI、URL(含URL Protocol Handler)和URN一、前言                              过去一直搞不清什么是URI什么是URL,现在是时候好好弄清楚它们了!本文作为学习笔记…

升讯威微信营销系统开发教程:(1)订阅号和服务号深入分析

微信开发系列教程,将以一个实际的微信平台项目为案例,深入浅出的讲解微信开发、应用各环节的实现方案和技术细节。 原创内容,欢迎转载,转载请注明出处。 首先在第1章节中,我们先理清什么是订阅号,什么又是服…

不安装cudnn可不可以_Linux非root用户如何优雅的安装cuda和cudnn

Linux非root用户如何优雅的安装cuda和cudnn发布时间:2018-05-23 16:11,浏览次数:804, 标签:LinuxrootcudacudnnLinux非root用户如何优雅的安装cuda和cudnn跑深度学习模型时,总会遇到各种版本的问题。如深度学习框架与cuda的版本不…

如果你也会C#,那不妨了解下F#(4):了解函数及常用函数

函数式编程其实就是按照数学上的函数运算思想来实现计算机上的运算。虽然我们不需要深入了解数学函数的知识,但应该清楚函数式编程的基础是来自于数学。 例如数学函数f(x) x^2x,并没有指定返回值的类型,在数学函数中并不需要关心数值类型和返…

新闻发布项目——实体类(newsTb)

package bdqn.newsMange.entity;import java.util.Date;/*** 新闻的实体类* author Administrator**/ public class newsTb {private int newsID;// 编号private int categoryID;//类别编号(外键)private String summary;// 摘要private String title;//题目private String con…

Java URL协议扩展实现

转载自 Java URL协议扩展实现在信息交互系统设计中,不乏有自定义通讯协议设计。本章会介绍如何利用 java.net.URL 类来自定义协议。一般而言, URL 的格式是: protocol://[authority]hostname:port/resource?queryString 。 URL 类能够解析…

axure8 事件改变样式_AxureRP8实战手册-案例2(文本框:边框变色)

案例2. 文本框:边框变色案例来源:百度-登录界面案例效果:光标进入文本框时:(图1-6)案例描述:在登录界面中,包含用户名与密码的输入框。当焦点进入输入框时,输入框边框与内部图标变为蓝色;失去…

URL的getFile()和getPath()方法的区别

转载自 URL的getFile()和getPath()方法的区别 import java.net.MalformedURLException; import java.net.URL; public class dd { /** * param args */ public static void main(String[] args) { try { URL url new URL("file://ftp.yoyodyne.com/pub/files/fo…