В этой главе мы увидим, как вы можете загрузить изображение из Интернета, выполнить некоторые методы обработки изображения, а затем снова загрузить обработанное изображение на сервер.
Загрузка изображения
Чтобы загрузить изображение с веб-сайта, мы используем класс Java с именем URL , который можно найти в пакете java.net . Его синтаксис приведен ниже —
String website = "http://tutorialspoint.com"; URL url = new URL(website);
Помимо описанного выше метода, в URL-адресе класса доступны и другие методы, которые кратко описаны ниже.
Sr.No. | Метод и описание |
---|---|
1 |
public String getPath () Возвращает путь URL. |
2 |
public String getQuery () Возвращает часть запроса URL. |
3 |
public String getAuthority () Возвращает авторитет URL. |
4 |
public int getPort () Возвращает порт URL. |
5 |
public int getDefaultPort () Возвращает порт по умолчанию для протокола URL. |
6 |
public String getProtocol () Возвращает протокол URL. |
7 |
public String getHost () Возвращает хост URL. |
public String getPath ()
Возвращает путь URL.
public String getQuery ()
Возвращает часть запроса URL.
public String getAuthority ()
Возвращает авторитет URL.
public int getPort ()
Возвращает порт URL.
public int getDefaultPort ()
Возвращает порт по умолчанию для протокола URL.
public String getProtocol ()
Возвращает протокол URL.
public String getHost ()
Возвращает хост URL.
пример
В следующем примере демонстрируется использование класса URL Java для загрузки изображения из Интернета.
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);
Чтобы преобразовать изображение в байтовый массив, мы используем метод toByteArray () класса ByteArrayOutputStream . Его синтаксис приведен ниже —
byte[] bytes = baos.toByteArray();
Помимо описанного выше метода, в классе ByteArrayOutputStream доступны и другие методы, которые кратко описаны ниже.
Sr.No. | Метод и описание |
---|---|
1 |
public void reset () Этот метод сбрасывает число действительных байтов выходного потока массива байтов до нуля, так что весь накопленный вывод в потоке отбрасывается. |
2 |
public byte [] toByteArray () Этот метод создает вновь выделенный байтовый массив. Его размер будет текущим размером выходного потока, и содержимое буфера будет скопировано в него. Он возвращает текущее содержимое выходного потока в виде байтового массива. |
3 |
public String toString () Преобразует содержимое буфера в строку. Перевод будет выполнен в соответствии с кодировкой символов по умолчанию. Возвращает строку, переведенную из содержимого буфера. |
4 |
публичный void write (int w) Записывает указанный массив в выходной поток. |
5 |
public void write (byte [] b, int of, int len) Он записывает len количество байтов, начиная со смещения в поток. |
6 |
public void writeTo (OutputStream outSt) Он записывает все содержимое этого потока в указанный аргумент потока. |
public void reset ()
Этот метод сбрасывает число действительных байтов выходного потока массива байтов до нуля, так что весь накопленный вывод в потоке отбрасывается.
public byte [] toByteArray ()
Этот метод создает вновь выделенный байтовый массив. Его размер будет текущим размером выходного потока, и содержимое буфера будет скопировано в него. Он возвращает текущее содержимое выходного потока в виде байтового массива.
public String toString ()
Преобразует содержимое буфера в строку. Перевод будет выполнен в соответствии с кодировкой символов по умолчанию. Возвращает строку, переведенную из содержимого буфера.
публичный void write (int w)
Записывает указанный массив в выходной поток.
public void write (byte [] b, int of, int len)
Он записывает len количество байтов, начиная со смещения в поток.
public void writeTo (OutputStream outSt)
Он записывает все содержимое этого потока в указанный аргумент потока.
пример
В следующем примере демонстрируется 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); } }
Выход
Вывод на стороне клиента
Когда вы выполняете код клиента, на стороне клиента появляется следующий вывод:
Вывод на стороне сервера
Когда вы выполняете код сервера, на стороне сервера появляется следующий выход —
После получения изображения сервер отображает изображение, как показано ниже —