Aspose.PSD за .NET 21.2 - Бележки за изданието
Contents
 [
      
        Hide
      ]
    
Тази страница съдържа бележки за изданието на Aspose.PSD за .NET 21.2
| Ключ | Резюме | Категория | 
|---|---|---|
| PSDNET-404 | Поддръжка на vogkResource | Функционалност | 
| PSDNET-809 | Неправилни граници на умния обект при замяна на съдържанието на умния обект с файл, който има различни размери и резолюции | Функционалност | 
| PSDNET-752 | Грешка: не може да се конвертира FillLayer в SmartObjectLayer | Проблем | 
| PSDNET-778 | Добавяне на нови слоеве в група слоеве в обратен ред | Проблем | 
| PSDNET-790 | Импортирането на изображение в слой SmartObject води до повреда в PSD файла | Проблем | 
| PSDNET-810 | Изключение при зареждане на файловете | Проблем | 
| PSDNET-824 | Неправилен vogk ресурс след зареждане и запазване на PSD изображението с формни слоеве и векторни пътища | Проблем | 
| PSDNET-827 | Изключение при зареждане на структурите ReferenceStructure и EnumeratedReferenceStructure | Проблем | 
Промени в публичния API
Добавени API:
- 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:
- Няма
 
Примери за използване:
PSDNET-404. Поддръжка на vogkResource
            // Този пример демонстрира, че зареждането и запазването на PSD изображението с формни слоеве и векторни пътища работи коректно.
            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("VogkResource not found.");
                }
                return resource;
            }
            void AssertAreEqual(object expected, object actual, string ?? "Обектите не са равни.")
            {
                if (!object.Equals(expected, actual))
                {
                    throw new FormatException(message ?? "Обектите не са равни.");
                }
            }
PSDNET-752. Грешка: не може да се конвертира FillLayer в 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. Добавяне на нови слоеве в група слоеве в обратен ред
            void AreEqual(string expected, string actual)
            {
                if (!object.Equals(expected, actual))
                {
                    throw new Exception("Стойностите не са равни.");
                }
            }
            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("Папка", 0, true);
                layerGroup.AddLayer(new Layer() { Име = "Слой 1" });
                layerGroup.AddLayer(new Layer() { Име = "Слой 2" });
                AreEqual("Слой 1", layerGroup.Layers[0].Име);
                AreEqual("Слой 2", layerGroup.Layers[1].Име);
                psdImage.Save(outputFile);
            }
PSDNET-790. Импортирането на изображение в слой SmartObject води до повреда в PSD файла
            const string baseFolder = "PSDNET790_1\\";
            const string outputFolder = baseFolder + "output\\";
            // Тества, че слоя, импортиран от изображение, се преобразува в слой на умния обект и записаният PSD файл е коректен.
            using (PsdImage image = (PsdImage)Image.Load(baseFolder + @"layerTest1.psd"))
            {
                string layerFilePath = baseFolder + @"picture.jpg";
                string outputFilePath = outputFolder + "layerTest2.psd";
                string outputPngFilePath = Path.ChangeExtension(outputFilePath, ".png");
                using (var stream = new FileStream(layerFilePath, FileMode.Open))
                {
                    Layer layer = null;
                    try
                    {
                        layer = new Layer(stream);
                        image.AddLayer(layer);
                    }
                    catch (Exception)
                    {
                        if (layer != null)
                        {
                            layer.Dispose();
                        }
                        throw;
                    }
                    var layer2 = image.Layers[2];
                    var layer3 = image.SmartObjectProvider.ConvertToSmartObject(image.Layers.Length - 1);
                    var bounds = layer3.Bounds;
                    layer3.Left = (image.Width - layer3.Width) / 2;
                    layer3.Top = layer2.Top;
                    layer3.Right = layer3.Left + bounds.Width;
                    layer3.Bottom = layer3.Top + bounds.Height;
                    image.Save(outputFilePath);
                    image.Save(outputPngFilePath, new PngOptions() { ColorType = PngColorType.TruecolorWithAlpha });
                }
            }
PSDNET-809. Неправилни граници на умния обект при замяна на съдържанието на умния обект с файл, който има различни размери и резолюции
            // Този пример демонстрира, че методът ReplaceContents работи правилно, когато новият файл съдържание има различна резолюция.
            const string baseFolder = "PSDNET809_1\\";
            const string outputFolder = baseFolder + "output\\";
            const string fileName = "CommonPsb.psd";
            const string filePath = baseFolder + fileName; // оригинален PSD файл
            const string newContentPath = baseFolder + "image.jpg"; // новият файл съдържание за умния обект
            const string outputFilePath = outputFolder + "ChangedPsd";
            const string pngOutputPath = outputFilePath + ".png"; // изходният PNG файл
            const string psdOutputPath = outputFilePath + ".psd"; // изходният PSD файл
            using (PsdImage psd = (PsdImage)Image.Load(filePath))
            {
                for (int i = 0; i < psd.Layers.Length; i++)
                {
                    var layer = psd.Layers[i];
                    SmartObjectLayer smartObjectLayer = layer as SmartObjectLayer;
                    if (smartObjectLayer != null)
                    {
                        smartObjectLayer.ReplaceContents(newContentPath);
                        psd.Save(psdOutputPath);
                        psd.Save(pngOutputPath, new PngOptions() { ColorType = Aspose.PSD.FileFormats.Png.PngColorType.TruecolorWithAlpha });
                    }
                }
            }
PSDNET-810. Изключение при зареждане на файловете
            string testFile1 = "face.psd";
            string testFile2 = "BigFile2.psd";
            using (var psdImage = (PsdImage)Image.Load(testFile1))
            {
                // Файлът е успешно зареден
            }
            using (var psdImage = (PsdImage)Image.Load(testFile2))
            {
                // Файлът е успешно зареден
            }
PSDNET-824. Неправилен vogk ресурс след зареждане и запазване на PSD изображението с формни слоеве и векторни пътища
            // Този пример демонстрира, че зареждането и запазването на PSD изображението с формни слоеве и векторни пътища работи правилно и живите свойства на формата са запазени.
            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);
            }
            // Проверете дали живите свойства на формата са присъстват в изходния PSD файл в Adobe® Photoshop®.
PSDNET-827. Изключение при зареждане на структурите ReferenceStructure и EnumeratedReferenceStructure
            string srcFile = "sourceFile.psd";
            string output = "output.psd";
            using (var psdImage = (PsdImage)Image.Load(srcFile))
            {
                // Файлът е успешно зареден
                SmartObjectLayer layer = (SmartObjectLayer)psdImage.Layers[1];
                SoLdResource resource = (SoLdResource)layer.Resources[9];
                DescriptorStructure struct1 = (DescriptorStructure)resource.Items[15];
                ListStructure struct2 = (ListStructure)struct1.Structures[5];
                DescriptorStructure struct3 = (DescriptorStructure<div class="highlight"><pre class="chroma"><code class="language-csharp" data-lang="csharp"><span class="m">2</span> <span class="p">=</span> <span class="k">new</span> <span class="n">ListStructure</span><span class="p">)</span><span class="n">struct2</span><span class="p">.</span><span class="n">Types</span><span class="p">[</span><span class="m">1</span><span class="p">];</span>
                <span class="n">DescriptorStructure</span> <span class="n">struct4</span> <span class="p">=</span> <span class="p">(</span><span class="n">DescriptorStructure</span><span class="p">)</span><span class="n">struct3</span><span class="p">.</span><span class="n">Structures</span><span class="p">[</span><span class="m">6</span><span class="p">];</span>
                <span class="n">ListStructure</span> <span class="n">struct5</span> <span class="p">=</span> <span class="p">(</span><span class="n">ListStructure</span><span class="p">)</span><span class="n">struct4</span><span class="p">.</span><span class="n">Structures</span><span class="p">[</span><span class="m">1</span><span class="p">];</span>
                <span class="n">DescriptorStructure</span> <span class="n">struct6</span> <span class="p">=</span> <span class="p">(</span><span class="n">DescriptorStructure</span><span class="p">)</span><span class="n">struct5</span><span class="p">.</span><span class="n">Types</span><span class="p">[</span><span class="m">0</span><span class="p">];</span>
                <span class="c1">// Зареждане на структурите ReferenceStructure и EnumeratedReferenceStructure
</span><span class="c1"></span>                <span class="n">ReferenceStructure</span> <span class="n">referenceStruct</span> <span class="p">=</span> <span class="p">(</span><span class="n">ReferenceStructure</span><span class="p">)</span><span class="n">struct6</span><span class="p">.</span><span class="n">Structures</span><span class="p">[</span><span class="m">0</span><span class="p">];</span>
                <span class="n">EnumeratedReferenceStructure</span> <span class="n">enumRefStruct</span> <span class="p">=</span> <span class="p">(</span><span class="n">EnumeratedReferenceStructure</span><span class="p">)</span><span class="n">referenceStruct</span><span class="p">.</span><span class="n">Items</span><span class="p">[</span><span class="m">0</span><span class="p">];</span>
                <span class="c1">// ReferenceStructure и EnumeratedReferenceStructure са заредени успешно
</span><span class="c1"></span>
                <span class="n">psdImage</span><span class="p">.</span><span class="n">Save</span><span class="p">(</span><span class="n">output</span><span class="p">);</span>
            <span class="p">}</span>
</code></pre></div>