Görüntüleri İndirme ve Yükleme

Bu bölümde internetten bir görüntüyü nasıl indirebileceğinizi, görüntü üzerinde bazı görüntü işleme tekniklerini nasıl uygulayabileceğinizi ve ardından işlenen görüntüyü tekrar bir sunucuya yükleyebileceğinizi göreceğiz.

Bir Görüntüyü İndirme

Bir web sitesinden görsel indirmek için adlı java sınıfını kullanıyoruz URL, altında bulunabilir java.netpaketi. Söz dizimi aşağıda verilmiştir -

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

Yukarıdaki yöntemin dışında, kısaca açıklandığı gibi sınıf URL'sinde kullanılabilen başka yöntemler de vardır -

Sr.No. Yöntem ve Açıklama
1

public String getPath()

URL'nin yolunu döndürür.

2

public String getQuery()

URL'nin sorgu kısmını döndürür.

3

public String getAuthority()

URL'nin yetkisini döndürür.

4

public int getPort()

URL'nin bağlantı noktasını döndürür.

5

public int getDefaultPort()

URL protokolü için varsayılan bağlantı noktasını döndürür.

6

public String getProtocol()

URL'nin protokolünü döndürür.

7

public String getHost()

URL'nin ana bilgisayarını döndürür.

Misal

Aşağıdaki örnek, internetten bir görüntü indirmek için java URL sınıfının kullanımını göstermektedir -

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

Çıktı

Yukarıda verileni çalıştırdığınızda aşağıdaki çıktı görülür.

Sunucudan aşağıdaki görüntüyü indirecektir.

Bir Görüntü Yükleme

Bir web sunucusuna nasıl resim yükleneceğini görelim. Sunucuya göndermek için BufferedImage'ı bayt dizisine dönüştürüyoruz.

Java sınıfı kullanıyoruz ByteArrayOutputStream, altında bulunabilir java.iopaketi. Söz dizimi aşağıda verilmiştir -

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

Görüntüyü bayt dizisine dönüştürmek için kullanıyoruz toByteArray() yöntemi ByteArrayOutputStreamsınıf. Söz dizimi aşağıda verilmiştir -

byte[] bytes = baos.toByteArray();

Yukarıdaki yöntemin dışında, kısaca açıklandığı gibi ByteArrayOutputStream sınıfında kullanılabilen başka yöntemler de vardır -

Sr.No. Yöntem ve Açıklama
1

public void reset()

Bu yöntem, bayt dizisi çıktı akışının geçerli bayt sayısını sıfıra sıfırlar, böylece akıştaki tüm birikmiş çıktı atılır.

2

public byte[] toByteArray()

Bu yöntem, yeni ayrılmış bir Byte dizisi oluşturur. Boyutu, çıktı akışının geçerli boyutu olacaktır ve tamponun içeriği ona kopyalanacaktır. Çıkış akışının geçerli içeriğini bir bayt dizisi olarak döndürür.

3

public String toString()

Arabellek içeriğini bir dizeye dönüştürür. Çeviri, varsayılan karakter kodlamasına göre yapılacaktır. Arabelleğin içeriğinden çevrilen String'i döndürür.

4

public void write(int w)

Belirtilen diziyi çıktı akışına yazar.

5

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

Offset off'tan başlayarak akışa len bayt sayısını yazar.

6

public void writeTo(OutputStream outSt)

Bu Akışın tüm içeriğini belirtilen akış bağımsız değişkenine yazar.

Misal

Aşağıdaki örnek, ByteArrayOutputStream'in bir görüntüyü sunucuya yüklemesini gösterir -

Müşteri kodu

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

Sunucu Kodu

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

Çıktı

İstemci Tarafı Çıkışı

İstemci kodunu çalıştırdığınızda, istemci tarafında aşağıdaki çıktı görünür -

Sunucu Tarafı Çıkışı

Sunucu kodunu çalıştırdığınızda, sunucu tarafında aşağıdaki çıktı görünür -

Görüntüyü aldıktan sonra, sunucu görüntüyü aşağıda gösterildiği gibi görüntüler -