Note sulla versione di rilascio di Aspose.PSD per .NET 21.2

Chiave Sommario Categoria
PSDNET-404 Supporto di vogkResource Funzionalità
PSDNET-809 Confine del livello di oggetto intelligente non corretto quando sostituiamo i contenuti dell’oggetto intelligente con il file che ha dimensioni e risoluzioni diverse Funzionalità
PSDNET-752 Errore nella conversione del livello FillLayer in SmartObjectLayer Bug
PSDNET-778 Gruppo di livelli che aggiunge nuovi livelli in ordine invertito Bug
PSDNET-790 L’importazione dell’immagine nel livello SmartObject porta alla corruzione del PSD Bug
PSDNET-810 Eccezione durante il caricamento dei file Bug
PSDNET-824 risorsa vogk non corretta dopo il caricamento e il salvataggio dell’immagine PSD con livelli di forma e percorsi vettoriali Bug
PSDNET-827 Eccezione durante il caricamento delle strutture ReferenceStructure ed EnumeratedReferenceStructure Bug

Cambiamenti nell’API pubblica

API aggiunte:

  • M:Aspose.PSD.FileFormats.Core.VectorPaths.VectorShapeOriginSettings.#ctor
  • P:Aspose.PSD.FileFormats.Core.VectorPaths.VectorShapeOriginSettings.OriginType
  • P:Aspose.PSD.FileFormats.Core.VectorPaths.VectorShapeOriginSettings.OriginResolution
  • P:Aspose.PSD.FileFormats.Core.VectorPaths.VectorShapeOriginSettings.OriginShapeBox
  • P:Aspose.PSD.FileFormats.Core.VectorPaths.VectorShapeOriginSettings.OriginRadiiRectangle
  • P:Aspose.PSD.FileFormats.Core.VectorPaths.VectorShapeOriginSettings.IsShapeInvalidatedPresent
  • P:Aspose.PSD.FileFormats.Core.VectorPaths.VectorShapeOriginSettings.IsOriginIndexPresent
  • P:Aspose.PSD.FileFormats.Core.VectorPaths.VectorShapeOriginSettings.IsOriginTypePresent
  • P:Aspose.PSD.FileFormats.Core.VectorPaths.VectorShapeOriginSettings.IsOriginResolutionPresent
  • P:Aspose.PSD.FileFormats.Core.VectorPaths.VectorShapeOriginSettings.IsOriginRadiiRectanglePresent
  • P:Aspose.PSD.FileFormats.Core.VectorPaths.VectorShapeOriginSettings.IsOriginShapeBBoxPresent
  • T:Aspose.PSD.FileFormats.Core.VectorPaths.VectorShapeBoundingBox
  • M:Aspose.PSD.FileFormats.Core.VectorPaths.VectorShapeBoundingBox.#ctor
  • P:Aspose.PSD.FileFormats.Core.VectorPaths.VectorShapeBoundingBox.Left
  • P:Aspose.PSD.FileFormats.Core.VectorPaths.VectorShapeBoundingBox.Top
  • P:Aspose.PSD.FileFormats.Core.VectorPaths.VectorShapeBoundingBox.Right
  • P:Aspose.PSD.FileFormats.Core.VectorPaths.VectorShapeBoundingBox.Bottom
  • P:Aspose.PSD.FileFormats.Core.VectorPaths.VectorShapeBoundingBox.QuadVersion
  • P:Aspose.PSD.FileFormats.Core.VectorPaths.VectorShapeBoundingBox.Bounds
  • T:Aspose.PSD.FileFormats.Core.VectorPaths.VectorShapeRadiiRectangle
  • M:Aspose.PSD.FileFormats.Core.VectorPaths.VectorShapeRadiiRectangle.#ctor
  • P:Aspose.PSD.FileFormats.Core.VectorPaths.VectorShapeRadiiRectangle.TopLeft
  • P:Aspose.PSD.FileFormats.Core.VectorPaths.VectorShapeRadiiRectangle.TopRight
  • P:Aspose.PSD.FileFormats.Core.VectorPaths.VectorShapeRadiiRectangle.BottomRight
  • P:Aspose.PSD.FileFormats.Core.VectorPaths.VectorShapeRadiiRectangle.BottomLeft
  • P:Aspose.PSD.FileFormats.Core.VectorPaths.VectorShapeRadiiRectangle.QuadVersion
  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.ClassID.#ctor(System.String,System.Boolean)
  • M:Aspose.PSD.FileFormats.Psd.Layers.SmartObjects.SmartObjectLayer.ReplaceContents(Aspose.PSD.Image,Aspose.PSD.ResolutionSetting)
  • M:Aspose.PSD.FileFormats.Psd.Layers.SmartObjects.SmartObjectLayer.ReplaceContents(System.String,Aspose.PSD.ResolutionSetting)

API rimosse:

  • Nessuna

Esempi d’uso:

PSDNET-404. Supporto di vogkResource

            // Questo esempio dimostra che il caricamento e il salvataggio dell'immagine PSD con livelli di forma e percorsi vettoriali funziona correttamente.
            string dataDir = "PSDNET404_1";
            string sourcePath = Path.Combine(dataDir, "vectorShapes.psd");
            string outputFilePath = Path.Combine(dataDir, "output_vectorShapes.psd");
            using (PsdImage image = (PsdImage)Image.Load(sourcePath))
            {
                var resource = GetVogkResource(image);
                AssertAreEqual(1, resource.ShapeOriginSettings.Length);
                var setting = resource.ShapeOriginSettings[0];
                AssertAreEqual(true, setting.IsOriginIndexPresent);
                AssertAreEqual(false, setting.IsShapeInvalidatedPresent);
                AssertAreEqual(true, setting.IsOriginResolutionPresent);
                AssertAreEqual(true, setting.IsOriginTypePresent);
                AssertAreEqual(true, setting.IsOriginShapeBBoxPresent);
                AssertAreEqual(false, setting.IsOriginRadiiRectanglePresent);
                AssertAreEqual(0, setting.OriginIndex);
                var originalSetting = resource.ShapeOriginSettings[0];
                originalSetting.IsShapeInvalidated = true;
                resource.ShapeOriginSettings = new[]
                {
                    originalSetting,
                    new VectorShapeOriginSettings()
                    {
                        OriginIndex = 1,
                        OriginResolution = 144,
                        OriginType = 4,
                        OriginShapeBox = new VectorShapeBoundingBox()
                        {
                            Bounds = Rectangle.FromLeftTopRightBottom(10, 15, 40, 70)
                        }
                    },
                    new VectorShapeOriginSettings()
                    {
                        OriginIndex = 2,
                        OriginResolution = 301,
                        OriginType = 5,
                        OriginRadiiRectangle = new VectorShapeRadiiRectangle()
                        {
                            TopLeft = 2,
                            TopRight = 6,
                            BottomLeft = 23,
                            BottomRight = 42,
                            QuadVersion = 1
                        }
                    }
                };

                image.Save(outputFilePath, new PsdOptions());
            }

            using (PsdImage image = (PsdImage)Image.Load(outputFilePath))
            {
                var resource = GetVogkResource(image);
                AssertAreEqual(3, resource.ShapeOriginSettings.Length);

                var setting = resource.ShapeOriginSettings[0];
                AssertAreEqual(true, setting.IsOriginIndexPresent);
                AssertAreEqual(true, setting.IsShapeInvalidatedPresent);
                AssertAreEqual(true, setting.IsOriginResolutionPresent);
                AssertAreEqual(true, setting.IsOriginTypePresent);
                AssertAreEqual(true, setting.IsOriginShapeBBoxPresent);
                AssertAreEqual(false, setting.IsOriginRadiiRectanglePresent);
                AssertAreEqual(0, setting.OriginIndex);
                AssertAreEqual(true, setting.IsShapeInvalidated);

                setting = resource.ShapeOriginSettings[1];
                AssertAreEqual(true, setting.IsOriginIndexPresent);
                AssertAreEqual(false, setting.IsShapeInvalidatedPresent);
                AssertAreEqual(true, setting.IsOriginResolutionPresent);
                AssertAreEqual(true, setting.IsOriginTypePresent);
                AssertAreEqual(true, setting.IsOriginShapeBBoxPresent);
                AssertAreEqual(false, setting.IsOriginRadiiRectanglePresent);
                AssertAreEqual(1, setting.OriginIndex);
                AssertAreEqual(144.0, setting.OriginResolution);
                AssertAreEqual(4, setting.OriginType);
                AssertAreEqual(Rectangle.FromLeftTopRightBottom(10, 15, 40, 70), setting.OriginShapeBox.Bounds);

                setting = resource.ShapeOriginSettings[2];
                AssertAreEqual(true, setting.IsOriginIndexPresent);
                AssertAreEqual(false, setting.IsShapeInvalidatedPresent);
                AssertAreEqual(true, setting.IsOriginResolutionPresent);
                AssertAreEqual(true, setting.IsOriginTypePresent);
                AssertAreEqual(false, setting.IsOriginShapeBBoxPresent);
                AssertAreEqual(true, setting.IsOriginRadiiRectanglePresent);
                AssertAreEqual(2, setting.OriginIndex);
                AssertAreEqual(301.0, setting.OriginResolution);
                AssertAreEqual(5, setting.OriginType);
                AssertAreEqual(2.0, setting.OriginRadiiRectangle.TopLeft);
                AssertAreEqual(6.0, setting.OriginRadiiRectangle.TopRight);
                AssertAreEqual(23.0, setting.OriginRadiiRectangle.BottomLeft);
                AssertAreEqual(42.0, setting.OriginRadiiRectangle.BottomRight);
                AssertAreEqual(1, setting.OriginRadiiRectangle.QuadVersion);
            }

            VogkResource GetVogkResource(PsdImage image)
            {
                var layer = image.Layers[1];

                VogkResource resource = null;
                var resources = layer.Resources;
                for (int i = 0; i < resources.Length; i++)
                {
                    if (resources[i] is VogkResource)
                    {
                        resource = (VogkResource)resources[i];
                        break;
                    }
                }

                if (resource == null)
                {
                    throw new Exception("Risorsa Vogk non trovata.");
                }

                return resource;
            }

            void AssertAreEqual(object expected, object actual, string message = null)
            {
                if (!object.Equals(expected, actual))
                {
                    throw new FormatException(message ?? "Gli oggetti non sono uguali.");
                }
            }

PSDNET-752. Errore nella conversione del livello FillLayer in SmartObjectLayer

            string sourceFilePath = "effectlost.psd";
            string outputFilePath = "output.psd";

            using (PsdImage psdImage = (PsdImage)Aspose.PSD.Image.Load(sourceFilePath))
            {
                SmartObjectLayer smartObject = psdImage.SmartObjectProvider.ConvertToSmartObject(0);

                psdImage.Save(outputFilePath);
            }

PSDNET-778. Gruppo di livelli che aggiunge nuovi livelli in ordine invertito

            void AreEqual(string expected, string actual)
            {
                if (!object.Equals(expected, actual))
                {
                    throw new Exception("I valori non sono uguali.");
                }
            }

            string outputFile = "output.psd";

            PsdOptions psdOptions = new PsdOptions();
            psdOptions.Source = new StreamSource(new MemoryStream());
            using (PsdImage psdImage = (PsdImage)Image.Create(psdOptions, 100, 100))
            {
                LayerGroup layerGroup = psdImage.AddLayerGroup("Cartella", 0, true);
                layerGroup.AddLayer(new Layer() { DisplayName = "Livello 1" });
                layerGroup.AddLayer(new Layer() { DisplayName = "Livello 2" });

                AreEqual("Livello 1", layerGroup.Layers[0].DisplayName);
                AreEqual("Livello 2", layerGroup.Layers[1].DisplayName);

                psdImage.Save(outputFile);
            }

PSDNET-790. Importazione dell’immagine nel livello SmartObject che porta alla corruzione del PSD

            const string cartellaBase = "PSDNET790_1\\";
            const string cartellaOutput = cartellaBase + "output\\";

            // Test che il livello, importato da un'immagine, viene convertito in livello di oggetto intelligente e il file PSD salvato è corretto.
            using (PsdImage image = (PsdImage)Image.Load(cartellaBase + @"testLivello1.psd"))
            {

                string percorsoLivello = cartellaBase + @"immagine.jpg";
                string percorsoFileOutput = cartellaOutput + "testLivello2.psd";
                string percorsoPngOutput = Path.ChangeExtension(percorsoFileOutput, ".png");
                using (var stream = new FileStream(percorsoLivello, FileMode.Open))
                {
                    Layer livello = null;
                    try
                    {
                        livello = new Layer(stream);
                        image.AddLayer(livello);
                    }
                    catch (Exception)
                    {
                        if (livello != null)
                        {
                            livello.Dispose();
                        }

                        throw;
                    }

                    var livello2 = image.Layers[2];
                    var livello3 = image.SmartObjectProvider.ConvertToSmartObject(image.Layers.Length - 1);
                    var confini = livello3.Bounds;
                    livello3.Left = (image.Width - livello3.Width) / 2;
                    livello3.Top = livello2.Top;
                    livello3.Right = livello3.Left + confini.Width;
                    livello3.Bottom = livello3.Top + confini.Height;

                    image.Save(percorsoFileOutput);
                    image.Save(percorsoPngOutput, new PngOptions() { ColorType = PngColorType.TruecolorWithAlpha });
                }
            }

PSDNET-809. Confine del livello di oggetto intelligente non corretto quando sostituiamo i contenuti dell’oggetto intelligente con il file che ha dimensioni e risoluzioni diverse

            // Questo esempio dimostra che il metodo ReplaceContents funziona correttamente quando il nuovo file di contenuto ha una diversa risoluzione.
            const string cartellaBase = "PSDNET809_1\\";
            const string cartellaOutput = cartellaBase + "output\\";
            const string fileName = "CommonPsb.psd";
            const string filePath = cartellaBase + fileName; // immagine PSD originale
            const string percorsoNuovoContenuto = cartellaBase + "immagine.jpg"; // il nuovo file di contenuto per l'oggetto intelligente
            const string percorsoOutputFile = cartellaOutput + "ChangedPsd";
            const string percorsoPngOutput = percorsoOutputFile + ".png"; // il file di output PNG
            const string percorsoPsdOutput = percorsoOutputFile + ".psd"; // il file di output PSD
            using (PsdImage psd = (PsdImage)Image.Load(filePath))
            {
                for (int i = 0; i < psd.Layers.Length; i++)
                {
                    var livello = psd.Layers[i];
                    SmartObjectLayer livelloOggettoIntelligente = livello as SmartObjectLayer;
                    if (livelloOggettoIntelligente != null)
                    {
                        livelloOggettoIntelligente.ReplaceContents(percorsoNuovoContenuto);

                        psd.Save(percorsoPsdOutput);
                        psd.Save(percorsoPngOutput, new PngOptions() { ColorType = Aspose.PSD.FileFormats.Png.PngColorType.TruecolorWithAlpha });
                    }
                }
            }

PSDNET-810. Eccezione durante il caricamento dei file

            string fileTest1 = "volto.psd";
            string fileTest2 = "GrandeFile2.psd";

            using (var immaginePsd = (PsdImage)Image.Load(fileTest1))
            {
                // File caricato correttamente
            }

            using (var immaginePsd = (PsdImage)Image.Load(fileTest2))
            {
                // File caricato correttamente
            }

PSDNET-824. risorsa vogk non corretta dopo il caricamento e il salvataggio dell’immagine PSD con livelli di forma e percorsi vettoriali

            // Questo esempio dimostra che il caricamento e il salvataggio dell'immagine PSD con livelli di forma e percorsi vettoriali funziona correttamente e le proprietà Live Shape sono conservate.
            string dataDir = "PSDNET824_1\\";
            string srcFile = dataDir + "vectorShapes.psd";
            string outputFilePath = dataDir + @"\output\vectorShapes.psd";
            using (PsdImage psd = (PsdImage)Image.Load(srcFile))
            {
                psd.Save(outputFilePath);
            }

            // Verifica che le proprietà Live Shape siano presenti nel file PSD di output in Adobe® Photoshop®.

PSDNET-827. Eccezione durante il caricamento delle strutture ReferenceStructure ed EnumeratedReferenceStructure

            string srcFile = "fileSorgente.psd";
            string output = "output.psd";

            using (var immaginePsd = (PsdImage)Image.Load(srcFile))
            {
                // File caricato correttamente

                SmartObjectLayer livello = (SmartObjectLayer)immaginePsd.Layers[1];
                SoLdResource risorsa = (SoLdResource)livello.Resources[9];

                DescriptorStructure struttura1 = (DescriptorStructure)risorsa.Items[15];
                ListStructure struttura2 = (ListStructure)struttura1.Structures[5];
                DescriptorStructure struttura3 = (DescriptorStructure)struttura2.Types[1];
                DescriptorStructure struttura4 = (DescriptorStructure)struttura3.Structures[6];
                ListStructure struttura5 = (ListStructure)struttura4.Structures[1];
                DescriptorStructure struttura6 = (DescriptorStructure)struttura5.Types[0];

                // Caricamento delle strutture ReferenceStructure ed EnumeratedReferenceStructure
                ReferenceStructure strutturaDiRiferimento = (ReferenceStructure)struttura6.Structures[0];
                EnumeratedReferenceStructure strutturaDiRiferimentoEnumerata = (EnumeratedReferenceStructure)strutturaDiRiferimento.Items[0];

                // Le strutture ReferenceStructure ed EnumeratedReferenceStructure sono state caricate correttamente

                immagine