Mendownload & Mengupload Gambar

Dalam bab ini kita akan melihat bagaimana Anda dapat mengunduh gambar dari internet, melakukan beberapa teknik pemrosesan gambar pada gambar, dan kemudian mengunggah gambar yang telah diproses ke server.

Mendownload Gambar

Untuk mengunduh gambar dari situs web, kami menggunakan kelas java bernama URL, yang dapat ditemukan di bawah java.netpaket. Sintaksnya diberikan di bawah ini -

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

Selain metode di atas, ada metode lain yang tersedia di URL kelas seperti yang dijelaskan secara singkat -

Sr.No. Metode & Deskripsi
1

public String getPath()

Ini mengembalikan jalur URL.

2

public String getQuery()

Ini mengembalikan bagian kueri dari URL.

3

public String getAuthority()

Ini mengembalikan otoritas URL.

4

public int getPort()

Ini mengembalikan port dari URL.

5

public int getDefaultPort()

Ini mengembalikan port default untuk protokol URL.

6

public String getProtocol()

Ini mengembalikan protokol URL.

7

public String getHost()

Ini mengembalikan host dari URL.

Contoh

Contoh berikut menunjukkan penggunaan kelas URL java untuk mendownload gambar dari internet -

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());
      }
   }
}

Keluaran

Ketika Anda menjalankan yang diberikan di atas, output berikut akan terlihat.

Ini akan mengunduh gambar berikut dari server.

Mengupload Gambar

Mari kita lihat cara mengunggah gambar ke server web. Kami mengonversi BufferedImage ke byte array untuk mengirimkannya ke server.

Kami menggunakan kelas Java ByteArrayOutputStream, yang dapat ditemukan di bawah java.iopaket. Sintaksnya diberikan di bawah ini -

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

Untuk mengubah gambar menjadi array byte, kami menggunakan toByteArray() metode dari ByteArrayOutputStreamkelas. Sintaksnya diberikan di bawah ini -

byte[] bytes = baos.toByteArray();

Terlepas dari metode di atas, ada metode lain yang tersedia di kelas ByteArrayOutputStream seperti yang dijelaskan secara singkat -

Sr.No. Metode & Deskripsi
1

public void reset()

Metode ini menyetel ulang jumlah byte yang valid dari aliran keluaran array byte ke nol, sehingga semua keluaran yang terakumulasi dalam aliran tersebut dibuang.

2

public byte[] toByteArray()

Metode ini membuat array Byte yang baru dialokasikan. Ukurannya akan menjadi ukuran arus keluaran dan konten buffer akan disalin ke dalamnya. Ini mengembalikan konten arus keluaran sebagai array byte.

3

public String toString()

Mengubah konten buffer menjadi string. Terjemahan akan dilakukan sesuai dengan pengkodean karakter default. Ini mengembalikan String yang diterjemahkan dari konten buffer.

4

public void write(int w)

Ini menulis larik yang ditentukan ke aliran keluaran.

5

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

Ini menulis jumlah len byte mulai dari offset ke aliran.

6

public void writeTo(OutputStream outSt)

Ini menulis seluruh konten Stream ini ke argumen aliran yang ditentukan.

Contoh

Contoh berikut menunjukkan ByteArrayOutputStream untuk mengunggah gambar ke server -

Kode Klien

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();
   }
}

Kode Server

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);
   }
}

Keluaran

Output Sisi Klien

Saat Anda menjalankan kode klien, keluaran berikut muncul di sisi klien -

Output Sisi Server

Saat Anda menjalankan kode server, ouptut berikut muncul di sisi server -

Setelah menerima gambar, server menampilkan gambar seperti yang ditunjukkan di bawah ini -