이미지 다운로드 및 업로드

이 장에서는 인터넷에서 이미지를 다운로드하고 이미지에 대해 몇 가지 이미지 처리 기술을 수행 한 다음 처리 된 이미지를 다시 서버에 업로드하는 방법을 살펴 보겠습니다.

이미지 다운로드

웹 사이트에서 이미지를 다운로드하기 위해 우리는 자바 클래스를 사용합니다. URL, 아래에서 찾을 수 있습니다. java.net꾸러미. 구문은 다음과 같습니다.

String website = "http://tutorialspoint.com";
URL url = new URL(website);

위의 방법 외에도 간략하게 설명 된대로 클래스 URL에서 사용할 수있는 다른 방법이 있습니다.

Sr. 아니. 방법 및 설명
1

public String getPath()

URL의 경로를 반환합니다.

2

public String getQuery()

URL의 쿼리 부분을 반환합니다.

삼

public String getAuthority()

URL의 권한을 반환합니다.

4

public int getPort()

URL의 포트를 반환합니다.

5

public int getDefaultPort()

URL 프로토콜의 기본 포트를 반환합니다.

6

public String getProtocol()

URL의 프로토콜을 반환합니다.

7

public String getHost()

URL의 호스트를 반환합니다.

예

다음 예제는 자바 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를 서버로 보내기 위해 바이트 배열로 변환합니다.

우리는 자바 클래스를 사용합니다 ByteArrayOutputStream, 아래에서 찾을 수 있습니다. java.io꾸러미. 구문은 다음과 같습니다.

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "jpg", baos);

이미지를 바이트 배열로 변환하기 위해 toByteArray() 의 방법 ByteArrayOutputStream수업. 구문은 다음과 같습니다.

byte[] bytes = baos.toByteArray();

위의 방법 외에도 간략하게 설명 된대로 ByteArrayOutputStream 클래스에서 사용할 수있는 다른 방법이 있습니다.

Sr. 아니. 방법 및 설명
1

public void reset()

이 메서드는 바이트 배열 출력 스트림의 유효한 바이트 수를 0으로 재설정하여 스트림에 누적 된 모든 출력을 버립니다.

2

public byte[] toByteArray()

이 메서드는 새로 할당 된 Byte 배열을 만듭니다. 그 크기는 출력 스트림의 현재 크기이며 버퍼의 내용이 여기에 복사됩니다. 출력 스트림의 현재 내용을 바이트 배열로 반환합니다.

삼

public String toString()

버퍼 내용을 문자열로 변환합니다. 기본 문자 인코딩에 따라 번역이 수행됩니다. 버퍼의 내용에서 번역 된 문자열을 반환합니다.

4

public void write(int w)

지정된 배열을 출력 스트림에 씁니다.

5

public void write(byte []b, int of, int len)

오프셋 오프에서 시작하여 len 바이트 수를 스트림에 씁니다.

6

public void writeTo(OutputStream 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);
   }
}

산출

클라이언트 측 출력

클라이언트 코드를 실행하면 다음 출력이 클라이언트 측에 나타납니다.

서버 측 출력

서버 코드를 실행하면 서버 측에 다음 출력이 나타납니다.

이미지 수신 후 서버는 아래와 같이 이미지를 표시합니다.