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.
If you experience errors, when you try to download a file, make sure your network policies (enforced by your company or ISP) allow downloading ZIP and/or MSI files.
Key | Summary | Category |
---|
PSDPYTHON-205 | Add support for exporting Layers with Layer Effects to raster formats | Feature |
PSDPYTHON-206 | Add a property to toggle all layer effects visibility | Feature |
PSDPYTHON-209 | Update the structure of Gradient classes. Create base class for Gradeint specific | Enhancement |
PSDPYTHON-212 | Make correct initializing of Layers with Linked Layers Registry | Bug |
PSDPYTHON-219 | Inaccurate rendering of Smart Object Layer | Bug |
PSDPYTHON-220 | Error when applying deformation due to invalid ‘Processing Area’ value is 2 | Bug |
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)