Author: saqibkhan

  • Downloading & Uploading Images

    In this chapter we are going to see how you can download an image from internet, perform some image processing techniques on the image, and then again upload the processed image to a server.

    Downloading an Image

    In order to download an image from a website, we use java class named URL, which can be found under java.net package. Its syntax is given below −

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

    Apart from the above method, there are other methods available in class URL as described briefly −

    Sr.No.Method & Description
    1public String getPath()It returns the path of the URL.
    2public String getQuery()It returns the query part of the URL.
    3public String getAuthority()It returns the authority of the URL.
    4public int getPort()It returns the port of the URL.
    5public int getDefaultPort()It returns the default port for the protocol of the URL.
    6public String getProtocol()It returns the protocol of the URL.
    7public String getHost()It returns the host of the URL.

    Example

    The following example demonstrates the use of java URL class to download an image from the 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());
      }
    } }

    Output

    When you execute the given above, the following output is seen.

    Downloading & Uploading Images Tutorial

    It would download the following image from the server.

    Uploading an Image

    Let us see how to upload an image to a webserver. We convert a BufferedImage to byte array in order to send it to server.

    We use Java class ByteArrayOutputStream, which can be found under java.io package. Its syntax is given below −

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

    In order to convert the image to byte array, we use toByteArray() method of ByteArrayOutputStream class. Its syntax is given below −

    byte[] bytes = baos.toByteArray();
    

    Apart from the above method, there are other methods available in the ByteArrayOutputStream class as described briefly −

    Sr.No.Method & Description
    1public void reset()This method resets the number of valid bytes of the byte array output stream to zero, so that all the accumulated output in the stream is discarded.
    2public byte[] toByteArray()This method creates a newly allocated Byte array. Its size would be the current size of the output stream and the contents of the buffer will be copied into it. It returns the current contents of the output stream as a byte array.
    3public String toString()Converts the buffer content into a string. Translation will be done according to the default character encoding. It returns the String translated from the buffer’s content.
    4public void write(int w)It writes the specified array to the output stream.
    5public void write(byte []b, int of, int len)It writes len number of bytes starting from offset off to the stream.
    6public void writeTo(OutputStream outSt)It writes the entire content of this Stream to the specified stream argument.

    Example

    The following example demonstrates ByteArrayOutputStream to upload an image to the server −

    Client Code

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

    Server Code

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

    Output

    Client Side Output

    When you execute the client code, the following output appears on client side −

    downloading uploading images

    Server Side Output

    When you execute the server code, the following ouptut appears on server side −

    downloading uploading images

    After receiving the image, the server displays the image as shown below −

  • Java BufferedImage Class

    Java BufferedImage class is a subclass of Image class. It is used to handle and manipulate the image data. A BufferedImage is made of ColorModel of image data. All BufferedImage objects have an upper left corner coordinate of (0, 0).

    Constructors

    This class supports three types of constructors.

    The first constructor constructs a new BufferedImage with a specified ColorModel and Raster.

    BufferedImage(ColorModel cm, WritableRaster raster, 
    boolean isRasterPremultiplied, Hashtable<?,?> properties)
    

    The second constructor constructs a BufferedImage of one of the predefined image types.

    BufferedImage(int width, int height, int imageType)
    

    The third constructor constructs a BufferedImage of one of the predefined image types: TYPE_BYTE_BINARY or TYPE_BYTE_INDEXED.

    BufferedImage(int width, int height, int imageType, IndexColorModel cm)
    
    Sr.NoMethod & Description
    1copyData(WritableRaster outRaster)It computes an arbitrary rectangular region of the BufferedImage and copies it into a specified WritableRaster.
    2getColorModel()It returns object of class ColorModel of an image.
    3getData()It returns the image as one large tile.
    4getData(Rectangle rect)It computes and returns an arbitrary region of the BufferedImage.
    5getGraphics()This method returns a Graphics2D, retains backwards compatibility.
    6getHeight()It returns the height of the BufferedImage.
    7getMinX()It returns the minimum x coordinate of this BufferedImage.
    8getMinY()It returns the minimum y coordinate of this BufferedImage.
    9getRGB(int x, int y)It returns an integer pixel in the default RGB color model (TYPE_INT_ARGB) and default sRGB colorspace.
    10getType()It returns the image type.

    Example

    The following example demonstrates the use of java BufferedImage class that draw some text on the screen using Graphics Object −

    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.image.BufferedImage;
    
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    public class Test extends JPanel {
    
       public void paint(Graphics g) {
    
      Image img = createImageWithText();
      g.drawImage(img, 20,20,this);
    } private Image createImageWithText() {
      BufferedImage bufferedImage = new BufferedImage(200,200,BufferedImage.TYPE_INT_RGB);
      Graphics g = bufferedImage.getGraphics();
      g.drawString("www.tutorialspoint.com", 20,20);
      g.drawString("www.tutorialspoint.com", 20,40);
      g.drawString("www.tutorialspoint.com", 20,60);
      g.drawString("www.tutorialspoint.com", 20,80);
      g.drawString("www.tutorialspoint.com", 20,100);
      
      return bufferedImage;
    } public static void main(String[] args) {
      JFrame frame = new JFrame();
      frame.getContentPane().add(new Test());
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setSize(200, 200);
      frame.setVisible(true);
    } }

    Learn Java in-depth with real-world projects through our Java certification course. Enroll and become a certified expert to boost your career.

    Output

    When you execute the given code, the following output is seen −

    Java Buffered Image Tutorial
  • Introduction

    Digital Image Processing (DIP) deals with manipulation of digital images using a digital computer. It is a sub field of signals and systems but focuses particularly on images. DIP focuses on developing a computer system that is able to perform processing on an image. The input of such system is a digital image. The system processes the image using efficient algorithms, and gives an image as an output.

    Introduction Image

    Java is a high level programming language that is widely used in the modern world. It can support and handle digital image processing efficiently using various functions.

  • Difference between method overloading and method overriding in java

    There are many differences between method overloading and method overriding in java. A list of differences between method overloading and method overriding are given below:

    No.Method OverloadingMethod Overriding
    1)Method overloading is used to increase the readability of the program.Method overriding is used to provide the specific implementation of the method that is already provided by its super class.
    2)Method overloading is performed within class.Method overriding occurs in two classes that have IS-A (inheritance) relationship.
    3)In case of method overloading, parameter must be different.In case of method overriding, parameter must be same.
    4)Method overloading is the example of compile time polymorphism.Method overriding is the example of run time polymorphism.
    5)In java, method overloading can’t be performed by changing return type of the method only. Return type can be same or different in method overloading. But you must have to change the parameter.Return type must be same or covariant in method overriding.

    Java Method Overloading example

    class OverloadingExample{  
    
    static int add(int a,int b){return a+b;}  
    
    static int add(int a,int b,int c){return a+b+c;}  
    
    }

    Java Method Overriding example

    class Animal{  
    
    void eat(){System.out.println("eating...");}  
    
    }  
    
    class Dog extends Animal{  
    
    void eat(){System.out.println("eating bread...");}  
    
    } 
    1. Difference between object and class

      There are many differences between object and class. A list of differences between object and class are given below:

      No.ObjectClass
      1)Object is an instance of a class.Class is a blueprint or template from which objects are created.
      2)Object is a real world entity such as pen, laptop, mobile, bed, keyboard, mouse, chair etc.Class is a group of similar objects.
      3)Object is a physical entity.Class is a logical entity.
      4)Object is created through new keyword mainly e.g.
      Student s1=new Student();
      Class is declared using class keyword e.g.
      class Student{}
      5)Object is created many times as per requirement.Class is declared once.
      6)Object allocates memory when it is created.Class doesn’t allocated memory when it is created.
      7)There are many ways to create object in java such as new keyword, newInstance() method, clone() method, factory method and deserialization.There is only one way to define class in java using class keyword.

      Let’s see some real life example of class and object in java to understand the difference well:

      Class: Human Object: Man, Woman

      Class: Fruit Object: Apple, Banana, Mango, Guava wtc.

      Class: Mobile phone Object: iPhone, Samsung, Moto

      Class: Food Object: Pizza, Burger, Samosa

    2. Java Command Line Arguments

      The java command-line argument is an argument i.e. passed at the time of running the java program.

      The arguments passed from the console can be received in the java program and it can be used as an input.

      So, it provides a convenient way to check the behavior of the program for the different values. You can pass N (1,2,3 and so on) numbers of arguments from the command prompt.

      Simple example of command-line argument in java

      In this example, we are receiving only one argument and printing it. To run this java program, you must pass at least one argument from the command prompt.
      class CommandLineExample{  

      public static void main(String args[]){  

      System.out.println("Your first argument is: "+args[0]);  

      }  

      }  

      compile by > javac CommandLineExample.java  
      
      run by > java CommandLineExample sonoo  
        Output: Your first argument is: sonoo
        

        Example of command-line argument that prints all the values

        In this example, we are printing all the arguments passed from the command-line. For this purpose, we have traversed the array using for loop.
        class A{  
        
        public static void main(String args[]){  
        
          
        
        for(int i=0;i<args.length;i++)  
        
        System.out.println(args[i]);  
        
          
        
        }  
        
        } 
          compile by > javac A.java  
          
          run by > java A sonoo jaiswal 1 3 abc  
            Output: sonoo
            
               jaiswal
               1
               3
               abc
          1. Creating API Document | javadoc tool

            We can create document api in java by the help of javadoc tool. In the java file, we must use the documentation comment /**… */ to post information for the class, method, constructor, fields etc.

            Let’s see the simple class that contains documentation comment.

            package com.abc;  
            
            /** This class is a user-defined class that contains one methods cube.*/  
            
            public class M{  
            
              
            
            /** The cube method prints cube of the given number */  
            
            public static void  cube(int n){System.out.println(n*n*n);}  
            
            }  

              To create the document API, you need to use the javadoc tool followed by java file name. There is no need to compile the javafile.

              On the command prompt, you need to write:

              javadoc M.java

              to generate the document api. Now, there will be created a lot of html files. Open the index.html file to get the information about the classes.

            1. Java Strictfp Keyword

              Java strictfp keyword ensures that you will get the same result on every platform if you perform operations in the floating-point variable. The precision may differ from platform to platform that is why java programming language have provided the strictfp keyword, so that you get same result on every platform. So, now you have better control over the floating-point arithmetic.

              Legal code for strictfp keyword

              The strictfp keyword can be applied on methods, classes and interfaces.

              strictfp class A{}//strictfp applied on class  
              strictfp interface M{}//strictfp applied on interface  
              class A{  
              
              strictfp void m(){}//strictfp applied on method  
              
              }

              Illegal code for strictfp keyword

              The strictfp keyword cannot be applied on abstract methods, variables or constructors.

              class B{  

              strictfp abstract void m();//Illegal combination of modifiers  



                class B{  
                
                strictfp int data=10;//modifier strictfp not allowed here  
                
                }  
                  class B{  
                  
                  strictfp B(){}//modifier strictfp not allowed here  
                  
                  }
                1. Call by Value and Call by Reference in Java

                  There is only call by value in java, not call by reference. If we call a method passing a value, it is known as call by value. The changes being done in the called method, is not affected in the calling method.

                  Example of call by value in java

                  In case of call by value original value is not changed. Let’s take a simple example:
                  class Operation{  
                  
                   int data=50;  
                  
                    
                  
                   void change(int data){  
                  
                   data=data+100;//changes will be in the local variable only  
                  
                   }  
                  
                       
                  
                   public static void main(String args[]){  
                  
                     Operation op=new Operation();  
                  
                    
                  
                     System.out.println("before change "+op.data);  
                  
                     op.change(500);  
                  
                     System.out.println("after change "+op.data);  
                  
                    
                  
                   }  
                  
                  }
                  Output:before change 50
                  
                     after change 50				

                  Another Example of call by value in java

                  In case of call by reference original value is changed if we made changes in the called method. If we pass object in place of any primitive value, original value will be changed. In this example we are passing object as a value. Let’s take a simple example:

                  class Operation2{  
                  
                   int data=50;  
                  
                    
                  
                   void change(Operation2 op){  
                  
                   op.data=op.data+100;//changes will be in the instance variable  
                  
                   }  
                  
                       
                  
                      
                  
                   public static void main(String args[]){  
                  
                     Operation2 op=new Operation2();  
                  
                    
                  
                     System.out.println("before change "+op.data);  
                  
                     op.change(op);//passing object  
                  
                     System.out.println("after change "+op.data);  
                  
                    
                  
                   }  
                  
                  }
                  Output:before change 50
                  
                     after change 150		</code></pre>
                2. Recursion in Java

                  Recursion in java is a process in which a method calls itself continuously. A method in java that calls itself is called recursive method.

                  It makes the code compact but complex to understand.

                  Syntax:

                  returntype methodname(){  
                  
                  //code to be executed  
                  
                  methodname();//calling same method  
                  
                  }

                  Java Recursion Example 1: Infinite times

                  public class RecursionExample1 {  
                  
                  static void p(){  
                  
                  System.out.println("hello");  
                  
                  p();  
                  
                  }  
                  
                    
                  
                  public static void main(String[] args) {  
                  
                  p();  
                  
                  }  
                  
                  }

                  Output:

                  hello
                  hello
                  ...
                  java.lang.StackOverflowError
                  

                  Java Recursion Example 2: Finite times

                  public class RecursionExample2 {  
                  
                  static int count=0;  
                  
                  static void p(){  
                  
                  count++;  
                  
                  if(count<=5){  
                  
                  System.out.println("hello "+count);  
                  
                  p();  
                  
                  }  
                  
                  }  
                  
                  public static void main(String[] args) {  
                  
                  p();  
                  
                  }  
                  
                  }  

                    Output:

                    hello 1
                    hello 2
                    hello 3
                    hello 4
                    hello 5
                    

                    Java Recursion Example 3: Factorial Number

                    public class RecursionExample3 {  
                    
                        static int factorial(int n){      
                    
                              if (n == 1)      
                    
                                return 1;      
                    
                              else      
                    
                                return(n * factorial(n-1));      
                    
                        }      
                    
                      
                    
                    public static void main(String[] args) {  
                    
                    System.out.println("Factorial of 5 is: "+factorial(5));  
                    
                    }  
                    
                    } 

                      Output:

                      Factorial of 5 is: 120
                      

                      Working of above program:

                      factorial(5) 
                         factorial(4) 
                      
                        factorial(3) 
                           factorial(2) 
                              factorial(1) 
                                 return 1 
                              return 2*1 = 2 
                           return 3*2 = 6 
                        return 4*6 = 24 
                      return 5*24 = 120

                      Java Recursion Example 4: Fibonacci Series

                      public class RecursionExample4 {  
                      
                          static int n1=0,n2=1,n3=0;      
                      
                           static void printFibo(int count){      
                      
                              if(count>0){      
                      
                                   n3 = n1 + n2;      
                      
                                   n1 = n2;      
                      
                                   n2 = n3;      
                      
                                   System.out.print(" "+n3);     
                      
                                   printFibo(count-1);      
                      
                               }      
                      
                           }        
                      
                        
                      
                      public static void main(String[] args) {  
                      
                          int count=15;      
                      
                            System.out.print(n1+" "+n2);//printing 0 and 1      
                      
                            printFibo(count-2);//n-2 because 2 numbers are already printed     
                      
                      }  
                      
                      } 

                        Output:

                        0 1 1 2 3 5 8 13 21 34 55 89 144 233 377