Sample code to convert image formats like bmp,gif,tiff,png,fpx etc to JPEG format. The images stored in jpeg format will be of less size compared to other formats
import java.io.*;
import java.util.*;
import java.awt.image.renderable.*;
import javax.media.jai.*;
import com.sun.media.jai.codec.*;
import java.awt.image.RenderedImage;
public class ImageConverter{
private RenderedOp image = null;
private RenderedOp result = null;
String validFormats[] = {"BMP","GIF","FPX","JPG","PNG","PNM","TIFF","TIF","JPEG"};
static String destFolder = null;
static String thumbNailFolder = null;
public static void main(String args[])throws Exception{
Properties prop = new Properties();
File file = new File("JAI.properties");
FileInputStream fis = new FileInputStream(file);
InputStream ins = fis;
prop.load(ins);
String srcFolder = prop.getProperty("SRC_FOLDER_PATH");
destFolder = prop.getProperty("DEST_FOLDER_PATH");
thumbNailFolder = prop.getProperty("THUMBNAIL_FOLDER_PATH");
if(srcFolder .charAt(srcFolder .length()-1) != '/')
{
srcFolder = srcFolder + "/";
}
ImageConverter jaiUtils = new ImageConverter();
jaiUtils.imageProcess(srcFolder);
}
private void imageProcess(String src)
{
File file = new File(src);
File photos[] = file.listFiles();
//File listFiles[] = getValidImages(src,validFormats);
if(photos!= null && photos.length>0)
{
for(int i=0;i<photos.length; i++)
{
File imgFile = photos[i];
String fileName = imgFile.getName();
convertToJPEG(src,fileName);
}
}
}
private void convertToJPEG(String imgFolder,String fileName){
RenderedOp op = null;
byte byteArr[] = null;
try{
InputStream ins = new FileInputStream(imgFolder+fileName);
SeekableStream s = SeekableStream.wrapInputStream(ins, true);
RenderedImage objImage = JAI.create( "stream", s);
String jpegFileName = fileName.substring(0,fileName.indexOf('.'))+".jpg";
FileOutputStream os = new FileOutputStream(destFolder+jpegFileName);
JPEGEncodeParam encodeParam = new JPEGEncodeParam();
//FileOutputStream os = new FileOutputStream("D:/thumbnails/copy1.jpg");
ImageEncoder encoderImage = ImageCodec.createImageEncoder("JPEG", os, encodeParam);
encoderImage.encode(objImage);
}
catch(FileNotFoundException fe)
{
System.out.println(fe.getMessage());
}
catch(Exception ioe)
{
System.out.println("Exception ..."+ioe.getMessage());
// System.out.println("The file which cannot be processed....."+fileName);
// String imgNames[] = {fileName};
// writeNamesToFile(imgNames);
}
//return byteArr;
}
private static ParameterBlock getParamBlock(RenderedImage objImage, float imgFactor){
Interpolation interp = Interpolation.getInstance( Interpolation.INTERP_BICUBIC );
ParameterBlock pb = new ParameterBlock();
pb.addSource(objImage); // The source image
pb.add(imgFactor); // The xScale
pb.add(imgFactor); // The yScale
pb.add(0.0F); // The x translation
pb.add(0.0F); // The y translation
pb.add(interp); // The interpolation
return pb;
}
/*
* Method for fetching the image files with valid name and extension only.
* Method: getValidImage
* @param validFormats
* @param strPersonId
* @return File[] of valid files
*/
private static File[] getValidImages(String srcFolder,String[] validFormats){
File file = new File(srcFolder);
FilenameFilter onlyValidImg = new ImageFilter(validFormats);
return file.listFiles(onlyValidImg);
}
}
//..................................Class ImageFilter................................................................
/* Class to filter the files which are of valid formats and corresponding to the personID
* This class implements FilenameFilter
*
*/
class ImageFilter implements FilenameFilter{
boolean validFileFlag;
String validFormats[];
ImageFilter(String validFormats[]){
this.validFormats = validFormats;
}
/*
* Method which returns true if the files fit into the criteria given, like valid extension and format
* Method: accept
* @param dir
* @param name
* @return boolean true or false
*/
public boolean accept(File dir, String name){
String extension = null;
if(name.indexOf(".") == -1)
return validFileFlag;
if(name.indexOf(".")!= -1)
extension = name.substring(name.indexOf(".")+1);
//System.out.println("ImageFilter class........"+personIdInName +" - "+extension);
if((null != extension && "" != extension) ) {
for(int i=0; i<validFormats.length; i++){
if(extension.equalsIgnoreCase(validFormats[i])){
validFileFlag = true;
break;
}
else{
validFileFlag = false;
}
}
}
return validFileFlag;
}
}