vendredi 18 février 2011

Image to byte array and byte array to image

Il existe déjà des milliers d'exemple sur internet sur comment convertire
une image vers un tableau des byte [] en java et vis versa, récement j'ai eu l'occasion de travailer sur un petit projet qui  m'oblige a convertire une image vers un tableau de bytes, stocker dans une base des données et de récuperer l'image par la suite. Ma recherche sur internet n'etait pas satisfaisante vu que j'arrive pa
a convertire les images de n'importe types gif, tiff, jpeg, jpg, png ...

This Java Class contains two methode for how to convert image png, tiff, jpeg, jpg, gif to an array of byte [] in Java.
The first one take the path of file " c:/file_path/image.png " and return array of bytes





public static byte [] ImageToByte(File file) throws FileNotFoundException{
        FileInputStream fis = new FileInputStream(file);
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        byte[] buf = new byte[1024];
        try {
            for (int readNum; (readNum = fis.read(buf)) != -1;) {
                bos.write(buf, 0, readNum);      
                System.out.println("read " + readNum + " bytes,");
            }
        } catch (IOException ex) {
        }
        byte[] bytes = bos.toByteArray();
     
     return bytes; 
    }

This Second one is to convert back from bytes array byte [] to jpeg image





public static void byteToImage(byte [] bytes,File imageFile) throws IOException{
     
        ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
        Iterator readers = ImageIO.getImageReadersByFormatName("jpeg");
 
        ImageReader reader = (ImageReader) readers.next();
        Object source = bis; // File or InputStream, it seems file is OK
 
        ImageInputStream iis = ImageIO.createImageInputStream(source);

        reader.setInput(iis, true);
        ImageReadParam param = reader.getDefaultReadParam();
 
        Image image = reader.read(0, param);
        //got an image file
 
        BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB);
      
        Graphics2D g2 = bufferedImage.createGraphics();
        g2.drawImage(image, null, null);
 
        ImageIO.write(bufferedImage, "jpeg", imageFile);
        //"jpeg" is the format of the image
        //imageFile is the file to be written to.
 
        System.out.println(imageFile.getPath());
     
 
    }

Our Java Utils Class is now :


import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Iterator;

import javax.imageio.ImageIO;
import javax.imageio.ImageReadParam;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;


public class Utils {

 public static byte [] ImageToByte(File file) throws FileNotFoundException{
      //code of ImageToByte
     return bytes; 
    }
    
    public static void byteToImage(byte [] bytes,File imageFile) throws IOException{
      // code of byteToImage
    }
}


Simple main java class for test :


public static void main(String[] args) {
     
    try {
       byte [] bytes = Utils.ImageToByte(new File("/home/path_source/image.png"));
      Utils.byteToImage(bytes,new File("/home/path_destination/destination_image.png"));
  }
     catch (Exception e) {
   e.printStackTrace();                                          
     }       
    }




In other post we will use this class to store byte into database ans show picture into html 

2 commentaires:

  1. يا ليث تكثر من هاي الاكواد من فضلك
    شكرا لك
    ... ههههههه ...

    RépondreSupprimer
  2. merci beaucoup pour ces bouts de codes

    RépondreSupprimer