Hi Team,
We are trying to split tiff file into mutiple chunks using Aspose.Imaging.
But we are facing below error. Could you please asssist us on this.
“StackTrace”:"class com.aspose.imaging.coreexceptions.ImageSaveException: Image export failed. —> java.lang.NullPointerException: Cannot invoke "com.aspose.imaging.internal.mh.g.j()" because "" is null\n — End of inner exception stack trace —\ncom.aspose.imaging.Image.a(Unknown Source)\ncom.aspose.imaging.RasterImage.a(Unknown Source)\ncom.aspose.imaging.Image.save(Unknown Source)\ncom.aspose.imaging.Image.save(Unknown Source)
R1_4765.zip (2.3 MB)
Thanks for responding. Please find below lines of code.
TiffImage tiffImage = (TiffImage) Image.load(imagePath);
TiffImage output = null;
int counter = 1;
for(TiffFrame tiffFrame : tiffImage.getFrames()) {
tiffImage.setActiveFrame(tiffFrame);
if(output == null){
output = new TiffImage(TiffFrame.copyFrame(tiffImage.getActiveFrame()));
} else {
output.addFrame(TiffFrame.copyFrame(tiffImage.getActiveFrame()));
}
if(counter % ocrBatchSize == 0){
output.save(fileName.toString(), options);
fileName = Paths.get(getUUIDFileName(outputDirectory.toString(), ".tif"));
filePaths.add(fileName.toString());
output.close();
output = null;
}
counter++;
}
Hi, @ashokreddyd
Firstly,
In your code I can see 1 potential error that can lead to this error.
```
if(counter % ocrBatchSize == 0){
// Here fileName is null and the following line throws exception NullPointer
output.save(fileName.toString(), options);
// fileName must be defined before save
fileName = Paths.get(getUUIDFileName(outputDirectory.toString(), ".tif"));
filePaths.add(fileName.toString());
output.close();
output = null;
}
```
Please, try the following code
TiffImage tiffImage = (TiffImage) Image.load(imagePath);
TiffImage output = null;
int counter = 1;
for(TiffFrame tiffFrame : tiffImage.getFrames()) {
tiffImage.setActiveFrame(tiffFrame);
if(output == null){
output = new TiffImage(TiffFrame.copyFrame(tiffImage.getActiveFrame()));
} else {
output.addFrame(TiffFrame.copyFrame(tiffImage.getActiveFrame()));
}
if(counter % ocrBatchSize == 0){
fileName = Paths.get(getUUIDFileName(outputDirectory.toString(), ".tif"));
output.save(fileName.toString(), options);
filePaths.add(fileName.toString());
output.close();
output = null;
}
counter++;
}
Secondly, If you need only to save each frame in the separated files, you can simplify your code.
Please, take a look at the following example:
try (TiffImage tiffImage = (TiffImage) Image.load(imagePath)) {
for(TiffFrame tiffFrame : tiffImage.getFrames()) {
fileName = Paths.get(getUUIDFileName(outputDirectory.toString(), ".tif"));
tiffImage.save(fileName.toString(), options);
filePaths.add(fileName.toString());
}
}
Thank you for the inputs Evgeniy .
We will look into it and come back to you if we have any further queries.