Aspose.Imaging for Java 22.5 - Release notes

Competitive features:

  • Unify extraction of raster images, embedded in vector formats.
  • Improve DIB processing implementation
Key Summary Category
IMAGINGJAVA-8108 Unify extraction of raster images, embedded in vector formats. Feature
IMAGINGJAVA-8106 Improve DIB processing implementation Feature
IMAGINGJAVA-8116 Exception on converting EMF to PNG Enhancement
IMAGINGJAVA-8115 Duplicate tiff frame results in a wrong colors (almost completly dark) Enhancement
IMAGINGJAVA-8112 Incorrect export from SVGZ to PNG on Linux Enhancement
IMAGINGJAVA-8111 Incorrect output after WEBP image is resized Enhancement
IMAGINGJAVA-8110 Exception on converting EPS to PNG Enhancement
IMAGINGJAVA-8109 Can’t convert WMZ to JPG Enhancement
IMAGINGJAVA-8107 Can’t convert CMX to PNG Enhancement
IMAGINGJAVA-8105 Fix bug of a text formatting in the attached image Enhancement
IMAGINGJAVA-8104 Dicom export and consequent save then export produce different results Enhancement
IMAGINGJAVA-8103 Exception on loading a CDR image Enhancement
IMAGINGJAVA-8102 DrawString with extra distance between symbols or lines Enhancement
IMAGINGJAVA-8101 Support reading of a 16bit Dicom image Enhancement
IMAGINGJAVA-8097 Emf file not correctly converted to png Enhancement
IMAGINGJAVA-8096 ImageSaveException while exporting particular GIF image Enhancement
IMAGINGJAVA-1573 Exception on saving DICOM image Enhancement

Public API changes:

Added APIs:

Please see corresponding cumulative API changes for Aspose.Imaging for .NET 22.5 version

Removed APIs:

Please see corresponding cumulative API changes for Aspose.Imaging for .NET 22.5 version

Usage Examples:

IMAGINGJAVA-8116 Exception on converting EMF to PNG

String baseFolder = "D:\\";
String file = "BetterEMF.emf";
String inputFileName = baseFolder + file;
String outputFileName = inputFileName + ".png";
try (Image image = Image.load(inputFileName))
{
	image.save(outputFileName, new PngOptions());
}

IMAGINGJAVA-8115 Duplicate tiff frame results in a wrong colors (almost completly dark)

import com.aspose.imaging.Image;
import com.aspose.imaging.fileformats.tiff.TiffFrame;
import com.aspose.imaging.fileformats.tiff.TiffImage;
import com.aspose.imaging.fileformats.tiff.TiffRational;
import com.aspose.imaging.fileformats.tiff.enums.*;
import com.aspose.imaging.imageoptions.TiffOptions;


try (TiffImage source = (TiffImage) Image.load("image.tiff"))
{
	TiffOptions options = new TiffOptions(TiffExpectedFormat.Default);
	options.setBitsPerSample(new int[] {8, 8, 8});
	options.setPhotometric(TiffPhotometrics.Rgb);
	options.setXresolution(new TiffRational(72));
	options.setYresolution(new TiffRational(72));
	options.setResolutionUnit(TiffResolutionUnits.Inch);
	options.setPlanarConfiguration(TiffPlanarConfigs.Contiguous);
	options.setCompression(TiffCompressions.None);

	try (TiffImage tiffImage = new TiffImage(new TiffFrame(options, 1, 1)))
	{
		// Iterate over the collection of input image frames
		for (TiffFrame frame : source.getFrames())
		{
			TiffFrame copiedFrame = TiffFrame.copyFrame(frame);

			// Add copied frame to the destination image
			tiffImage.addFrame(copiedFrame);
			System.out.println('.');
		}

		// The first frame is created by default, we may just remove it as it is empty
		// But it is not possible to remove the empty frame unless there are more than one frames
		final TiffFrame[] frames = tiffImage.getFrames();
		if (frames.length > 1)
		{
			// Set next frame as Active
			tiffImage.setActiveFrame(frames[1]);
			// Remove the first frame
			tiffImage.removeFrame(0);
		}

		// Save result image
		tiffImage.save("image.tiff.tiff");
	}
}

IMAGINGJAVA-8112 Incorrect export from SVGZ to PNG on Linux

**Please, execute this code in the Linux system**

try (com.aspose.imaging.Image image = com.aspose.imaging.Image.load("example.svgz"))
{
	image.save("result.png");
}

IMAGINGJAVA-8111 Incorrect output after WEBP image is resized

WebP image resizing example:

try (Image image = Image.load("image.webp"))
{
    image.resize(300, 800, ResizeType.CatmullRom);
    image.save("resized.webp");
}

IMAGINGJAVA-8110 Exception on converting EPS to PNG

try (Image image = Image.load("C3.eps"))
{
	image.save("C3.png", new PngOptions());
}

IMAGINGJAVA-8109 Can’t convert WMZ to JPG

try (Image image = Image.load("image002.wmz"))
{
    image.save("image002.wmz.jpg", new JpegOptions());
}

IMAGINGJAVA-8108 Unify extraction of raster images, embedded in vector formats.

import com.aspose.imaging.EmbeddedImage;
import com.aspose.imaging.FileFormat;
import com.aspose.imaging.Image;
import com.aspose.imaging.VectorImage;
import java.io.File;


String baseFolder = "D:\\test\\";
String outputFolder = baseFolder + "out";
new File(outputFolder).mkdirs();
outputFolder += "\\";
String[] fileNames = new String[]{"test.cdr", "test.cmx", "test.svg", "test.emf", "test.wmf", "test.odg", "test.otg", "test.eps"};
for (String fileName : fileNames)
{
	String inputFileName = baseFolder + fileName;
	try (Image image = Image.load(inputFileName))
	{
		EmbeddedImage[] images = ((VectorImage) image).getEmbeddedImages();
		int i = 0;
		for (EmbeddedImage im : images)
		{
			String outFileName = String.format("%s_image%d%s", FileFormat.toString(FileFormat.class, image.getFileFormat()), i++, getExtension(im.getImage().getFileFormat()));
			String outFilePath = outputFolder + outFileName;
			im.getImage().save(outFilePath);
			im.close();
		}
	}
}



private static String getExtension(long format)
{
	if (format == FileFormat.Jpeg)
	{
		return ".jpg";
	}
	else if (format == FileFormat.Png)
	{
		return ".png";
	}
	else if (format == FileFormat.Bmp)
	{
		return ".bmp";
	}
	return "." + FileFormat.toString(FileFormat.class, format);
}

IMAGINGJAVA-8107 Can’t convert CMX to PNG

This cmx file not have pages.
The exception must contain message: "Page with index 0 not found"

String baseFolder = "D:\\";
String fileName = "1.cmx";
String inputFileName = baseFolder, fileName;
String outFileName = inputFileName + ".png";
try (Image image = Image.load(inputFileName))
{
    image.save(outFileName, new PngOptions());
}

new java.io.File(outFileName).delete();

IMAGINGJAVA-8106 Improve DIB processing implementation

import com.aspose.imaging.Image;
import com.aspose.imaging.fileformats.psd.VectorDataCompositionMode;
import com.aspose.imaging.imageoptions.CdrRasterizationOptions;
import com.aspose.imaging.imageoptions.PngOptions;
import com.aspose.imaging.imageoptions.PsdOptions;
import com.aspose.imaging.imageoptions.PsdVectorizationOptions;



CdrRasterizationOptions rasterizationOptions = new CdrRasterizationOptions();
PsdVectorizationOptions psdVectorizationOptions = new PsdVectorizationOptions();
psdVectorizationOptions.setVectorDataCompositionMode(VectorDataCompositionMode.SeparateLayers);

PsdOptions psdOptions = new PsdOptions();
psdOptions.setVectorRasterizationOptions(rasterizationOptions);
psdOptions.setVectorizationOptions(psdVectorizationOptions);

String inputFileName = "brushes.cdr";
String outputFileName = "brushes.cdr.psd";

try (Image image = Image.load(inputFileName))
{
    rasterizationOptions.setPageWidth(image.getWidth());
    rasterizationOptions.setPageHeight(image.getHeight());

    image.save(outputFileName, psdOptions);
    image.save(outputFileName + ".png", new PngOptions());
}

IMAGINGJAVA-8105 Fix bug of a text formatting in the attached image

String fileName = "D:\\buklet.cdr";
String outFileName = fileName + ".png";
try (Image image = Image.load(fileName))
{
    image.save(outFileName, new PngOptions());
}

IMAGINGJAVA-8104 Dicom export and consequent save then export produce different results

try (DicomImage image = (DicomImage)Image.load("IMG-0002-00007.dcm"))
{
    image.save("IMG-0002-00007.dcm_1.png", new PngOptions());
    image.save("IMG-0002-00007_2.dcm");
    image.save("IMG-0002-00007.dcm_2.png", new PngOptions());
}

IMAGINGJAVA-8103 Exception on loading a CDR image

String baseFolder = "D:\\";
String fileName = "6.cdr";
String inputFilePath = baseFolder + fileName;
String outputFilePath = inputFilePath + ".png";
try (var image = Image.load(inputFilePath))
{
    image.save(outputFilePath, new PngOptions());
}

IMAGINGJAVA-8102 DrawString with extra distance between symbols or lines

import com.aspose.imaging.*;
import com.aspose.imaging.brushes.SolidBrush;
import com.aspose.imaging.imageoptions.*;
import com.aspose.imaging.sources.StreamSource;


//Horizontal left to right
drawText(StringAlignment.Near, 0);
drawText(StringAlignment.Far, 0);
drawText(StringAlignment.Center, 0);

//Horizontal right to left
drawText(StringAlignment.Near, StringFormatFlags.DirectionRightToLeft);
drawText(StringAlignment.Far, StringFormatFlags.DirectionRightToLeft);
drawText(StringAlignment.Center, StringFormatFlags.DirectionRightToLeft);

//Vertical left to right
drawText(StringAlignment.Near, StringFormatFlags.DirectionVertical);
drawText(StringAlignment.Far, StringFormatFlags.DirectionVertical);
drawText(StringAlignment.Center, StringFormatFlags.DirectionVertical);




private static void drawText(int alignment, int flags)
{
	String baseFolder = "D:\\test\\";
	String fileName = "output_" + alignment + "_" + flags + ".png";
	String outputFileName = baseFolder + fileName;
	int[] fontSizes = { 8, 12, 16, 24, 32, 48, 64, 96 };

	try (Image bmp = Image.create(new BmpOptions() {{ setSource(new StreamSource()); }}, 500, 900))
	{
		Graphics gr = new Graphics(bmp);
		gr.clear(Color.getWhite());
		gr.setPageUnit(GraphicsUnit.Pixel);
		String text = "Hello world 1111 \n2222";
		Brush brush = new SolidBrush(Color.getBlack());

		float yPos = 0;
		for (int fontSize : fontSizes)
		{
			Font font = new Font("Times New Roman", fontSize);
			StringFormat format = new StringFormat();
			format.setCustomCharIdent(new PointF(5, 5));
			format.setAlignment(alignment);
			format.setFormatFlags(flags);

			RectangleF rectangle = new RectangleF(0, yPos, 200, fontSize * 2.5f);
			gr.drawString(text, font, brush, rectangle, format);
			yPos += rectangle.getHeight() * 1.2f;
			gr.drawRectangle(new Pen(Color.getRed()), rectangle);
		}

		bmp.save(outputFileName, new PngOptions());
	}
}

IMAGINGJAVA-8101 Support reading of a 16bit Dicom image

try (DicomImage image = (DicomImage)Image.load("IMG-0002-00007.dcm"))
{
    image.save("IMG-0002-00007.dcm.png", new PngOptions());
}

IMAGINGJAVA-8097 Emf file not correctly converted to png

String inputFile = "picture-89c3d48cc4874177a54eb3e2ec94b5fd.emf";
String baseFolder = "D:\\";
String inputFileName = baseFolder + inputFile;
String outputFileName = inputFileName + ".png";
try (Image image = Image.load(inputFileName))
{
    image.save(outputFileName, new PngOptions());
}

IMAGINGJAVA-8096 ImageSaveException while exporting particular GIF image

### GIF export to APNG:

try (Image image = Image.load("gif-image.gif"))
{
    image.save("output.png", new ApngOptions() {{ setFullFrame(true); }});
}

*Note that you should provide `FullFrame = true` for `new ApngOptions()` to get rid of artifacts.*

### Saving GIF frames as HTML5 images:

try (GifImage image = (GifImage)Image.load("gif-image.gif"))
{
	Image[] pages = image.getPages();
	for (int i = 0; i < pages.length; i++)
	{
		pages[i].save("page-" + i + ".html", new Html5CanvasOptions());
	}
}

IMAGINGJAVA-1573 Exception on saving DICOM image

try (Image image = Image.load("sample.dcm")
{
	image.save("sample.dcm.jpeg", new JpegOptions());
}