Browse our Products

Aspose.Imaging for Java 16.12 Release Notes

KeySummaryCategory
IMAGINGJAVA-596Convert EMF to WMF [Java]New Feature
IMAGINGJAVA-79Converting WMF to PNG format destroying vertical text on Y-axis [JAVA]Enhancement
IMAGINGJAVA-575Converting WMF to PNG format is not showing correct outputEnhancement
IMAGINGJAVA-477Size and processing speed is different Aspose.Imaging VS javax.imageioEnhancement
IMAGINGJAVA-128PSD file has 6 layers while Aspose.Imaging shows 0 layers [JAVA]Enhancement
IMAGINGJAVA-612Unify Metered API usage. [Java]Enhancement
IMAGINGJAVA-611Random ImageSaveException: Cannot decode strip 0. Details:, at TiffFrame.Save [Java]Enhancement
IMAGINGJAVA-610Exception in PNG encoder [Java]Enhancement
IMAGINGJAVA-609Can’t do subsequent resizing of rotated WEBP image [Java]Enhancement
IMAGINGJAVA-608Incorrect saving result while using Image.Save(string path, ImageOptionsBase options, Rectangle boundsRectangle). [Java]Enhancement
IMAGINGJAVA-607Aspose.Imaging is not showing correct resolution of PSD image [Java]Enhancement
IMAGINGJAVA-606Improve performance of jpeg file format [Java]Enhancement
IMAGINGJAVA-605Aspose.Imaging 4.0.0: Image.Load method is not thread-safe [Java]Enhancement
IMAGINGJAVA-604Exception when opening image in separate thread [Java]Enhancement
IMAGINGJAVA-603Iamprovements of performance and memory usage for Dicom [Java]Enhancement
IMAGINGJAVA-602Remove Imaging Drawing engine [Java]Enhancement
IMAGINGJAVA-601JPEG format performance improvements [Java]Enhancement
IMAGINGJAVA-600Could not read layers in PSD file. [Java]Enhancement

Usage examples:

IMAGINGJAVA-596 Convert EMF to WMF [Java]

 String path = "";

String[] files = new String[] { "TestEmfRotatedText.emf", "TestEmfPlusFigures.emf", "TestEmfBezier.emf" };

for (String file : files)

{

	String filePath = path + File.separator + file;

	MetaImage image = (MetaImage)Image.load(filePath, new MetafileLoadOptions(true));

	try

	{

		image.save(filePath + "_out.wmf", new WmfOptions());

	}

	finally

	{

		image.dispose();

	}

}

IMAGINGJAVA-612 Unify Metered API usage. [Java]

 Metered metered = new Metered();

metered.setMeteredKey(<valid pablic key>, <valid private key>");

if (!new com.aspose.imaging.License().isLicensed())

{

	throw new Exception("Not licensed");

}

System.out.println("Consumption quantity" + Metered.getConsumptionQuantity());

Image img = Image.load("C:\\in.psd");

img.save("C:\\Temp\\out.psd");

java.lang.Thread.sleep(10000);

System.out.println("Consumption quantity" + Metered.getConsumptionQuantity());

IMAGINGJAVA-610 Exception in PNG encoder [Java]

 String inputFile = "pngerror.bin";

String outputFile = "1995.png";

int width = 1024;

int height = 768;

int[] pixels = new int[width * height];

final InputStream fileStream = new FileInputStream(inputFile);

try /*JAVA: was using*/

{

	byte[] buf = new byte[4];

	try /*JAVA: was using*/

	{

		for (int i = 0; i < pixels.length; i++)

		{

			fileStream.read(buf);

			pixels[i] = ((buf[3] & 0xff) << 24) | ((buf[2] & 0xff) << 16) | ((buf[1] & 0xff) << 8)

				| (buf[0] & 0xff);

		}

	}

	catch (IOException e)

	{

		e.printStackTrace();

	}

	finally

	{

	}

}

finally

{

	if (fileStream != null)

	{

		fileStream.close();

	}

}

final InputStream stream = new ByteArrayInputStream(new byte[0]);

try /*JAVA: was using*/

{

	BmpOptions bmpOptions = new BmpOptions();

	bmpOptions.setBitsPerPixel(32);

	bmpOptions.setSource(new StreamSource(stream));

	final RasterImage image = (RasterImage) Image.create(bmpOptions, 1024, 768);

	try /*JAVA: was using*/

	{

		image.saveArgb32Pixels(image.getBounds().Clone(), pixels);

		PngOptions pngOptions = new PngOptions();

		pngOptions.setColorType(PngColorType.TruecolorWithAlpha);

		image.save(outputFile, pngOptions);

	}

	finally

	{

		if (image != null)

		{

			image.dispose();

		}

	}

}

finally

{

	if (stream != null)

	{

		stream.close();

	}

}

IMAGINGJAVA-609 Can’t do subsequent resizing of rotated WEBP image [Java]

 String path = "Animation1.webp";

String outPutPath = "Animation1_modified.webp";

WebPImage image = (WebPImage) Image.load(path);

try

{

	image.rotate(45);

	image.resize(1000, 1000);

	image.save(outPutPath);

}

finally

{

	image.dispose();

}

IMAGINGJAVA-608 Incorrect saving result while using Image.Save(string path, ImageOptionsBase options, Rectangle boundsRectangle). [Java]

 String inputFile = "D:\\1.png";

String outputFile = "D:\\result.png";

RasterImage img = (RasterImage) Image.load(inputFile);

try

{

	com.aspose.imaging.Rectangle testRect = new com.aspose.imaging.Rectangle(112, 222, 500, 500);

	img.save(outputFile, new PngOptions(), testRect);

}

finally

{

	img.dispose();

}

IMAGINGJAVA-607 Aspose.Imaging is not showing correct resolution of PSD image [Java]

 String path = "imaging_psdTest.psd";

PsdImage image = (PsdImage) Image.load(path);

{

	System.out.println("Source Image Vertical Resolution: " + image.getVerticalResolution());

	System.out.println("Source Image Horizontal Resolution: " + image.getHorizontalResolution());

}

IMAGINGJAVA-606 Improve performance of jpeg file format [Java]

 String inputFile = "C:\\TEMP\\big.jpg";

String outputFile = "C:\\TEMP\\test.jpg";

long start = System.nanoTime();

RasterImage img = (RasterImage) Image.load(inputFile);

try

{

	img.save(outputFile);

}

finally

{

	img.dispose();

}

long stop = System.nanoTime();

double sec = (stop - start) / 1000000000.0;

System.out.println(String.format("Execution time %.3f sec", sec));

IMAGINGJAVA-605 Aspose.Imaging 4.0.0: Image.Load method is not thread-safe [Java]

 /**

 * <p>

 *     Joins all threads.

 * </p>

 * @param threads The threads.

 * @throws InterruptedException

 */

private static void joinAllThreads(java.util.List<java.lang.Thread> threads) throws InterruptedException

{

	for (java.lang.Thread thread : threads)

	{

		thread.join();

	}

}

/**

 * <p>

 *     Tests loading images in multithread environment.

 * </p>

 * @throws InterruptedException

 */

public void MultithreadTest() throws InterruptedException

{

	java.util.List<String> imagesFolders = new ArrayList<String>();

	Collections.addAll(imagesFolders, new String[]

			{

					"testdata\\Images\\Tiff",

					"testdata\\Images\\Jpeg",

					"testdata\\Images\\Jpeg2000",

					"testdata\\Images\\Bmp",

					"testdata\\Images\\Dicom",

					"testdata\\Images\\Gif",

					"testdata\\Images\\Psd",

					"testdata\\Images\\WebP",

					"testdata\\Images\\Djvu",

					"testdata\\Images\\Emf"

			});

	for (int i = 0; i < imagesFolders.size(); i++)

	{

		Console.writeLine("Testing {0} folder", i);

		java.util.List<java.lang.Thread> threads = new ArrayList<java.lang.Thread>();

		File folder = new File("C:\\Temp\\test\\" + imagesFolders.get(i));

		final File[] filePaths = folder.listFiles();

		int k = 0;

		for (int j = 0; j < filePaths.length; j++)

		{

			final File forThr = filePaths[j];

			if (!forThr.isFile())

				continue;

			java.lang.Thread thread = new java.lang.Thread(new Runnable()

			{

				@Override

				public void run()

				{

					loadImage(forThr.getAbsolutePath());

				}

			});

			threads.add(thread);

			thread.start();

			k++;

			if (k % 5 == 0)

			{

				joinAllThreads(threads);

				threads.clear();

				Console.writeLine("Processed k = {0}", k);

			}

		}

		joinAllThreads(threads);

		threads.clear();

		Console.writeLine("Processed k = {0}", k);

	}

}

/**

 * <p>

 *     Loads the image.

 * </p>

 * @param filePath

 */

private static void loadImage(Object filePath)

{

	try

	{

		String path = (String) filePath;

		LoadOptions options = null;

		String ext = path.substring(path.length() - 4);

		if (ext.equalsIgnoreCase(".wmf") || ext.equalsIgnoreCase(".emf"))

			options = new MetafileLoadOptions(true);

		Image image = Image.load(path, options);

		try

		{

		   image.dispose();

		}

		finally

		{

			image.dispose();

		}

	}

	catch (Exception exception)

	{

		String message = exception.getCause() != null ? String.format("Ex: %s, InnerEx: %s", exception.getMessage(), exception.getCause().getMessage()) : exception.getMessage();

		message = String.format("%s : %s", filePath, message);

		msAssert.fail(message);

	}

}

IMAGINGJAVA-604 Exception when opening image in separate thread [Java]

 final String path = "C:\testdata\Issues\IMAGINGNET2108\sample.jpg";

java.util.List<Thread> threads = new ArrayList<Thread>();

int toProcess = 100;

for (int i = 0; i < toProcess; i++)

{

	Thread it = new Thread(new Runnable()

	{

		@Override

		public void run()

		{

			Image img = Image.load(path);

			img.dispose();

		}

	});

	threads.add(it);

	it.start();

}

for (int i = 0; i < threads.size(); i++)

{

	threads.get(i).join();

}

threads.clear();

IMAGINGJAVA-603 Iamprovements of performance and memory usage for Dicom [Java]

 DicomImage image = new DicomImage("RleMultiPage.dicom");

try

{

	if (image.getBitsPerPixel() != 8)

	{

		throw new RuntimeException("The BitsPerPixel is wrong!");

	}

	int[] colors = image.loadArgb32Pixels(image.getBounds());

	int[] ethalonColors = image.getActivePage().loadArgb32Pixels(image.getBounds());

	if (colors.length != ethalonColors.length)

	{

		throw new RuntimeException("The colors.Length != ethalonColors.Length");

	}

	for (int i = 0; i < colors.length; i++)

	{

		if (colors[i] != ethalonColors[i])

		{

			throw new RuntimeException(String.format("colors[%d] != ethalonColors[%d]",i,i));

		}

	}

}

finally

{

	image.dispose();

}

System.out.println("The test was successful!");

IMAGINGJAVA-602 Remove Imaging Drawing engine [Java]

Remove obsolete own drawing engine. Methods removed:

 boolean com.aspose.imaging.Graphics.getUseOwnDrawingEngine();

void    com.aspose.imaging.Graphics.setUseOwnDrawingEngine(boolean useOwnEngine);

IMAGINGJAVA-601 JPEG format performance improvements [Java]

 String inputDir = "C:\\TEMP\\jpegs\\";

String[] files = new String[] { "cmyk.jpg", "rgb.jpg", "ycbcr.jpg", "ycck.jpg", "grayscale.jpg", "img.jpg","big.jpg"};

for (String file : files)

{

	long start = System.nanoTime();

	RasterImage img = (RasterImage) Image.load(inputDir + file);

	try

	{

		img.cacheData();

	}

	finally

	{

		img.dispose();

	}

	long stop = System.nanoTime();

	double sec = (stop - start) / 1000000000.0;

	System.out.println(String.format("Filename : %s, Execution time %.3f sec", file, sec));

}

String inputDir = "C:\\TEMP\\jpegs\\";

String outputFile = "C:\\TEMP\\jpegs\\out.jpg";

String[] files = new String[] { "cmyk.jpg", "rgb.jpg", "ycbcr.jpg", "ycck.jpg", "grayscale.jpg", "img.jpg","big.jpg"};

for (String file : files)

{

	long start = System.nanoTime();

	RasterImage img = (RasterImage) Image.load(inputDir + file);

	try

	{

		img.save(outputFile);

	}

	finally

	{

		img.dispose();

	}

	long stop = System.nanoTime();

	double sec = (stop - start) / 1000000000.0;

	System.out.println(String.format("Filename : %s, Execution time %.3f sec", file, sec));

}

IMAGINGJAVA-600 Could not read layers in PSD file. [Java]

 String inputFolderPath = "C:\\AsposePsdLayers";

File dinfo = new File(inputFolderPath);

File[] files = dinfo.listFiles(new FilenameFilter()

{

	@Override

	public boolean accept(File dir, String name)

	{

		return name.endsWith(".psd");

	}

});

for (File fileInfo : files)

{

	String path = fileInfo.getAbsolutePath();

	PsdImage image = (PsdImage)Image.load(path);

	try

	{

		System.out.println("File: " + path);

		System.out.println(image.getLayers().length);

	}

	finally

	{

		image.dispose();

	}

}

IMAGINGJAVA-575 Converting WMF to PNG format is not showing correct output

 String inputFileName = "o_1avu1va031fkjunois817pd1smp9.wmf";

String outFileName = "o_1avu1va031fkjunois817pd1smp9_wmf.png";

try

{

    com.aspose.imaging.Image image = com.aspose.imaging.Image.load(inputFileName, new com.aspose.imaging.imageloadoptions.MetafileLoadOptions(true));

    com.aspose.imaging.imageoptions.EmfRasterizationOptions emf = new com.aspose.imaging.imageoptions.EmfRasterizationOptions();

    emf.setPageHeight(image.getHeight());

    emf.setPageWidth(image.getWidth());

    emf.setBackgroundColor(com.aspose.imaging.Color.getWhite());

    com.aspose.imaging.imageoptions.PngOptions options = new com.aspose.imaging.imageoptions.PngOptions();

    options.setVectorRasterizationOptions(emf);

    image.save(outFileName, options);

}

catch(Exception ex)

{

    System.out.println(ex.toString());

}

IMAGINGJAVA-477 Size and processing speed is different Aspose.Imaging VS javax.imageio

 System.out.println("Testing Start");

java.io.File objf = new java.io.File("C:\\Temp\\_bmp_8.bmp");

FileInputStream objFIN = new FileInputStream(objf);

byte[] img = new byte[(int)objf.length()];

objFIN.read(img);

objFIN.close();

long start = System.nanoTime();

com.aspose.imaging.Image objAsposeImage = Image.load(new java.io.ByteArrayInputStream(img));

objAsposeImage.save(new java.io.FileOutputStream("C:\\Temp\\Aspose_8.bmp"), new com.aspose.imaging.imageoptions.BmpOptions());

long end = System.nanoTime();

long timetaken = end - start;

System.out.println(timetaken);

java.awt.image.BufferedImage objJavaImage = javax.imageio.ImageIO.read(new java.io.ByteArrayInputStream(img));

java.io.FileOutputStream out = new java.io.FileOutputStream("C:\\Temp\\ImageIO_8.bmp");

javax.imageio.ImageIO.write(objJavaImage, "bmp", out);

out.close();

IMAGINGJAVA-128 PSD file has 6 layers while Aspose.Imaging shows 0 layers [JAVA]

 String sourceFileName = "Layered PSD file bug.psd";

com.aspose.imaging.Image image = com.aspose.imaging.Image.load(sourceFileName);

try

{

	com.aspose.imaging.fileformats.psd.PsdImage psdImage = (com.aspose.imaging.fileformats.psd.PsdImage) image;

	com.aspose.imaging.fileformats.psd.layers.Layer[] allLayers = psdImage.getLayers();

	System.out.println("Layers count: " + allLayers.length); // must be 3

	// Save layer number 2 to bmp

	allLayers[1].save("out.bmp", new BmpOptions(), allLayers[1].getBounds());

}

finally

{

	image.dispose();

}

IMAGINGJAVA-79 Converting WMF to PNG format destroying vertical text on Y-axis [JAVA]

 String inputFile = "image1.wmf";

String outputFile = "result.png";

final Image image = Image.load(inputFile, new MetafileLoadOptions(true));

try

{

	final VectorRasterizationOptions vectorRasterizationOptions = new WmfRasterizationOptions()

	{{

		setRenderMode(WmfRenderMode.EmbeddedEmfOnly);

		setPageWidth(image.getWidth());

		setPageHeight(image.getHeight());

	}};

	image.save(outputFile, new PngOptions()

	{{

		setVectorRasterizationOptions(vectorRasterizationOptions);

	}});

}

finally

{

	image.dispose();

}

IMAGINGJAVA-611 Random ImageSaveException: Cannot decode strip 0. Details:, at TiffFrame.Save [Java]

 String path = "MultiPageTest.tif";

TiffImage image = (TiffImage)Image.load(path);

java.util.List<Thread> threads = new ArrayList<Thread>();

try

{

	final TiffOptions createOptions = new TiffOptions(TiffExpectedFormat.Default)

	{{

		setCompression(TiffCompressions.CcittFax4);

		setBitsPerSample(new int[] { 1 });

		setPhotometric(TiffPhotometrics.MinIsWhite);

	}};

	final TiffFrame[] frames = image.getFrames();

	for (int i = 0; i < frames.length; i++)

	{

		final TiffFrame frame = frames[i];

		final int ix = i;

		Thread it = new Thread(new Runnable()

		{

			@Override

			public void run()

			{

				frame.save("c:/temp/java-page-" + ix + ".tiff", createOptions);

			}

		});

		threads.add(it);

		it.start();

	}

	for (int i = 0; i < threads.size(); i++)

	{

		threads.get(i).join();

	}

	threads.clear();

}

finally

{

	image.dispose();

}