Aspose.Imaging for Java 21.10 - Release notes
Competitive features:
- Support Image scoped fonts
Key | Summary | Category |
---|---|---|
IMAGINGJAVA-7942 | Support Image scoped fonts | Feature |
IMAGINGJAVA-7950 | The trouble with Tiff file from the GIS team | Enhancement |
IMAGINGJAVA-7949 | BUG - RasterImage.Filter GaussianFilterOptions Black pixel and border creation | Enhancement |
IMAGINGJAVA-7935 | Negative image height on converting WMF to PNG | Enhancement |
IMAGINGJAVA-7933 | Property Image.Size for eps images is not optimized | Enhancement |
IMAGINGJAVA-7932 | Fix bugs in a figures fill color | Enhancement |
IMAGINGJAVA-7930 | Fix bugs in CDR style reader for v14 | Enhancement |
IMAGINGJAVA-7924 | Support of GetOriginalOptions for Gif, Jpeg2000 formats | Enhancement |
IMAGINGJAVA-7918 | Exception when converting EMZ to JPG | Enhancement |
IMAGINGJAVA-7888 | Occasionally an exception occurs when running Image.save in multiple threads | Enhancement |
IMAGINGJAVA-7885 | Exception saving WMF to JPEG | Enhancement |
IMAGINGJAVA-7876 | TIFF to PDF: Large output size PDF | Enhancement |
Public API changes:
Added APIs:
Please see corresponding cumulative API changes for Aspose.Imaging for .NET 21.10 version
Removed APIs:
Please see corresponding cumulative API changes for Aspose.Imaging for .NET 21.10 version
Usage Examples:
IMAGINGJAVA-7950 The trouble with Tiff file from the GIS team
HashMap<String, byte[]> map = new HashMap<String, byte[]>();
map.put("SentinelBand8A.tif", new byte[] { 25, 0, 0, 0, 0, 0, 31 });
map.put("SentinelNDVI.tif", new byte[] { (byte)221, (byte)150, 20, (byte)248, 63, (byte)169, (byte)202 });
map.put("PlanetNDVI.tif", new byte[] { 10, (byte)141, 60, 122, (byte)237, (byte)178, 103 });
for (Map.Entry<String, byte[]> entry : map.entrySet())
{
String filename = entry.getKey();
byte[] rawValues = entry.getValue();
String baseFolder = "C:\\IMAGINGNET-4775\\";
try(TiffImage image = (TiffImage)Image.load(baseFolder + filename))
{
Rectangle rawRect = new Rectangle(0, 0, image.getWidth(), image.getHeight());
final RawDataSettings imageRawDataSettings = image.getRawDataSettings();
RawDataSettings settings = new RawDataSettings();
settings.setColorPalette(imageRawDataSettings.getColorPalette());
settings.setDitheringMethod(imageRawDataSettings.getDitheringMethod());
settings.setPixelDataFormat(imageRawDataSettings.getPixelDataFormat());
settings.setCustomColorConverter(imageRawDataSettings.getCustomColorConverter());
settings.setLineSize(imageRawDataSettings.getLineSize());
settings.setIndexedColorConverter(imageRawDataSettings.getIndexedColorConverter());
settings.setFallbackIndex(imageRawDataSettings.getFallbackIndex());
RawTiffLoader loader = new RawTiffLoader();
image.loadRawData(rawRect.Clone(), settings, loader);
int[] indexes = new int[] { 0, 10, 100, 700, 800, 1000, 1200 };
if (rawValues != null)
{
final byte[] buffer = loader.getBuffer();
for (int i = 0; i < indexes.length; i++)
{
if (buffer[indexes[i]] != rawValues[i])
{
throw new AssertionError("Data must be equal!");
}
}
}
}
}
class RawTiffLoader implements IPartialRawDataLoader
{
private byte[] buffer;
public byte[] getBuffer() { return buffer; }
public void process(Rectangle rectangle, byte[] data, Point start, Point end)
{
this.buffer = data;
}
public void process(Rectangle rectangle, byte[] data, Point start, Point end, LoadOptions loadOptions)
{
this.buffer = data;
}
}
IMAGINGJAVA-7949 BUG - RasterImage.Filter GaussianFilterOptions Black pixel and border creation
import com.aspose.imaging.Image;
import com.aspose.imaging.RasterImage;
import com.aspose.imaging.imagefilters.filteroptions.GaussianBlurFilterOptions;
String baseFolder = "D:\\";
String inputFileName = baseFolder + "test_image.jpg";
String outFileName = baseFolder + "result.jpg";
try (RasterImage image = (RasterImage)Image.load(inputFileName))
{
image.filter(image.getBounds(), new GaussianBlurFilterOptions(5, 5));
image.save(outFileName);
}
IMAGINGJAVA-7942 Support Image scoped fonts
import com.aspose.imaging.*;
import com.aspose.imaging.customfonthandler.CustomFontData;
import com.aspose.imaging.imageoptions.PngOptions;
import com.aspose.imaging.imageoptions.VectorRasterizationOptions;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.LinkedList;
import java.util.List;
/*
This example demonstrates the custom font source providing to use the specific font(s) for image rendering.
Unlike FontSettings.setFontsFolders method works in the image scope and allowing to provide the fonts in multi-user scenarios.
*/
public void customFontSourceTest(String inputPath, String outputPath, String fileName, String fontPath)
{
LoadOptions loadOptions = new LoadOptions();
loadOptions.addCustomFontSource(new CustomFontSource()
{
@Override
public CustomFontData[] get(Object... objects)
{
return getFontSource(objects);
}
}, fontPath);
try (Image img = Image.load(inputPath + fileName, loadOptions))
{
final VectorRasterizationOptions vectorRasterizationOptions =
(VectorRasterizationOptions) img.getDefaultOptions(new Object[]{Color.getWhite(), img.getWidth(), img.getHeight()});
vectorRasterizationOptions.setTextRenderingHint(TextRenderingHint.SingleBitPerPixel);
vectorRasterizationOptions.setSmoothingMode(SmoothingMode.None);
img.save(outputPath + fileName + ".png", new PngOptions()
{{
setVectorRasterizationOptions(vectorRasterizationOptions);
}});
}
}
// The custom fonts provider example.
private CustomFontData[] getFontSource(Object... args)
{
String fontsPath = "";
if (args.length > 0)
{
fontsPath = args[0].toString();
}
List<CustomFontData> customFontData = new LinkedList<CustomFontData>();
try
{
final File[] files = new File(fontsPath).listFiles();
if (files != null)
{
for (File font : files)
{
customFontData.add(new CustomFontData(getNameNoExt(font.getName()), Files.readAllBytes(font.toPath())));
}
}
}
catch (IOException ex)
{
throw new RuntimeException(ex);
}
return customFontData.toArray(new CustomFontData[0]);
}
private String getNameNoExt(String fileName)
{
int pos = fileName.lastIndexOf('.');
if (pos < 0)
{
return fileName;
}
return fileName.substring(0, pos);
}
IMAGINGJAVA-7935 Negative image height on converting WMF to PNG
String dir = "C:\\Data\\";
final File[] files = new File(dir).listFiles();
if (files == null)
{
return;
}
for (File file : files)
{
if (!file.isFile() || file.getName().endsWith(".png"))
{
continue;
}
Image image = Image.load(file.getAbsolutePath());
try
{
image.save(file.getAbsolutePath() + "-out.png", new PngOptions());
}
finally
{
image.close();
}
}
IMAGINGJAVA-7933 Property Image.Size for eps images is not optimized
import com.aspose.imaging.Image;
import com.aspose.imaging.Size;
String inputFilePath = "file_2.eps";
for (int i = 0; i < 100; i++)
{
try (Image image = Image.load(inputFilePath))
{
Size size = image.getSize();
System.out.println(size);
}
}
IMAGINGJAVA-7932 Fix bugs in a figures fill color
import com.aspose.imaging.Image;
import com.aspose.imaging.imageoptions.CdrRasterizationOptions;
import com.aspose.imaging.imageoptions.PngOptions;
import com.aspose.imaging.imageoptions.PositioningTypes;
String baseFolder = "D:\\";
String fileName = "TestTransparent.cdr";
String inputFilePath = baseFolder + fileName;
String outputFilePath = inputFilePath + ".png";
try (Image image = Image.load(inputFilePath))
{
image.save(outputFilePath, new PngOptions()
{{
setVectorRasterizationOptions(new CdrRasterizationOptions()
{{
setPositioning(PositioningTypes.Relative);
}});
}});
}
IMAGINGJAVA-7930 Fix bugs in CDR style reader for v14
import com.aspose.imaging.Image;
import com.aspose.imaging.imageoptions.CdrRasterizationOptions;
import com.aspose.imaging.imageoptions.PngOptions;
import com.aspose.imaging.imageoptions.PositioningTypes;
String baseFolder = "D:\\";
String fileName = "7 Band Spectrum Acrylic Tower Version 2.cdr";
String inputFilePath = baseFolder + fileName;
String outputFilePath = inputFilePath + ".png";
try (Image image = Image.load(inputFilePath))
{
image.save(outputFilePath, new PngOptions()
{{
setVectorRasterizationOptions(new CdrRasterizationOptions()
{{
setPositioning(PositioningTypes.Relative);
}});
}});
}
IMAGINGJAVA-7924 Support of GetOriginalOptions for Gif, Jpeg2000 formats
String path = "source.gif";
String outputPath = "result.gif";
String outputPath2 = "result2.gif";
try (GifImage image = (GifImage)Image.load(path))
{
image.save("result1.gif", image.getOriginalOptions());
image.save("result2.gif", ((GifFrameBlock)image.getPages()[0]).getOriginalOptions());
}
IMAGINGJAVA-7918 Exception when converting EMZ to JPG
import com.aspose.imaging.Image;
import com.aspose.imaging.imageoptions.JpegOptions;
String fileName = "image001.emz";
String baseFolder = "D:\\";
String inputFileName = baseFolder + fileName;
String outputFileName = inputFileName + ".jpg";
try (Image image = Image.load(inputFileName))
{
image.save(outputFileName, new JpegOptions());
}
IMAGINGJAVA-7888 Occasionally an exception occurs when running Image.save in multiple threads
import com.aspose.imaging.*;
import com.aspose.imaging.imageoptions.*;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
Path inputDirPath = Paths.get ("C:\\Data\\input\\");
Path outputDirPath = Paths.get ("C:\\Data\\output\\");
int parallelThreadNum = 1;
// Repeat until error
for (int i = 0; i < 10; i++)
{
convertFiles (inputDirPath, outputDirPath, parallelThreadNum);
// If no error, clear output files.
for (File outputFile: outputDirPath.toFile ().listFiles ()) {
Files.delete (outputFile.toPath ());
}
}
IMAGINGJAVA-7885 Exception saving WMF to JPEG
String inputFilePath = "1014094.wmf";
//String inputFilePath = "1109822.wmf";
String outputFilePath = inputFilePath + ".jpeg";
WmfRasterizationOptions rasterizationOptions = new WmfRasterizationOptions();
try
{
convertVectorRasterizationTo(inputFilePath, outputFilePath, rasterizationOptions);
}
finally
{
rasterizationOptions.close();
}
IMAGINGJAVA-7876 TIFF to PDF: Large output size PDF
String baseFolder = "D:\\";
String fileName = "Input.tif";
String inputFileName = baseFolder + fileName;
String outputFileName = inputFileName + ".pdf";
try (Image image = Image.load(inputFileName))
{
final PdfCoreOptions pdfCoreOptions = new PdfCoreOptions();
pdfCoreOptions.setCompression(PdfImageCompressionOptions.Ccitt4);
image.save(outputFileName, new PdfOptions()
{{
setPdfCoreOptions(pdfCoreOptions);
}});
}