Exception "class com.aspose.imaging.coreexceptions.ImageSaveException: Image export failed. " while spliting TIFF into multiple chunks using Aspose.Imaging for Java

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)

@ashokreddyd, thank you for your request. Could you please provide the code you use to do this?

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.

1 Like