- Java数字图像处理
- DIP - 主页
- DIP - 简介
- DIP - Java BufferedImage 类
- DIP - 图像下载和上传
- DIP - 图像像素
- DIP - 灰度转换
- DIP - 增强图像对比度
- DIP - 增强图像亮度
- DIP - 增强图像清晰度
- DIP - 图像压缩技术
- DIP - 添加图像边框
- DIP - 图像Pyramid
- DIP - 基本阈值
- DIP - 图像形状转换
- DIP - 高斯滤波器
- DIP - 箱式过滤器
- DIP - 腐蚀和膨胀
- DIP - 水印
- DIP - 理解卷积
- DIP - Prewitt 操作员
- DIP - 索贝尔操作员
- DIP - 基尔希运算符
- DIP - 罗宾逊操作员
- DIP - 拉普拉斯算子
- DIP - 加权平均滤波器
- DIP - 创建缩放效果
- DIP - 开源库
- DIP - OpenCV 简介
- DIP - 灰度转换 OpenCV
- DIP - 色彩空间转换
- DIP 有用资源
- DIP - 快速指南
- DIP - 有用的资源
- DIP - 讨论
下载和上传图像
在本章中,我们将了解如何从互联网下载图像,对图像执行一些图像处理技术,然后再次将处理后的图像上传到服务器。
下载图像
为了从网站下载图像,我们使用名为URL的 java 类,该类可以在java.net包下找到。其语法如下 -
String website = "http://tutorialspoint.com"; URL url = new URL(website);
除了上述方法之外,URL 类中还有其他方法可用,简要描述如下:
先生。 | 方法及说明 |
---|---|
1 |
公共字符串 getPath() 它返回 URL 的路径。 |
2 |
公共字符串 getQuery() 它返回 URL 的查询部分。 |
3 |
公共字符串 getAuthority() 它返回 URL 的权限。 |
4 |
公共 int getPort() 它返回 URL 的端口。 |
5 |
公共 int getDefaultPort() 它返回 URL 协议的默认端口。 |
6 |
公共字符串 getProtocol() 它返回 URL 的协议。 |
7 |
公共字符串 getHost() 它返回 URL 的主机。 |
例子
以下示例演示了使用 java URL 类从互联网下载图像 -
import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; public class Download { public static void main(String[] args) throws Exception { try{ String fileName = "digital_image_processing.jpg"; String website = "http://tutorialspoint.com/java_dip/images/"+fileName; System.out.println("Downloading File From: " + website); URL url = new URL(website); InputStream inputStream = url.openStream(); OutputStream outputStream = new FileOutputStream(fileName); byte[] buffer = new byte[2048]; int length = 0; while ((length = inputStream.read(buffer)) != -1) { System.out.println("Buffer Read of length: " + length); outputStream.write(buffer, 0, length); } inputStream.close(); outputStream.close(); } catch(Exception e) { System.out.println("Exception: " + e.getMessage()); } } }
输出
当您执行上面的命令时,会看到以下输出。
它将从服务器下载以下图像。
上传图片
让我们看看如何将图像上传到网络服务器。我们将 BufferedImage 转换为字节数组,以便将其发送到服务器。
我们使用 Java 类ByteArrayOutputStream ,它可以在java.io包下找到。其语法如下 -
ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageIO.write(image, "jpg", baos);
为了将图像转换为字节数组,我们使用ByteArrayOutputStream类的toByteArray()方法。其语法如下 -
byte[] bytes = baos.toByteArray();
除了上述方法之外,ByteArrayOutputStream 类中还有其他方法可用,简要描述如下:
先生。 | 方法及说明 |
---|---|
1 |
公共无效重置() 该方法将字节数组输出流的有效字节数重置为零,从而丢弃流中所有累积的输出。 |
2 |
公共字节[] toByteArray() 此方法创建一个新分配的字节数组。它的大小将是输出流的当前大小,并且缓冲区的内容将被复制到其中。它将输出流的当前内容作为字节数组返回。 |
3 |
公共字符串 toString() 将缓冲区内容转换为字符串。翻译将根据默认的字符编码进行。它返回从缓冲区内容转换而来的字符串。 |
4 |
公共无效写入(int w) 它将指定的数组写入输出流。 |
5 |
公共无效写入(字节[]b,int of,int len) 它将从偏移量 off 开始的 len 个字节写入流中。 |
6 |
公共无效writeTo(输出流outSt) 它将该 Stream 的全部内容写入指定的流参数。 |
例子
以下示例演示了 ByteArrayOutputStream 将图像上传到服务器 -
客户端代码
import javax.swing.*; import java.net.*; import java.awt.image.*; import javax.imageio.*; import java.io.*; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; public class Client{ public static void main(String args[]) throws Exception{ Socket soc; BufferedImage img = null; soc=new Socket("localhost",4000); System.out.println("Client is running. "); try { System.out.println("Reading image from disk. "); img = ImageIO.read(new File("digital_image_processing.jpg")); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageIO.write(img, "jpg", baos); baos.flush(); byte[] bytes = baos.toByteArray(); baos.close(); System.out.println("Sending image to server. "); OutputStream out = soc.getOutputStream(); DataOutputStream dos = new DataOutputStream(out); dos.writeInt(bytes.length); dos.write(bytes, 0, bytes.length); System.out.println("Image sent to server. "); dos.close(); out.close(); } catch (Exception e) { System.out.println("Exception: " + e.getMessage()); soc.close(); } soc.close(); } }
服务器代码
import java.net.*; import java.io.*; import java.awt.image.*; import javax.imageio.*; import javax.swing.*; class Server { public static void main(String args[]) throws Exception{ ServerSocket server=null; Socket socket; server = new ServerSocket(4000); System.out.println("Server Waiting for image"); socket = server.accept(); System.out.println("Client connected."); InputStream in = socket.getInputStream(); DataInputStream dis = new DataInputStream(in); int len = dis.readInt(); System.out.println("Image Size: " + len/1024 + "KB"); byte[] data = new byte[len]; dis.readFully(data); dis.close(); in.close(); InputStream ian = new ByteArrayInputStream(data); BufferedImage bImage = ImageIO.read(ian); JFrame f = new JFrame("Server"); ImageIcon icon = new ImageIcon(bImage); JLabel l = new JLabel(); l.setIcon(icon); f.add(l); f.pack(); f.setVisible(true); } }
输出
客户端输出
当您执行客户端代码时,客户端会出现以下输出 -
服务器端输出
当您执行服务器代码时,服务器端会出现以下输出 -
收到图像后,服务器显示图像,如下所示 -