Browse our Products

If so you can download any of the below versions for testing. The product will function as normal except for an evaluation limitation. At the time of purchase we provide a license file via email that will allow the product to work in its full capacity. If you would also like an evaluation license to test without any restrictions for 30 days, please follow the directions provided here.

KeySummaryCategory
PSDPYTHON-205Add support for exporting Layers with Layer Effects to raster formatsFeature
PSDPYTHON-206Add a property to toggle all layer effects visibilityFeature
PSDPYTHON-209Update the structure of Gradient classes. Create base class for Gradeint specificEnhancement
PSDPYTHON-212Make correct initializing of Layers with Linked Layers RegistryBug
PSDPYTHON-219Inaccurate rendering of Smart Object LayerBug
PSDPYTHON-220Error when applying deformation due to invalid ‘Processing Area’ value is 2Bug

Public API Changes

Added APIs:

  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.IGradientFillSettings.Gradient
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.BlendingOptions.AreEffectsEnabled
  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.InnerShadowEffect.GetEffectBounds(Aspose.PSD.Rectangle,System.Int32)
  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.ColorOverlayEffect.GetEffectBounds(Aspose.PSD.Rectangle,System.Int32)
  • Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.DropShadowEffect.GetEffectBounds(Aspose.PSD.Rectangle,System.Int32)
  • Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.OuterGlowEffect.GetEffectBounds(Aspose.PSD.Rectangle,System.Int32)
  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.ILayerEffect.GetEffectBounds(Aspose.PSD.Rectangle,System.Int32)
  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.StrokeEffect.GetEffectBounds(Aspose.PSD.Rectangle,System.Int32)
  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientOverlayEffect.GetEffectBounds(Aspose.PSD.Rectangle,System.Int32)
  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.PatternOverlayEffect.GetEffectBounds(Aspose.PSD.Rectangle,System.Int32)
  • T:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.LayerEffectsTypes
  • F:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.LayerEffectsTypes.DropShadow
  • F:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.LayerEffectsTypes.OuterGlow
  • F:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.LayerEffectsTypes.PatternOverlay
  • F:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.LayerEffectsTypes.GradientOverlay
  • F:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.LayerEffectsTypes.ColorOverlay
  • F:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.LayerEffectsTypes.Satin
  • F:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.LayerEffectsTypes.InnerGlow
  • F:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.LayerEffectsTypes.InnerShadow
  • F:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.LayerEffectsTypes.Stroke
  • F:Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.LayerEffectsTypes.BevelEmboss
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.GradientFillSettings.GradientType
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.GradientFillSettings.FillType
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.GradientFillSettings.AlignWithLayer
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.GradientFillSettings.Dither
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.GradientFillSettings.Reverse
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.GradientFillSettings.Angle
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.GradientFillSettings.HorizontalOffset
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.GradientFillSettings.VerticalOffset
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.GradientFillSettings.Scale
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.GradientFillSettings.Gradient
  • T:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.GradientMapSettings
  • M:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.GradientMapSettings.#ctor
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.GradientMapSettings.Dither
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.GradientMapSettings.Reverse
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.GradientMapSettings.Gradient
  • T:Aspose.PSD.FileFormats.Psd.Layers.Gradient.BaseGradient
  • M:Aspose.PSD.FileFormats.Psd.Layers.Gradient.BaseGradient.#ctor
  • P:Aspose.PSD.FileFormats.Psd.Layers.Gradient.BaseGradient.GradientName
  • P:Aspose.PSD.FileFormats.Psd.Layers.Gradient.BaseGradient.GradientMode
  • T:Aspose.PSD.FileFormats.Psd.Layers.Gradient.NoiseGradient
  • M:Aspose.PSD.FileFormats.Psd.Layers.Gradient.NoiseGradient.#ctor
  • P:Aspose.PSD.FileFormats.Psd.Layers.Gradient.NoiseGradient.RndNumberSeed
  • P:Aspose.PSD.FileFormats.Psd.Layers.Gradient.NoiseGradient.ShowTransparency
  • P:Aspose.PSD.FileFormats.Psd.Layers.Gradient.NoiseGradient.UseVectorColor
  • P:Aspose.PSD.FileFormats.Psd.Layers.Gradient.NoiseGradient.Roughness
  • P:Aspose.PSD.FileFormats.Psd.Layers.Gradient.NoiseGradient.ColorModel
  • P:Aspose.PSD.FileFormats.Psd.Layers.Gradient.NoiseGradient.MinimumColor
  • P:Aspose.PSD.FileFormats.Psd.Layers.Gradient.NoiseGradient.MaximumColor
  • P:Aspose.PSD.FileFormats.Psd.Layers.Gradient.NoiseGradient.ExpansionCount
  • P:Aspose.PSD.FileFormats.Psd.Layers.Gradient.NoiseGradient.GradientMode
  • T:Aspose.PSD.FileFormats.Psd.Layers.Gradient.SolidGradient
  • M:Aspose.PSD.FileFormats.Psd.Layers.Gradient.SolidGradient.#ctor
  • P:Aspose.PSD.FileFormats.Psd.Layers.Gradient.SolidGradient.GradientMode
  • P:Aspose.PSD.FileFormats.Psd.Layers.Gradient.SolidGradient.Interpolation
  • M:Aspose.PSD.FileFormats.Psd.Layers.Gradient.SolidGradient.GenerateLfx2ResourceNodes
  • P:Aspose.PSD.FileFormats.Psd.Layers.Gradient.SolidGradient.ColorPoints
  • P:Aspose.PSD.FileFormats.Psd.Layers.Gradient.SolidGradient.TransparencyPoints
  • P:Aspose.PSD.FileFormats.Psd.Layers.Gradient.SolidGradient.Color
  • M:Aspose.PSD.FileFormats.Psd.Layers.Gradient.SolidGradient.AddColorPoint
  • M:Aspose.PSD.FileFormats.Psd.Layers.Gradient.SolidGradient.AddTransparencyPoint
  • M:Aspose.PSD.FileFormats.Psd.Layers.Gradient.SolidGradient.RemoveTransparencyPoint(Aspose.PSD.FileFormats.Psd.Layers.FillSettings.IGradientTransparencyPoint)
  • M:Aspose.PSD.FileFormats.Psd.Layers.Gradient.SolidGradient.RemoveColorPoint(Aspose.PSD.FileFormats.Psd.Layers.IGradientColorPoint)

Removed APIs:

  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.IGradientFillSettings.GradientName
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BaseFxResource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.GradientFillSettings.Color
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.GradientFillSettings.ColorPoints
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.GradientFillSettings.TransparencyPoints
  • M:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.GradientFillSettings.AddColorPoint
  • M:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.GradientFillSettings.AddTransparencyPoint
  • M:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.GradientFillSettings.RemoveTransparencyPoint(Aspose.PSD.FileFormats.Psd.Layers.FillSettings.IGradientTransparencyPoint)
  • M:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.GradientFillSettings.RemoveColorPoint(Aspose.PSD.FileFormats.Psd.Layers.IGradientColorPoint)
  • T:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Lfx2Resources.LayerEffectsTypes
  • F:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Lfx2Resources.LayerEffectsTypes.DropShadow
  • F:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Lfx2Resources.LayerEffectsTypes.OuterGlow
  • F:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Lfx2Resources.LayerEffectsTypes.PatternOverlay
  • F:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Lfx2Resources.LayerEffectsTypes.GradientOverlay
  • F:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Lfx2Resources.LayerEffectsTypes.ColorOverlay
  • F:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Lfx2Resources.LayerEffectsTypes.Satin
  • F:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Lfx2Resources.LayerEffectsTypes.InnerGlow
  • F:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Lfx2Resources.LayerEffectsTypes.InnerShadow
  • F:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Lfx2Resources.LayerEffectsTypes.Stroke
  • F:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Lfx2Resources.LayerEffectsTypes.BevelEmboss
  • M:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.GradientFillSettings.GenerateLfx2ResourceNodes
  • T:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.NoiseGradientFillSettings
  • M:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.NoiseGradientFillSettings.#ctor
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.NoiseGradientFillSettings.RndNumberSeed
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.NoiseGradientFillSettings.ShowTransparency
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.NoiseGradientFillSettings.UseVectorColor
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.NoiseGradientFillSettings.Roughness
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.NoiseGradientFillSettings.ColorModel
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.NoiseGradientFillSettings.MinimumColor
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.NoiseGradientFillSettings.MaximumColor
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.NoiseGradientFillSettings.ExpansionCount
  • T:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.BaseGradientFillSettings
  • M:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.BaseGradientFillSettings.#ctor
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.BaseGradientFillSettings.GradientType
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.BaseGradientFillSettings.GradientName
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.BaseGradientFillSettings.FillType
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.BaseGradientFillSettings.AlignWithLayer
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.BaseGradientFillSettings.Dither
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.BaseGradientFillSettings.Reverse
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.BaseGradientFillSettings.Angle
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.BaseGradientFillSettings.HorizontalOffset
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.BaseGradientFillSettings.VerticalOffset
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.BaseGradientFillSettings.Scale
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.BaseGradientFillSettings.GradientMode
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.GradientFillSettings.Interpolation
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.IGradientFillSettings.GradientMode

Usage examples:

PSDPYTHON-205. Add support for exporting Layers with Layer Effects to raster formats

        srcFile = "1958.psd"
        outputFile = "out_1958.png"

        loadOpt = PsdLoadOptions()
        loadOpt.load_effects_resource = True
        with PsdImage.load(srcFile, loadOpt) as img:
            psdImage = cast(PsdImage, img)
            layer1 = psdImage.layers[1]

            layerBounds = layer1.bounds
            for effect in layer1.blending_options.effects:
                effectBounds = effect.get_effect_bounds(layer1.bounds, psdImage.global_angle)
                layerBounds = Rectangle.union(layerBounds, effectBounds)

            boundsToExport = Rectangle.empty  # The default value is to save only the layer with effects.
            # boundsToExport = psdImage.bounds  # To save within the PsdImage bounds at the original layer location

            pngOpt = PngOptions()
            pngOpt.color_type = PngColorType.TRUECOLOR_WITH_ALPHA
            layer1.save(
                outputFile,
                pngOpt,
                boundsToExport)

            with open(outputFile, 'rb') as imgStream:
                loadedLayer = Layer(imgStream)
                if loadedLayer.size == layerBounds.size:
                    print("The size is calculated correctly.")

PSDPYTHON-206. Add a property to toggle all layer effects visibility

        srcFile = "2485.psd"
        outputOnFile = "on_2485.png"
        outputOffFile = "off_2485.png"

        loadOpt = PsdLoadOptions()
        loadOpt.load_effects_resource = True
        with PsdImage.load(srcFile, loadOpt) as img:
            psdImage = cast(PsdImage, img)
            psdImage.save(outputOnFile)
            psdImage.layers[1].blending_options.are_effects_enabled = False
            psdImage.save(outputOffFile)

PSDPYTHON-209. Update the structure of Gradient classes. Create base class for Gradeint specific

        inputFile = "StrokeNoise.psd"
        outputFile = "output.psd"

        loadOpt = PsdLoadOptions()
        loadOpt.load_effects_resource = True

        # First pass - load and modify
        with PsdImage.load(inputFile, loadOpt) as img:
            psdImage = cast(PsdImage, img)
            gradientStroke = cast(StrokeEffect, psdImage.layers[0].blending_options.effects[0])
            gradientFillSettings = cast(GradientFillSettings, gradientStroke.fill_settings)

            # Check common gradient fill settings properties
            assert gradientFillSettings is not None
            assert gradientFillSettings.align_with_layer == True
            assert gradientFillSettings.dither == True
            assert gradientFillSettings.reverse == True
            assert gradientFillSettings.angle == 116.0
            assert gradientFillSettings.scale == 122
            assert gradientFillSettings.gradient_type == GradientType.ANGLE

            # Check Noise gradient properties
            noiseGradient = cast(NoiseGradient, gradientFillSettings.gradient)
            assert noiseGradient is not None
            assert noiseGradient.gradient_mode == GradientKind.NOISE
            assert noiseGradient.rnd_number_seed == 2107422935
            assert noiseGradient.show_transparency == False
            assert noiseGradient.use_vector_color == False
            assert noiseGradient.roughness == 2048
            assert noiseGradient.color_model == NoiseColorModel.RGB
            assert noiseGradient.minimum_color.get_as_long() == 0
            assert noiseGradient.maximum_color.get_as_long() == 28147819798528050

            # Change gradient settings
            gradientFillSettings.align_with_layer = False
            gradientFillSettings.dither = False
            gradientFillSettings.reverse = False
            gradientFillSettings.angle = 30
            gradientFillSettings.scale = 80
            gradientFillSettings.gradient_type = GradientType.LINEAR

            solidGradient = SolidGradient()
            solidGradient.interpolation = 2048
            solidGradient.color_points[0].raw_color.components[0].value = 255  # A
            solidGradient.color_points[0].raw_color.components[1].value = 255  # R
            solidGradient.color_points[0].raw_color.components[2].value = 0  # G
            solidGradient.color_points[0].raw_color.components[3].value = 0  # B
            solidGradient.transparency_points[1].opacity = 50
            gradientFillSettings.gradient = solidGradient

            psdImage.save(outputFile)

        # Second pass - verify changes
        with PsdImage.load(outputFile) as img:
            psdImage = cast(PsdImage, img)
            gradientStroke = cast(StrokeEffect, psdImage.layers[0].blending_options.effects[0])
            gradientFillSettings = cast(GradientFillSettings, gradientStroke.fill_settings)

            # Check common gradient fill settings properties
            assert gradientFillSettings is not None
            assert gradientFillSettings.align_with_layer == False
            assert gradientFillSettings.dither == False
            assert gradientFillSettings.reverse == False
            assert gradientFillSettings.angle == 30.0
            assert gradientFillSettings.scale == 80
            assert gradientFillSettings.gradient_type == GradientType.LINEAR

            solidGradient = cast(SolidGradient, gradientFillSettings.gradient)
            assert solidGradient is not None
            assert solidGradient.interpolation == 2048
            assert solidGradient.color_points[0].raw_color.components[0].value == 255
            assert solidGradient.color_points[0].raw_color.components[1].value == 255
            assert solidGradient.color_points[0].raw_color.components[2].value == 0
            assert solidGradient.color_points[0].raw_color.components[3].value == 0
            assert solidGradient.transparency_points[1].opacity == 50.0

PSDPYTHON-212. Make correct initializing of Layers with Linked Layers Registry

        files = ["add.jpg", "add.psd"]

        for i in range(len(files)):
            sourceFile = "input.psd"
            addFile = files[i]
            outputFile = "output.psd"

            with PsdImage.load(sourceFile) as img:
                psdImage = cast(PsdImage, img)
                with open(addFile, 'rb') as stream:
                    with SmartObjectLayer(stream) as smartLayer:
                        psdImage.add_layer(smartLayer)

                        layer1 = psdImage.layers[1]
                        layer2 = psdImage.layers[2]

                        size1Before = layer1.size
                        size2Before = layer2.size

                        psdImage.linked_layers_manager.link_layers([layer1, layer2])

                        layer1.resize(100, 100)

                        size1After = layer1.size
                        size2After = layer2.size

                        assert size1Before != size1After
                        assert size2Before != size2After
                        psdImage.save(outputFile)

PSDPYTHON-219. Inaccurate rendering of Smart Object Layer

		sourceFile = "test.psd"
        newContent = "newImage.png"
        export = "export.png"

        loadOpt = PsdLoadOptions()
        loadOpt.allow_warp_repaint = True

        with PsdImage.load(sourceFile, loadOpt) as img:
            psdImage = cast(PsdImage, img)
            with Image.load(newContent) as replaceImage:
                layers = psdImage.layers
                for i in range(len(layers)):
                    if isinstance(layers[i], SmartObjectLayer):
                        smart_layer = cast(SmartObjectLayer, layers[i])
                        smart_layer.replace_contents(replaceImage)
                        smart_layer.update_modified_content()
                        break

            pngOpt = PngOptions()
            pngOpt.color_type = PngColorType.TRUECOLOR_WITH_ALPHA
            psdImage.save(export, pngOpt)

PSDPYTHON-220. Error when applying deformation due to invalid ‘Processing Area’ value is 2

        sourceFile = "Warping.psd"
        outputFile = "export2.png"

        loadOpt = PsdLoadOptions()
        loadOpt.load_effects_resource = True
        loadOpt.allow_warp_repaint = True

        with PsdImage.load(sourceFile, loadOpt) as img:
            psdImage = cast(PsdImage, img)

            # Get WarpSettings from Smart Layer
            smart_layer = cast(SmartObjectLayer, psdImage.layers[1])
            warp_settings = smart_layer.warp_settings

            # Set size of warp processing area
            warp_settings.processing_area = 2
            smart_layer.warp_settings = warp_settings

            # Save with PNG options
            pngOpt = PngOptions()
            pngOpt.color_type = PngColorType.TRUECOLOR_WITH_ALPHA
            psdImage.save(outputFile, pngOpt)