Tiff files are genrally used for the compact size and good quality of images.
This is an example for jpeg , the same can be used for png and tiff as well.
Below code would accept a multipart file list and merge all files to create a single multipage -tiff file.
public File mergeTiffFiles(List<MultipartFile> fileList) {
File file = null;
File convertedFile = null;
try {
int counter = 0;
BufferedImage image[] = new BufferedImage[fileList.size()];
for (MultipartFile imageFile : fileList) {
convertedFile = convert(imageFile);
SeekableStream sstream = new FileSeekableStream(convertedFile);
ImageDecoder decoder = ImageCodec.createImageDecoder("jpeg",
sstream, null);
PlanarImage pi = new NullOpImage(
decoder.decodeAsRenderedImage(0), null, null,
OpImage.OP_IO_BOUND);
image[counter] = pi.getAsBufferedImage();
counter++;
sstream.close();
}
TIFFEncodeParam params = new TIFFEncodeParam();
params.setCompression(TIFFEncodeParam.COMPRESSION_JPEG_TTN2);
file = new File("sourcePath");
OutputStream out = new FileOutputStream(file);
ImageEncoder encoder = ImageCodec.createImageEncoder("tiff", out,
params);
List<BufferedImage> list = new ArrayList<BufferedImage>(
image.length);
for (int i = 1; i < image.length; i++) {
list.add(image[i]);
}
params.setExtraImages(list.iterator());
encoder.encode(image[0]);
out.close();
if (convertedFile.delete()) {
logger.debug(convertedFile.getName() + " is deleted!");
} else {
logger.debug("Delete operation is failed. "
+ convertedFile.getName());
}
} catch (IOException e) {
logger.error("Exception ");
} catch (Exception e) {
logger.error("Exception ");
}
return file;
}
Here also to convert a multipart file object to a File object
public File convert(MultipartFile file)
{
File convFile = new File("sourcePath");
try {
convFile.createNewFile();
FileOutputStream fos = new FileOutputStream(convFile);
fos.write(file.getBytes());
fos.close();
return convFile;
} catch (IOException e) {
e.printStackTrace();
}
return convFile;
}
This is an example for jpeg , the same can be used for png and tiff as well.
Below code would accept a multipart file list and merge all files to create a single multipage -tiff file.
public File mergeTiffFiles(List<MultipartFile> fileList) {
File file = null;
File convertedFile = null;
try {
int counter = 0;
BufferedImage image[] = new BufferedImage[fileList.size()];
for (MultipartFile imageFile : fileList) {
convertedFile = convert(imageFile);
SeekableStream sstream = new FileSeekableStream(convertedFile);
ImageDecoder decoder = ImageCodec.createImageDecoder("jpeg",
sstream, null);
PlanarImage pi = new NullOpImage(
decoder.decodeAsRenderedImage(0), null, null,
OpImage.OP_IO_BOUND);
image[counter] = pi.getAsBufferedImage();
counter++;
sstream.close();
}
TIFFEncodeParam params = new TIFFEncodeParam();
params.setCompression(TIFFEncodeParam.COMPRESSION_JPEG_TTN2);
file = new File("sourcePath");
OutputStream out = new FileOutputStream(file);
ImageEncoder encoder = ImageCodec.createImageEncoder("tiff", out,
params);
List<BufferedImage> list = new ArrayList<BufferedImage>(
image.length);
for (int i = 1; i < image.length; i++) {
list.add(image[i]);
}
params.setExtraImages(list.iterator());
encoder.encode(image[0]);
out.close();
if (convertedFile.delete()) {
logger.debug(convertedFile.getName() + " is deleted!");
} else {
logger.debug("Delete operation is failed. "
+ convertedFile.getName());
}
} catch (IOException e) {
logger.error("Exception ");
} catch (Exception e) {
logger.error("Exception ");
}
return file;
}
Here also to convert a multipart file object to a File object
public File convert(MultipartFile file)
{
File convFile = new File("sourcePath");
try {
convFile.createNewFile();
FileOutputStream fos = new FileOutputStream(convFile);
fos.write(file.getBytes());
fos.close();
return convFile;
} catch (IOException e) {
e.printStackTrace();
}
return convFile;
}