参考:http://blog.csdn.net/xiazdong/article/details/6929975
一、需要用到的类
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);
}
}
分享到:
相关推荐
以上就是关于在Java、Python和C#中实现图像与字节数组互转的方法。在实际应用中,确保正确处理异常和资源管理是非常重要的。此外,选择正确的图像格式(如JPEG、PNG等)会影响转换后的文件大小和质量。在处理大量...
总结来说,理解和掌握`Mat`与`BufferedImage`之间的转换对于在Java环境中有效地使用OpenCV至关重要。无论是进行图像显示、保存还是进一步的处理,这种转换都是不可或缺的步骤。熟练运用这些转换方法,可以极大地扩展...
byte[] buffer = new byte[1024]; int read; while ((read = fis.read(buffer)) != -1) { os.write(buffer, 0, read); } fis.close(); os.close(); ``` 在上述代码中,我们先读取本地文件,然后将读取到的字节...
【个人博客】 Java、技术面试必备基础知识、Leetcode、计算机操作系统、计算机网络等_CSLearning
yolo系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
人力资源+大数据+薪酬报告+涨薪调薪,在学习、工作生活中,越来越多的事务都会使用到报告,通常情况下,报告的内容含量大、篇幅较长。那么什么样的薪酬报告才是有效的呢?以下是小编精心整理的调薪申请报告,欢迎大家分享。相信老板看到这样的报告,一定会考虑涨薪的哦。
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
这是一个基于全卷积神经网络的语音识别系统_DFCNN-master
一个可以运行在 vercel 上的 go 语言框架,基于 g
基于一维卷积神经网络(1D-CNN)的多元时间序列分类_TSC-CNN
网鼎杯
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
OrinNX平台JetPack 5.1.4-R35.6.0版本相机相关补丁1
MD5EditTools,MD5修改工具.exe
原文链接:https://blog.csdn.net/zsd12379/article/details/141281454 包含功能: 业主管理:实现业主信息的录入、编辑、查询与删除,确保业主数据的准确性和完整性。 维修员管理:管理维修员的基本信息、工作状态和派工情况,优化维修资源配置。 楼宇信息管理:记录并维护楼宇的基本信息、设施详情及状态,支持快速查询与更新。 业主投诉管理:接收并处理业主的投诉信息,跟踪处理进度,提升业主满意度。 业主报修管理:提供便捷的报修渠道,记录报修详情,实现报修请求的有效管理。 报修处理管理:分配报修任务给维修员,跟踪报修进度,确保报修问题及时解决。 缴费信息管理:管理业主的缴费记录,包括物业费、维修基金等,支持费用查询与提醒。 建议反馈管理:收集业主的建议与反馈,促进物业服务的持续改进和优化。
<项目介绍> - 该项目是为了研究基于深度卷积神经网络的图像去噪算法,是利用DnCNN模型,但是为了比较该算法的效果,另外实现了四种传统的图像去噪算法(均值滤波、中值滤波、非局部均值滤波NLM和三维块匹配滤波BM3D)作为对照组 - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------