Thursday, 12 December 2013

Create image thumbnail in java using ImageJ API

For more information on how to implement Photos sharing website using Java, Spring, Tomcat, Imagej download Fotovault (opensource Photo sharing project) Fotovault - Photo Sharing Project
Below is the code example to create thumbnails in Java.

Download ImageJ jar from

http://rsbweb.nih.gov/ij/download.html

and include it in your classpath.

The below code example proportionately/evenly crops the image to make the image a perfect square and creates a thumbnail of 100 X 100 pixels.
cropAndResize method takes the fileAbsolutePath and Save as image suffix (thumbnail name suffix).


private String cropAndResize(String fileAbsolutePath, String fileSaveAsNameSuffix) {
try {
Opener opener = new Opener();
ImagePlus imp = opener.openImage(fileAbsolutePath);
ImageProcessor ip = imp.getProcessor();
StackProcessor sp = new StackProcessor(imp.getStack(), ip);
int width = imp.getWidth();
int height = imp.getHeight();
int cropWidth = 0;
int cropHeight = 0;
if(width > height) {
cropWidth = height;
cropHeight = height;
} else {
cropWidth = width;
cropHeight = width;
}
int x = -1;
int y = -1;
if(width == height) {
x = 0;
y = 0;
} else if(width > height) {
x = (width - height) / 2;
y=0;
} else if (width < height) {
x = 0;
y = (height - width) / 2;
}
logger.debug(imp.getWidth());
logger.debug(imp.getHeight());
logger.debug("cropWidth " + cropWidth);
logger.debug("cropHeight" + cropHeight);
ImageStack croppedStack = sp.crop(x, y, cropWidth, cropHeight);
imp.setStack(null, croppedStack);
logger.debug(imp.getWidth());
logger.debug(imp.getHeight());
sp = new StackProcessor(imp.getStack(), imp.getProcessor());
ImageStack resizedStack = sp.resize(100, 100, true);
imp.setStack(null, resizedStack);
StringBuffer filePath = new StringBuffer(fileAbsolutePath);
filePath.replace(filePath.lastIndexOf("."),
filePath.lastIndexOf("."), fileSaveAsNameSuffix);
String saveAsFilePath = filePath.toString();
IJ.save(imp, saveAsFilePath);
return saveAsFilePath;
} catch (Exception e) {
logger.error("Error while resizing Image.");
e.printStackTrace();
return null;
}
}

No comments: