Aspose.PSD for Java 23.12 - Release Notes

Key Summary Category
PSDJAVA-565 [AI Format] Add support of Raster Image rendering in new version of AI. Feature
PSDJAVA-566 Handle Gradient type Noise in GdflResrource. Feature
PSDJAVA-567 Error “Object reference not set to an instance of an object.” on saving of Text Layer After Update. Bug
PSDJAVA-568 Fix the manual loading of fonts on MacOS using System.Drawing.Common and Aspose.Drawing. Bug
PSDJAVA-569 AllowWarpRepaint in the PsdLoadOptions leads to the exception. Bug
PSDJAVA-570 [AI Format] Implement processing of cross-reference streams. Enhancement
PSDJAVA-571 License Control for VectorPathDataResource works incorrectly. Enhancement
PSDJAVA-574 Open any image file as an embedded smart object in the PSD image. Enhancement

Public API Changes

Added APIs:

  • M:com.aspose.psd.FontSettings.removeFontCacheFile
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.GradientFillSettings.getInterpolation
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.GradientFillSettings.setInterpolation(short)
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.IGradientFillSettings.getGradientMode
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.IGradientFillSettings.setGradientMode(int)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.GdFlResource.getColorModel
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.GdFlResource.getGradientMode
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.GdFlResource.getMaximumColor
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.GdFlResource.getMinimumColor
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.GdFlResource.getRndNumberSeed
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.GdFlResource.getRoughness
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.GdFlResource.getShowTransparency
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.GdFlResource.getUseVectorColor
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.GdFlResource.setColorModel(java.lang.String)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.GdFlResource.setGradientMode(java.lang.String)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.GdFlResource.setMaximumColor(com.aspose.psd.fileformats.psd.rawcolor.RawColor)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.GdFlResource.setMinimumColor(com.aspose.psd.fileformats.psd.rawcolor.RawColor)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.GdFlResource.setRndNumberSeed(int)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.GdFlResource.setRoughness(int)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.GdFlResource.setShowTransparency(boolean)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.GdFlResource.setUseVectorColor(boolean)
  • M:com.aspose.psd.fileformats.psd.layers.smartobjects.SmartObjectLayer.#ctor(com.aspose.psd.system.io.Stream)
  • M:com.aspose.psd.fileformats.psd.coreexceptions.LicenseException.#ctor(java.lang.String,java.lang.Throwable)
  • T:com.aspose.psd.fileformats.psd.layers.layerresources.LmskResource
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.LmskResource.#ctor
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.LmskResource.getColorComponent1
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.LmskResource.getColorComponent2
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.LmskResource.getColorComponent3
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.LmskResource.getColorComponent4
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.LmskResource.getColorSpace
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.LmskResource.getFlag
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.LmskResource.getKey
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.LmskResource.getLength
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.LmskResource.getOpacity
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.LmskResource.getPsdVersion
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.LmskResource.getSignature
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.LmskResource.save(com.aspose.psd.StreamContainer,int)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.LmskResource.setColorComponent1(int)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.LmskResource.setColorComponent2(int)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.LmskResource.setColorComponent3(int)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.LmskResource.setColorComponent4(int)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.LmskResource.setColorSpace(int)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.LmskResource.setOpacity(short)
  • F:com.aspose.psd.fileformats.psd.layers.layerresources.LmskResource.TypeToolKey
  • T:com.aspose.psd.fileformats.psd.resources.enums_.ColorSpace
  • F:com.aspose.psd.fileformats.psd.resources.enums_.ColorSpace.CMYK
  • F:com.aspose.psd.fileformats.psd.resources.enums_.ColorSpace.GrayScale
  • F:com.aspose.psd.fileformats.psd.resources.enums_.ColorSpace.HSB
  • F:com.aspose.psd.fileformats.psd.resources.enums_.ColorSpace.Lab
  • F:com.aspose.psd.fileformats.psd.resources.enums_.ColorSpace.RGB
  • T:com.aspose.psd.fileformats.psd.layers.fillsettings.NoiseGradientFillSettings
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.NoiseGradientFillSettings.#ctor
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.NoiseGradientFillSettings.getColorModel
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.NoiseGradientFillSettings.getMaximumColor
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.NoiseGradientFillSettings.getMinimumColor
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.NoiseGradientFillSettings.getRndNumberSeed
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.NoiseGradientFillSettings.getRoughness
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.NoiseGradientFillSettings.getShowTransparency
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.NoiseGradientFillSettings.getUseVectorColor
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.NoiseGradientFillSettings.setColorModel(short)
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.NoiseGradientFillSettings.setMaximumColor(com.aspose.psd.fileformats.psd.rawcolor.RawColor)
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.NoiseGradientFillSettings.setMinimumColor(com.aspose.psd.fileformats.psd.rawcolor.RawColor)
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.NoiseGradientFillSettings.setRndNumberSeed(int)
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.NoiseGradientFillSettings.setRoughness(int)
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.NoiseGradientFillSettings.setShowTransparency(boolean)
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.NoiseGradientFillSettings.setUseVectorColor(boolean)
  • T:com.aspose.psd.fileformats.psd.layers.layerresources.GdflResourceHelper
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.GdflResourceHelper.#ctor
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.GdflResourceHelper.gradientKindToStr(int)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.GdflResourceHelper.noiseColorModelToStr(short)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.GdflResourceHelper.strToGradientKind(java.lang.String)
  • M:com.aspose.psd.fileformats.psd.layers.layerresources.GdflResourceHelper.strToNoiseColorModel(java.lang.String)
  • F:com.aspose.psd.fileformats.psd.layers.layerresources.GdflResourceHelper.StrGradientNoise
  • F:com.aspose.psd.fileformats.psd.layers.layerresources.GdflResourceHelper.StrGradientSolid
  • F:com.aspose.psd.fileformats.psd.layers.layerresources.GdflResourceHelper.StrModelHSB
  • F:com.aspose.psd.fileformats.psd.layers.layerresources.GdflResourceHelper.StrModelLAB
  • F:com.aspose.psd.fileformats.psd.layers.layerresources.GdflResourceHelper.StrModelRGB
  • T:com.aspose.psd.fileformats.psd.layers.fillsettings.BaseGradientFillSettings
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.BaseGradientFillSettings.#ctor
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.BaseGradientFillSettings.#ctor(com.aspose.psd.fileformats.psd.layers.layerresources.GdFlResource)
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.BaseGradientFillSettings.getAlignWithLayer
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.BaseGradientFillSettings.getAngle
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.BaseGradientFillSettings.getDither
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.BaseGradientFillSettings.getFillType
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.BaseGradientFillSettings.getGradientMode
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.BaseGradientFillSettings.getGradientType
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.BaseGradientFillSettings.getHorizontalOffset
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.BaseGradientFillSettings.getReverse
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.BaseGradientFillSettings.getScale
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.BaseGradientFillSettings.getVerticalOffset
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.BaseGradientFillSettings.setAlignWithLayer(boolean)
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.BaseGradientFillSettings.setAngle(double)
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.BaseGradientFillSettings.setDither(boolean)
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.BaseGradientFillSettings.setGradientMode(int)
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.BaseGradientFillSettings.setGradientType(int)
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.BaseGradientFillSettings.setHorizontalOffset(double)
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.BaseGradientFillSettings.setReverse(boolean)
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.BaseGradientFillSettings.setScale(int)
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.BaseGradientFillSettings.setVerticalOffset(double)

Removed APIs:

  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.GradientFillSettings.getAlignWithLayer M:com.aspose.psd.fileformats.psd.layers.fillsettings.GradientFillSettings.getAngle
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.GradientFillSettings.getDither
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.GradientFillSettings.getFillType
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.GradientFillSettings.getGradientType
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.GradientFillSettings.getHorizontalOffset
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.GradientFillSettings.getReverse
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.GradientFillSettings.getScale
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.GradientFillSettings.getVerticalOffset
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.GradientFillSettings.setAlignWithLayer(boolean)
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.GradientFillSettings.setAngle(double)
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.GradientFillSettings.setDither(boolean)
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.GradientFillSettings.setGradientType(int)
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.GradientFillSettings.setHorizontalOffset(double)
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.GradientFillSettings.setReverse(boolean)
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.GradientFillSettings.setScale(int)
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.GradientFillSettings.setVerticalOffset(double)
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.IFillSettings.setColor(com.aspose.psd.Color)
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.IGradientFillSettings.getColor
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.IGradientFillSettings.getColorPoints
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.IGradientFillSettings.getGradientName
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.IGradientFillSettings.getTransparencyPoints
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.IGradientFillSettings.setColor(com.aspose.psd.Color)
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.IGradientFillSettings.setColorPoints(com.aspose.psd.fileformats.psd.layers.IGradientColorPoint[])
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.IGradientFillSettings.setGradientName(java.lang.String)
  • M:com.aspose.psd.fileformats.psd.layers.fillsettings.IGradientFillSettings.setTransparencyPoints(com.aspose.psd.fileformats.psd.layers.fillsettings.IGradientTransparencyPoint[])
  • M:com.aspose.psd.fileformats.psd.coreexceptions.LicenseException.#ctor(java.lang.String,java.lang.Throwable)

Usage examples:

** PSDJAVA-565. [AI Format] Add support of Raster Image rendering in new version of AI**

    String sourceFile = "src/main/resources/raster.ai";
    String outputFile = "src/main/resources/raster_output.png";

    try (AiImage image = (AiImage) Image.load(sourceFile)) {
        image.save(outputFile, new PngOptions());
    }

** PSDJAVA-566. Handle Gradient type Noise in GdflResrource**

    String sourceFile = "src/main/resources/Gradient-Fill.psd";
    String destFile = "src/main/resources/Gradient-Fill-out.psd";

    try (PsdImage image = (PsdImage) Image.load(sourceFile, new PsdLoadOptions())) {
        Layer layer = image.getLayers()[1];

        for (LayerResource resource : layer.getResources()) {
            GdFlResource gdFlResource = (GdFlResource) resource;

            if (gdFlResource != null) {
                gdFlResource.setScale(90);
                gdFlResource.setAngle(30);
                gdFlResource.setDither(false);
                gdFlResource.setAlignWithLayer(true);
                gdFlResource.setReverse(false);

                break;
            }
        }
        image.save(destFile, new PsdOptions());
    }

** PSDJAVA-567. Error “Object reference not set to an instance of an object.” on saving of Text Layer After Update**

    String sourceFile = "src/main/resources/input_1827.psd";
    String outputFile = "src/main/resources/out_1827.psd";

    try (PsdImage psdImage = (PsdImage) Image.load(sourceFile)) {
        for (Layer layer : psdImage.getLayers()) {
            if (layer instanceof TextLayer) {
                ((TextLayer) layer).getTextData().updateLayerData();
            }
        }

        // There should no error here
        psdImage.save(outputFile);
    }

** PSDJAVA-569. AllowWarpRepaint in the PsdLoadOptions leads to the exception**

    String sourceFile = "src/main/resources/SizeChart - 4 Colors.psd";
    String outputFile = "src/main/resources/_export.png";

    PsdLoadOptions psdLoadOptions = new PsdLoadOptions();
    psdLoadOptions.setAllowWarpRepaint(true);
    psdLoadOptions.setLoadEffectsResource(true);

    try (PsdImage psdImage = (PsdImage) Image.load(sourceFile, psdLoadOptions)) {
        PngOptions pngOptions = new PngOptions();
        pngOptions.setColorType(PngColorType.TruecolorWithAlpha);
        pngOptions.setProgressive(true);
        pngOptions.setCompressionLevel(9);

        // If the save is successful, the test is passed
        psdImage.save(outputFile, pngOptions);
    }

** PSDJAVA-571. License Control for VectorPathDataResource works incorrectly**

    String sourceFile = "src/main/resources/DifferentLayerMasks.psd";
    String outputFile = "src/main/resources/DifferentLayerMasks_output.psd";

    License.removeLicense();

    try {
        ry (PsdImage im = (PsdImage) Image.load(sourceFile)) {
        im.save(outputFile);
        }
    } finally {
        license.setLicense("");
    }

** PSDJAVA-574. Open any image file as an embedded smart object in the PSD image**

    String sourceFile = "src/main/resources/empty.psd";

    String addTreeFile = "src/main/resources/tree.psd";
    String addFrostFile = "src/main/resources/frost.png";

    String outputTreeFile = "src/main/resources/tree_export.psd";
    String outputFrostFile = "src/main/resources/frost_export.psd";

    PsdLoadOptions firstPsdLoadOptions = new PsdLoadOptions();
    firstPsdLoadOptions.setLoadEffectsResource(true);

    try (PsdImage psdImage = (PsdImage) Image.load(sourceFile, firstPsdLoadOptions)) {
        final Stream stream = new FileStream(addTreeFile, FileMode.Open);
        try {
            try (SmartObjectLayer smartLayer = new SmartObjectLayer(stream)) {
                psdImage.addLayer(smartLayer);

                psdImage.save(outputTreeFile, new PsdOptions());
            }
        } finally {
            stream.close();
        }
    }

    PsdLoadOptions secondPsdLoadOptions = new PsdLoadOptions();
    secondPsdLoadOptions.setLoadEffectsResource(true);

    try (PsdImage psdImage = (PsdImage) Image.load(sourceFile, secondPsdLoadOptions)) {
        final Stream stream = new FileStream(addFrostFile, FileMode.Open);
        try {
            try (SmartObjectLayer smartLayer = new SmartObjectLayer(stream)) {
                psdImage.addLayer(smartLayer);

                psdImage.save(outputFrostFile, new PsdOptions());
            }
        } finally {
            stream.close();
        }
    }