Aspose.PSD за .NET 19.12 - Бележки за изданието

Ключ Обобщение Категория
PSDNET-11 Поддръжка на свързани слоеве Функционалност
PSDNET-131 Поддръжка на SoCoResource Функционалност
PSDNET-115 Празни редове се добавят към съществуващите, ако слоят за текст се актуализира с низ Проблем
PSDNET-157 Замръзване при запазване на PSB като PNG Проблем
PSDNET-250 Изключение при зареждане на CMYK PSD файл без слоеве с RLE компресия Проблем
PSDNET-161 Изключение при актуализиране на текстови слоеве Проблем
PSDNET-222 Преоразмеряване на някои PSD файлове с маски на слоеве работи некоректно Проблем
PSDNET-244 Запазване на PSD с някои Globalization.CultureInfo.CurrentCulture води до изключения при зареждане Проблем

Промени в публичния API

Добавени API:

  • P:Aspose.PSD.FileFormats.Psd.PsdImage.LinkedLayersManager
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerMaskDataFull.UserMaskData
  • T:Aspose.PSD.FileFormats.Psd.Layers.LinkedLayersManager
  • M:Aspose.PSD.FileFormats.Psd.Layers.LinkedLayersManager.LinkLayers(Aspose.PSD.FileFormats.Psd.Layers.Layer[])
  • M:Aspose.PSD.FileFormats.Psd.Layers.LinkedLayersManager.UnlinkLayer(Aspose.PSD.FileFormats.Psd.Layers.Layer)
  • M:Aspose.PSD.FileFormats.Psd.Layers.LinkedLayersManager.GetLayersByLinkGroupId(System.Int16)
  • M:Aspose.PSD.FileFormats.Psd.Layers.LinkedLayersManager.GetLinkGroupId(Aspose.PSD.FileFormats.Psd.Layers.Layer)

Премахнати API:

  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerMaskData.ImageDataVector

Примери за използване:

PSDNET-11. Поддръжка на свързани слоеве

           using (var psd = (PsdImage)Image.Load("example.psd"))

            {

                Layer[] layers = psd.Layers;

                // свържете всички слоеве в една група на свързани слоеве

                short layersLinkGroupId = psd.LinkedLayersManager.LinkLayers(layers);

                // получаване на идентификационен номер за конкретен слой

                short linkGroupId = psd.LinkedLayersManager.GetLinkGroupId(layers[0]);

                if (layersLinkGroupId != linkGroupId)

                {

                    throw new Exception("layersLinkGroupId и linkGroupId не са еднакви.");

                }

                // получаване на всички свързани слоеве по идентификационен номер за свързани слоеве

                Layer[] linkedLayers = psd.LinkedLayersManager.GetLayersByLinkGroupId(linkGroupId);

                // отвързване на всеки слой от групата

                foreach (var linkedLayer in linkedLayers)

                {

                    psd.LinkedLayersManager.UnlinkLayer(linkedLayer);

                }

                // получаване на NULL за идентификационен номер за група, която няма слоеве в групата

                linkedLayers = psd.LinkedLayersManager.GetLayersByLinkGroupId(linkGroupId);

                if (linkedLayers != null)

                {

                    throw new Exception("Полето linkedLayers не е NULL.");

                }

                psd.Save("psdnet11_output.psd");

            }

PSDNET-131. Поддръжка на SoCoResource

      // Поддръжка на SoCoResource

    string sourceFileName = "ColorFillLayer.psd";

    string exportPath = "SoCoResource_Edited.psd";

    var im = (PsdImage)Image.Load(sourceFileName);

    using (im)

    {

        foreach (var layer in im.Layers)

        {

            if (layer is FillLayer)

            {

                var fillLayer = (FillLayer)layer;

                foreach (var resource in fillLayer.Resources)

                {

                    if (resource is SoCoResource)

                    {

                        var socoResource = (SoCoResource)resource;

                        Assert.AreEqual(Color.FromArgb(63, 83, 141), socoResource.Color);

                        socoResource.Color = Color.Red;

                        break;

                    }

                 }

                 break;

             }

            im.Save(exportPath);

        }

    }

PSDNET-115. Празни редове се добавят към съществуващите, ако слоят за текст се актуализира с низ

           const string NewText = "abcdef\rzxcvbn";

        string sourceFilePath = "TestFileForAsianChars.psd");

        string outputFilePath = "result.psd";

        using (var image = (PsdImage)Image.Load(sourceFilePath))

        {

            var layer = (TextLayer)image.Layers[0];

            var imageOptions = new PsdOptions(image);

            layer.UpdateText(NewText);

            image.Save(outputFilePath, imageOptions);

        }

        using (var createdImage = (PsdImage)Image.Load(outputFilePath))

        {

            var createdLayer = (TextLayer)createdImage.Layers[0];

            if (NewText != createdLayer.Text)

            {

                throw new InvalidDataException("Актуализираният текст е невалиден");

            }

        }

PSDNET-157. Замръзване при запазване на PSB като PNG

       // Запазване на PSB като PNG 

    string sourceFileName = "sample.psb";

    string outFileName = "sample.png";

    using (PsdImage image = (PsdImage)Image.Load(sourceFileName))

    {

        PngOptions options = new PngOptions() { ColorType = PngColorType.TruecolorWithAlpha };

        image.Save(outFileName, options);

    }

 PSDNET-250. Изключение при зареждане на CMYK PSD файл без слой с RLE компресия

     void LoadRawDataFromPsd()

        {

            string sourcePath = "CmykWithAlpha.psd";

            using (RasterImage image = (RasterImage)Image.Load(sourcePath))

            {

                var rawDataSettings = image.RawDataSettings;

                RawDataTester loader = new RawDataTester();

                image.LoadRawData(image.Bounds, rawDataSettings, loader);

            }

        }

        class RawDataTester : IPartialRawDataLoader

        {

            public void Process(Rectangle rectangle, byte[] pixels, Point start, Point end)

            {

            }

            public void Process(Rectangle rectangle, byte[] pixels, Point start, Point end, LoadOptions loadOptions)

            {

            }

        }

 PSDNET-161. Изключение при актуализиране на текстови слоеве

      // Зареждане на PSD файл като изображение и преобразуване на PsdImage

    using (PsdImage psdImage = (PsdImage)Image.Load("example.psd"))

    {

        foreach (var layer in psdImage.Layers)

        {

            if (layer is TextLayer)

            {

                TextLayer textLayer = layer as TextLayer;

                textLayer.UpdateText("тест актуализиране", new Point(0, 0), 15.0f, Color.Purple);

            }

        }

        psdImage.Save("UpdateTextLayerInPSDFile_out.psd");

    }

PSDNET-222. Преоразмеряване на някои PSD файлове с маски на слоеве работи некоректно

     int scale = 2;

        string[] names = {

                             "OneRegularAndOneAdjustmentWithVectorAndLayerMask",

                             "LevelsLayerWithLayerMaskRgb",

                             "LevelsLayerWithLayerMaskCmyk",

                             "ColorBalanceAdjustmentLayer"

                         };

        for (int i = 0; i < names.Length; i++)

        {

            string sourceFilePath = names[i] + ".psd";

            string outputFilePath = "output_" + sourceFilePath;

            string outputPngFilePath = "output_" + names[i] + ".png";

            var psdLoadOptions = new PsdLoadOptions() { LoadEffectsResource = true };

            using (PsdImage image = (PsdImage)Image.Load(sourceFilePath, psdLoadOptions))

            {

                image.Resize(image.Width * scale, image.Height * scale);

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

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

            }

        }

PSDNET-244. Запазване на PSD с някои Globalization.CultureInfo.CurrentCulture води до изключения при зареждане

     for (int i = 0; i <= 6; i++)

        {

            string sourceFileName = string.Format("example-{0}.psd", i);

            var psdLoadOptions = new PsdLoadOptions() { LoadEffectsResource = true };

            var psdSaveOptions = new PsdOptions();

            var culture = new System.Globalization.CultureInfo("ru-RU");

            System.Threading.Thread.CurrentThread.CurrentCulture = culture;

            System.Threading.Thread.CurrentThread.CurrentUICulture = culture;

            string outputFileName = "output-" + sourceFileName;

            // Зареждане на PSD файл като изображение и преобразуване на PsdImage

            using (PsdImage image = (PsdImage)Image.Load(sourceFileName, psdLoadOptions))

            {

                image.Resize(160, 120);

                image.Save(outputFileName, psdSaveOptions);

            }

            culture = new System.Globalization.CultureInfo("en-US");

            System.Threading.Thread.CurrentThread.CurrentCulture = culture;

            System.Threading.Thread.CurrentThread.CurrentUICulture = culture;

            // Зареждане на PSD файл като изображение и преобразуване на PsdImage

            using (PsdImage image2 = (PsdImage)Image.Load(sourceFileName, psdLoadOptions))

            {

                image2.Resize(160, 120);

                image2.Save(outputFileName, psdSaveOptions);

            }

        }