Aspose.PSD for Python via .NET 24.12 - Release Notes

Key Summary Category
PSDPYTHON-143 [AI Format] Rework Compound Paths to work through APS Enhancement
PSDPYTHON-137 Implement correct handling of PSD file with Shape layer and having vector and raster masks Feature
PSDPYTHON-139 [AI Format] Implement Gradient Shading (type 7) Feature
PSDPYTHON-141 [AI Format] Implement blending support Feature
PSDPYTHON-145 [AI Format] Add AiImage property for number of pages Feature
PSDPYTHON-142 [AI Format] Implement Axial Shading (type 2) Feature
PSDPYTHON-136 Fix rendering of Shapes in PSD files created in an old version of the PS Bug
PSDPYTHON-144 [AI Format] Incorrect rendering of AI file Bug
PSDPYTHON-146 The GlobalResources property is null when PSD Image is just created that leads to errors with SmartObjects Bug
PSDPYTHON-147 [Ai Format] Add handling of Layers data defined as DictionaryObject in Properties object of the Page Bug

Public API Changes

Added APIs:

  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerResource.#ctor(System.Int32,System.Int32)
  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.VectorPathDataResource.#ctor(System.Int32)
  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.VectorPathDataResource.#ctor(System.Int32,System.Byte[])
  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.AdjustmentLayerResource.#ctor(System.Int32,System.Int32)
  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BooleanResource.#ctor(System.Int32,System.Boolean)
  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BooleanResource.#ctor(System.Int32,System.Byte[])
  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.LrXxResource.#ctor(System.Int32)
  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.FillLayerResource.#ctor(System.Int32,System.Int32)
  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.GrdmResource.#ctor(System.Int32)
  • P:Aspose.PSD.FileFormats.Ai.AiImage.PageCount

Removed APIs:

  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerResource.#ctor
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.MlstResource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.MlstResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.MlstResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BaseArtboardInfoResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.LyvrResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PtFlResource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PtFlResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PtFlResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.VogkResource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.VogkResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.VogkResource.PsdVersion
  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.VectorPathDataResource.#ctor
  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.VectorPathDataResource.#ctor(System.Byte[])
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.VectorPathDataResource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.VectorPathDataResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.VsmsResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.VmskResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.CmlsResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.CmlsResource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.CmlsResource.PsdVersion
  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.AdjustmentLayerResource.#ctor
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.AdjustmentLayerResource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlncResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlncResource.PsdVersion
  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BooleanResource.#ctor(System.Boolean)
  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BooleanResource.#ctor(System.Byte[])
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BooleanResource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BooleanResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BritResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BritResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.CgEdResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.CgEdResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.IopaResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.IopaResource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.IopaResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.CustResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.CustResource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.CustResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.ExpaResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.ExpaResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.FxrpResource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.FxrpResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.FxrpResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Hue2Resource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Hue2Resource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.VibAResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.VibAResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.NvrtResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.NvrtResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.LclrResource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.LclrResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.LclrResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.KnkoResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.InfxResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.LayerSectionResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.LayerSectionResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.LayerSectionResource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.LevlResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.LevlResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.MixrResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.MixrResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PhflResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PhflResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PhflResourceVersion2.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PhflResourceVersion2.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PhflResourceVersion3.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PhflResourceVersion3.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Lfx2Resource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Lfx2Resource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Lfx2Resource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.ShmdResource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.ShmdResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.ShmdResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.LnsrResource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.LnsrResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.LnsrResource.PsdVersion
  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.LrXxResource.#ctor
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.LrXxResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.LrXxResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.LrXxResource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.LspfResource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.LspfResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.LspfResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.LuniResource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.LuniResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.LuniResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.ClblResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.LyidResource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.LyidResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.LyidResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Txt2Resource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Txt2Resource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Txt2Resource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.TypeToolInfo6Resource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.TypeToolInfo6Resource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.TypeToolInfo6Resource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.TypeToolInfoResource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.TypeToolInfoResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.TypeToolInfoResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.UnknownResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.UnknownResource.PsdVersion
  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.FillLayerResource.#ctor
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.FillLayerResource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.GdFlResource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.GdFlResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.GdFlResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.SoCoResource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.SoCoResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.SoCoResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.CurvResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.CurvResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlwhResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.BlwhResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.LinkResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.LinkResource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Lnk2Resource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.LnkeResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Lnk3Resource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PlacedResource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.SmartObjectResource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.SmartObjectResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PlLdResource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PlLdResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PlLdResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.SoLdResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.FXidResource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.FXidResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.FXidResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.StrokeResources.VstkResource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.StrokeResources.VstkResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.StrokeResources.VstkResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.StrokeResources.VscgResource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.StrokeResources.VscgResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.StrokeResources.VscgResource.PsdVersion
  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.GrdmResource.#ctor
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.GrdmResource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.GrdmResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.GrdmResource.PsdVersion
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PostResource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PostResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PostResource.PsdVersion
  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.GrdmResource.SetPsdVersion(System.UInt16)
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.LmskResource.Signature
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.LmskResource.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.LmskResource.PsdVersion

Usage examples:

PSDPYTHON-143. [AI Format] Rework Compound Paths to work through APS

        source_file = self.GetFileInBaseFolder("page-3.ai")
        output_file = self.GetFileInOutputFolder("page-3.png")

        with AiImage.load(source_file) as img:
            image = cast(AiImage, img)
            image.save(output_file, PngOptions())

PSDPYTHON-137. Implement correct handling of PSD file with Shape layer and having vector and raster masks

        input_file = self.GetFileInBaseFolder("mask_rastr_vector.psd")
        output_file = self.GetFileInOutputFolder("output_mask_rastr_vector.png")

        with PsdImage.load(input_file, None) as img:
            image = cast(PsdImage, img)
            image.save(output_file, PngOptions())

PSDPYTHON-139. [AI Format] Implement Gradient Shading (type 7)

        source_file = self.GetFileInBaseFolder("2214.ai")
        output_file = self.GetFileInOutputFolder("2214.png")

        with AiImage.load(source_file) as img:
            image = cast(AiImage, img)
            image.save(output_file, PngOptions())

PSDPYTHON-141. [AI Format] Implement blending support

        source_file = self.GetFileInBaseFolder("2238.ai")
        output_file = self.GetFileInOutputFolder("2238.png")   

        with AiImage.load(source_file) as img:
            image = cast(AiImage, img)
            image.save(output_file, PngOptions())

PSDPYTHON-145. [AI Format] Add AiImage property for number of pages

		source_file = self.GetFileInBaseFolder("2241.ai")

        output_files = []
        for i in range(3):
            output_files.append(self.GetFileInOutputFolder(f"2241_pageNumber_{str(i)}.png"))

        with AiImage.load(source_file) as img:
            image = cast(AiImage, img)
            assert image.page_count == 3

            for i in range(image.page_count):
                image.active_page_index = i
                image.save(output_files[i], PngOptions())

PSDPYTHON-142. [AI Format] Implement Axial Shading (type 2)

        source_file = self.GetFileInBaseFolder("2249.ai")
        output_file = self.GetFileInOutputFolder("2249.png")

        with AiImage.load(source_file) as img:
            image = cast(AiImage, img)
            image.save(output_file, PngOptions())

PSDPYTHON-136. Fix rendering of Shapes in PSD files created in an old version of the PS

        input_file_stroke = self.GetFileInBaseFolder("Shape_Stroke.psd")
        output_file_stroke = self.GetFileInOutputFolder("output_Shape_Stroke.png")

        input_file_effects = self.GetFileInBaseFolder("Shape_Effects_PS2021.psd")
        output_file_effects = self.GetFileInOutputFolder("output_Shape_Effects_PS2021.png")

        # Test that there is no cropping of outside part of stroke in old psd format files.
        with PsdImage.load(input_file_stroke) as img:
            image = cast(PsdImage, img)
            for layer in image.layers:
                if  is_assignable(layer, ShapeLayer):
                    # Shape layer is repainted in this test
                    shape_layer = cast(ShapeLayer, layer)
                    shape_layer.update()

            image.save(output_file_stroke, PngOptions())

        opt = PsdLoadOptions()
        opt.load_effects_resource = True
        opt.allow_warp_repaint = True
        # Test effects rendering on Shape layers.
        with PsdImage.load(input_file_effects, opt) as img:
            image = cast(PsdImage, img)
            # Shape layer is not repainted in this test
            image.save(output_file_effects, PngOptions())

PSDPYTHON-144. [AI Format] Incorrect rendering of AI file

        source_file = self.GetFileInBaseFolder("Input1.ai")
        output_file = self.GetFileInOutputFolder("Input1.png")

        with AiImage.load(source_file) as img:
            image = cast(AiImage, img)
            image.save(output_file, PngOptions())

PSDPYTHON-146. The GlobalResources property is null when PSD Image is just created that leads to errors with SmartObjects

        with PsdImage(300, 100) as psdImage:
            assert hasattr(psdImage, 'global_layer_resources')
            assert psdImage.global_layer_resources is not None

PSDPYTHON-147. [Ai Format] Add handling of Layers data defined as DictionaryObject in Properties object of the Page

       
        source_file = self.GetFileInBaseFolder("Input_2.ai")
        output_file = self.GetFileInOutputFolder("output.png")

        with AiImage.load(source_file) as img:
            image = cast(AiImage, img)
            image.save(output_file, PngOptions())