Jan 24

Handling images in java using imageIO

Have you ever faced the need of sending an image through a network using a Java program? If yes, you must have probably read the image to a byte array sent it through the network. The problem with this method is it is too long and you have to remake the image file ( using the received byte array) at the destination to take any use of it.

But in this article I’m going to show how to read an image to a Java class called “Image” and use it appropriately. You can use this “Image” class directly in GUI’s, send it through networks, store it, etc. Sol let’s look at the code now. The code consists of two parts. Reading the image to an instance of the “Image” class and writing it back to the hard drive. I have put comments in almost every step. So understanding the code should be easy.

import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.imageio.ImageReadParam;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;

public class Main {

 public void copyImage(){

 //path of the image to be read
 String path="picture.jpg";

 //create a file entry in java for that image
 File imageSrc=new File(path);

 if(!imageSrc.exists()){
 System.out.println("Input image does not exist.");
 System.exit(0);
 }

 try {

 /*
 * This part of the code is for reading the image in to
 * an instance of an Image class.
 */

 //Create a stream to read the image
 ImageInputStream iis = ImageIO.createImageInputStream(imageSrc);
 /*
 * ImageIO is a class containing static convenience methods for locating
 *ImageReaders and ImageWriters, and performing simple encoding and decoding.
 */

 //get a collection of Image readers which support jpg
 Iterator<?> imgReaders = ImageIO.getImageReadersByFormatName("jpg");

 //get the first image reader from the collection
 ImageReader reader = (ImageReader) imgReaders.next();

 //set the input for the image reader
 reader.setInput(iis, true);
 /*
 * Setting seekForwardOnly parameter ensures that the image file is
 * read in the ascending order.
 *
 */

 //to ensure that the default read parameters are used when
 //decoding data from the stream
 ImageReadParam param = reader.getDefaultReadParam();

 //read the image
 Image image = reader.read(0, param);

 /*
 *
 * This part of the code is for writing the image object
 * back to the hard disk as an image file.
 */

 //To render the image
 BufferedImage bufferedImage = new BufferedImage(image.getWidth(null),
image.getHeight(null), BufferedImage.TYPE_INT_RGB);

 //using "painter" we can draw in to "bufferedImage"
 Graphics2D painter = bufferedImage.createGraphics();

 //draw the "image" to the "bufferedImage"
 painter.drawImage(image, null, null);

 //the new image file
 File outputImg=new File("output.jpg");

 //write the image to the file
 ImageIO.write(bufferedImage, "jpg", outputImg);

 System.out.println("Image transfer was successful...!");

 } catch (IOException ex) {
 Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
 }
 }

 public static void main(String[] args) {
 // TODO code application logic here

 Main main=new Main();
 main.copyImage();
 }

}

You can download the text file from here.

As you must have understood, I have written the code to read a JPEG image. I tested the same code for BMP, PNG, and TIFF. All those formats worked just fine. The only draw back that I saw was there is a quality loss when using JPEG. To change the image format, change the following code segments (change xxx to the desired foramt).

//path of the image to be read

String path="picture.xxx";

————————————————————————————————————————————————————————–

//get a collection of Image readers which support jpg
 Iterator<?> imgReaders = ImageIO.getImageReadersByFormatName("xxx");

————————————————————————————————————————————————————————–

//the new image file
File outputImg=new File("output.xxx");

————————————————————————————————————————————————————————–

//write the image to the file
ImageIO.write(bufferedImage, "bmp", outputImg);

————————————————————————————————————————————————————————–

If you used a byte array to read the image file, you have to make an image file( on the hard drive) before you use that image again. But using the above method you can directly use it in the Java program. Click here to see an example on that.

As you can see, the possibilities are endless. So experiment and enjoy…..!

Share Button
Jan 18

Create custom error pages in cPanel

As we know, when we connect to a web server, if some error occurs, the server will show us some error message. As an example if the web page we are requesting is not available in the server it will generate a 404-page not found error. But as you have noticed, in most cases this error page is just a simple page which most probably has a white background with some simple text formatting. But do you know that you can customize those error pages as you like? Give it a theme( as an example, the theme of the webs site it self)? In this article I’m going to show you how to customize these error pages in a web server where you have access to cPanel. There are two methods to do this.

1st method:

Log in to cPanel. Then go to Advanced → Error pages . There you will find a list of various error pages that cPanel currently has. Click on any one of them and you will be directed to a page where you can customize the page using usual html syntaxes .

2nd method:

If you want to replace the error page with a page that you have already designed, the easiest way to do so is to upload it to the server and replace the relevant file. The relevant files for the error pages can be found in the public_html folder. These files have the .shtml extension. So make sure that you rename the .html file that you are uploading to the .shtml extension. Here are some names of the error pages.

  • 400.shtml : Bad request
  • 401.shtml : Authentication required
  • 403.shtml : Forbidden
  • 404.shtml : Page not found
  • 500.shtml : Internal server error

You will be able to find an example customized 404 page in http://ishans.info/wrongURL

Share Button
Jan 17

Weird WordPress problem: Wp-admin redirects to localhost

Have you experienced this weird problem? It most probably occurs when you develop your wordpress blog in your local server and upload the blog to your Internet web server. I too faced this problem when I uploaded my blog to my Internet server. Here’s how I got around it.

To rectify this problem in my way ( 😉 ) you need access to the database which is used by your blog. I used phpMyAdmin to access the database of the blog. You can use any other tool you like. You need to edit an entry in a table of the database to rectify the problem.

First access the database and go to the table named wp_options ( sometimes this could be named as options too). There , you will find an entry named siteurl . You will see that this entry has the value( option_value) http://localhost/yourWpFolder . You need to edit this entry to your blogs URL. As an example, in my case I edited it as http://blog.ishans.info . After setting the value, click on Go and you’ll get a message saying the change was successfully done. Now you’ll see that “http://mySite.xxx/wp-admin” address is working.

But it’s not over yet. You need to set another setting in wordpress settings too. Log in as the Administrator to the wordpress dash board and go to Settings . In here you’ll see that the entry WordPress address (URL) is set to “http://mySite.xxx” , but the entry Site address (URL) is still http://localhost/yourWpFolder . So you need to set the Site address (URL) entry to “http://mySite.xxx” .

Thats it…!. Now save your settings and you’ll see that the whole site is working perfectly ( If it doesn’t have any other errors of course 😉 )…..! 😀

Share Button