Aspose.Imaging for Java 18.8 - Release Notes

Key Summary Category
IMAGINGJAVA-1057 How to change window size s in BinarizeBradley method Feature
IMAGINGJAVA-906 FIPs Compliant version of Bouncy Castle usage in APIs Feature
IMAGINGJAVA-1067 CropBmpMultithreading() produces blank BMP images Enhancement
IMAGINGJAVA-1066 Empty results when converting EPS to Raster on Compact and non license/venture mode Enhancement
IMAGINGJAVA-1065 ImageSave exception on saving JPEG to PNG or PDF Enhancement
IMAGINGJAVA-1064 Low quality JPEG generated Enhancement
IMAGINGJAVA-1063 PsdImageException thrown on updating PSD text Enhancement
IMAGINGJAVA-1062 Temp files are created when saving DJVU documents Enhancement
IMAGINGJAVA-1061 Add watermark for export to EMF/EMF+ without a license Enhancement
IMAGINGJAVA-1060 Updating text layer for PSD image throws error when opened in Photoshop Enhancement
IMAGINGJAVA-1059 Incorrect creation of graphic objects EmfRecorderGraphics2D Enhancement
IMAGINGJAVA-1058 Improve JPEG DCT decoder performance. Enhancement
IMAGINGJAVA-1027 EMF file not properly converted to SVG Enhancement
IMAGINGJAVA-1025 Color radiance issues in images Enhancement
IMAGINGJAVA-1014 Exception on converting EMF to PNG Enhancement

Public API changes:

Added APIs:

Please see corresponding cumulative API changes for Aspose.Imaging for .Net 18.8 version

Removed APIs:

Please see corresponding cumulative API changes for Aspose.Imaging for .Net 18.8 version

Usage examples:

IMAGINGJAVA-1057 How to change window size s in BinarizeBradley method

 String sourceFileName = "test.png";

String outputFileName = "result.png";

PngImage image = (PngImage)Image.load(sourceFileName);

try

{

	image.binarizeBradley(10, 20);

	image.save(outputFileName);

}

finally

{

	image.dispose();

}

IMAGINGJAVA-1065 ImageSave exception on saving JPEG to PNG or PDF

 String outputFile = "result.png";

Image m_oDocument = Image.load("sample4_l.jpg");

try

{

	//resize

	int width = m_oDocument.getWidth();

	int height = m_oDocument.getHeight();

	if (width > height)

	{

		if (width > 1024)

		{

			int iWidth = 1024;

			int iHeight = (int) ((1024.0f / (float) width) * (float) height);

			m_oDocument.resize(

					iWidth,

					iHeight,

					ResizeType.NearestNeighbourResample);

		}

	}

	else

	{

		if (height > 1024)

		{

			int iHeight = 1024;

			int iWidth = (int) ((1024.0f / (float) height) * (float) width);

			m_oDocument.resize(

					iWidth,

					iHeight,

					ResizeType.NearestNeighbourResample);

		}

	}

	PngOptions OptionsIM = new PngOptions();

	OptionsIM.setColorType(PngColorType.TruecolorWithAlpha);

	ResolutionSetting oResIM = new ResolutionSetting(120.0,120.0);

	OptionsIM.setResolutionSettings(oResIM);

	m_oDocument.save(outputFile, OptionsIM);

}

finally

{

	m_oDocument.dispose();

}

IMAGINGJAVA-1064 Low quality JPEG generated

 String dataDir = "C:\\IMAGINGJAVA-1064\\";

String sourceFile = dataDir + "aspose-logo.jpg";

String destFileName = dataDir + "aspose-logo_Output.jpg";

RasterImage newImage = (RasterImage)Image.load(sourceFile);

try

{

	JpegOptions jpgCreateOptions = new JpegOptions();

	jpgCreateOptions.setQuality(100);

	jpgCreateOptions.setCompressionType(JpegCompressionMode.Progressive);

	jpgCreateOptions.setSource(new FileCreateSource(destFileName, false));

	JpegImage jpgImage = (JpegImage)Image.create(jpgCreateOptions, newImage.getWidth()

			, newImage.getHeight());

	try

	{

		JpegExifData exifData = jpgImage.getExifData();

		if (exifData == null)

		{

			exifData = new JpegExifData();

			jpgImage.setExifData(exifData);

		}

		exifData.setResolutionUnit(ExifUnit.Inch);

		exifData.setXResolution(new TiffRational(newImage.getWidth()));

		exifData.setYResolution(new TiffRational(newImage.getHeight()));

		jpgImage.savePixels(jpgImage.getBounds(), newImage.loadPixels(newImage.getBounds()));

		jpgImage.save();

	}

	finally

	{

		jpgImage.dispose();

	}

}

finally

{

	newImage.dispose();

}

IMAGINGJAVA-1063 PsdImageException thrown on updating PSD text

 String filePath = "arabic.psd";

String newText = "test";

String outputFilePath = "result.psd";

Image image = Image.load(filePath);

try

{

	if (!(image instanceof PsdImage))

	{

		return;

	}

	PsdImage psdImage = (PsdImage)image;

	Layer[] layers = psdImage.getLayers();

	for (int index = layers.length - 1; index >= 0; index--)

	{

		Layer layer = layers[index];

		if (!(layer instanceof TextLayer))

		{

			continue;

		}

		TextLayer textLayer = (TextLayer)layer;

		textLayer.updateText(newText);

	}

	PsdOptions imageOptions = new PsdOptions(psdImage);

	psdImage.save(outputFilePath, imageOptions);

}

finally

{

	image.dispose();

}

IMAGINGJAVA-1062 Temp files are created when saving DJVU documents

To be sure that all temporary files, created during processing of DJVU save in the current or temporary folders are deleted, you need to run this code after setting the environment variables TEMP, TMP into your specific directory which you can check after code complete.

 DjvuImage image = (DjvuImage)Image.load("sample.djvu");

try

{

	image.save("output.bmp", new BmpOptions());

}

finally

{

	image.close();

}

IMAGINGJAVA-1061 Add watermark for export to EMF/EMF+ without a license

 public void testSaveEmf()

{

	License lic = new License();

	lic.setLicense("");

	String path = "TestEmfBezier.emf";

	Image image = Image.load(path);

	try

	{

		image.save(path + ".emf", new EmfOptions());

	}

	finally

	{

		image.close();

	}

}

public void testSaveEmfPlus()

{

	License lic = new License();

	lic.setLicense("");

	String path = "TestEmfPlusFigures.emf";

	Image image = Image.load(path);

	try

	{

		image.save(path + ".emf", new EmfOptions());

	}

	finally

	{

		image.dispose();

	}

}

public void testSaveEmfGraphics()

{

	License lic = new License();

	lic.setLicense("");

	EmfRecorderGraphics2D graphics = new EmfRecorderGraphics2D(

			new Rectangle(0, 0, 5000, 5000),

			new Size(5000, 5000),

			new Size(1000, 1000));

	Font font = new Font("Arial", 10, FontStyle.Bold | FontStyle.Underline);

	Color brown = Color.getBrown();

	graphics.drawString(font.getName() + " " + font.getSize() + " " + FontStyle.getName(FontStyle.class, font.getStyle()), font, brown, 10, 10);

	graphics.drawString("some text", font, brown, 10, 30);

	font = new Font("Arial", 24, FontStyle.Italic | FontStyle.Strikeout);

	graphics.drawString(font.getName() + " " + font.getSize() + " " + FontStyle.getName(FontStyle.class, font.getStyle()), font, brown, 20, 50);

	graphics.drawString("some text", font, brown, 20, 80);

	EmfImage image = graphics.endRecording();

	try

	{

		String path = "Fonts.emf";

		image.save(path, new EmfOptions());

	}

	finally

	{

		image.dispose();

	}

}

IMAGINGJAVA-1060 Updating text layer for PSD image throws error when opened in Photoshop

 String filePath = "test.psd";

String outputFilePath = "result.psd";

Image image = Image.load(filePath);

try

{

	if (!(image instanceof PsdImage))

	{

		return;

	}

	PsdImage psdImage = (PsdImage)image;

	Layer[] layers = psdImage.getLayers();

	for (int index = layers.length - 1; index >= 0; index--)

	{

		Layer layer = layers[index];

		if (!(layer instanceof TextLayer))

		{

			continue;

		}

		TextLayer textLayer = (TextLayer)layer;

		textLayer.updateText("\\()");

	}

	PsdOptions imageOptions = new PsdOptions(psdImage);

	psdImage.save(outputFilePath, imageOptions);

}

finally

{

	image.close();

}

IMAGINGJAVA-1059 Incorrect creation of graphic objects EmfRecorderGraphics2D

 EmfRecorderGraphics2D graphics = new EmfRecorderGraphics2D(

		new Rectangle(0, 0, 1000, 1000), new Size(1000, 1000),

		new Size(100, 100));

Pen pen = new Pen(Color.getRed());  // RED color

graphics.drawLine(pen, 1, 1, 50, 50);

EmfImage image = graphics.endRecording();

try

{

	// In final file you MUST see the RED line, not BLACK, please check it.

	image.save("test_pen.emf", new EmfOptions());

}

finally

{

	image.close();

}

IMAGINGJAVA-1058 Improve Jpeg DCT decoder performance.

 public void IMAGINGJAVA_1058()

{

	String dir = "C:\\Errors\\IMAGINGJAVA-1058\\";

	long startTime = System.nanoTime();

	resizeAspose(dir + "interleaved.jpg", dir + "interleaved.out.jpg", 300, 300);

	long msInterleaved = System.nanoTime() - startTime;

	startTime = System.nanoTime();

	resizeAspose(dir + "non-interleaved.jpg", dir + "non-interleaved.out.jpg", 300, 300);

	long msNonInterleaved = System.nanoTime() - startTime;

	System.out.format("**** Conversion %s takes %d ms.\n", "interleaved.jpg", msInterleaved / 1000000);

	System.out.format("**** Conversion %s takes %d ms.\n", "non-interleaved.jpg", msNonInterleaved / 1000000);

}

private static void resizeAspose(String inputPath, String outputPath, int desiredWidth, int desiredHeight)

{

	Image image = Image.load(inputPath);

	try

	{

		int originalWidth = image.getWidth();

		int originalHeight = image.getHeight();

		float percentWidth = (float)desiredWidth / (float)originalWidth;

		float percentHeight = (float)desiredHeight / (float)originalHeight;

		float percent = percentHeight < percentWidth ? percentHeight : percentWidth;

		int newWidth = Math.min((int)(originalWidth * percent), originalWidth);

		int newHeight = Math.min((int)(originalHeight * percent), originalHeight);

		image.resize(newWidth, newHeight, ResizeType.NearestNeighbourResample);

		image.save(outputPath);

	}

	finally

	{

		image.close();

	}

}

I’ve got the following result: v18.7 Conversion interleaved.jpg takes 2348 ms. Conversion non-interleaved.jpg takes 908 ms.

Optimized Conversion interleaved.jpg takes 1296 ms. Conversion non-interleaved.jpg takes 437 ms.

So the execution time was reduced almost twice after optimization.

IMAGINGJAVA-1027 EMF file not properly converted to SVG

 String baseFolder = "C:\\IMAGINGNET-3048\\";

String fileName = "image39.emf";

String inputFileName = baseFolder + fileName;

String outputFileName = baseFolder + fileName + ".svg";

Image image = Image.load(inputFileName);

try

{

	EmfRasterizationOptions emfRasterizationOptions = new EmfRasterizationOptions();

	emfRasterizationOptions.setPageSize(Size.to_SizeF(image.getSize()));

	SvgOptions options = new SvgOptions();

	options.setVectorRasterizationOptions(emfRasterizationOptions);

	image.save(outputFileName, options);

}

finally

{

	image.close();

}

IMAGINGJAVA-1025 Color radiance issues in images

 String baseFolder = "C:\\IMAGINGJAVA-1025\\";

String fileName = "image34.emf";

String inputFileName = baseFolder + fileName;

String outputFileName = baseFolder + fileName + ".svg";

Image image = Image.load(inputFileName);

try

{

	EmfRasterizationOptions emfRasterizationOptions = new EmfRasterizationOptions();

	emfRasterizationOptions.setPageSize(Size.to_SizeF(image.getSize()));

	SvgOptions svgOptions = new SvgOptions();

	svgOptions.setVectorRasterizationOptions(emfRasterizationOptions);

	image.save(outputFileName, svgOptions);

}

finally

{

	image.close();

}