Aspose.PSD para .NET 18.12 - Notas de Lançamento

Chave Resumo Categoria
PSDNET-76 Suporte à Camada de Traço Recurso
PSDNET-83 Suporte ao Efeito de Gradiente Recurso
PSDNET-84 Suporte ao Efeito de Padrão Recurso
PSDNET-89 Habilitar a capacidade de adicionar a nova camada regular gerada à PsdImage Recurso
PSDNET-93 Após atualização do conteúdo da camada de texto com o caractere \ (barra invertida), o arquivo resultante não pode ser aberto no Photoshop Erro
PSDNET-39 Imagens quebradas após a exportação com dados de imagem muito grandes no Modo de Cor CMYK Erro
PSDNET-52 Possível: a rotação no PSD não funciona Erro
PSDNET-88 Possível: Os métodos de recorte no Aspose.Psd não estão funcionando Erro
PSDNET-91 Aplicar alterações do Aspose.Imaging ao Aspose.PSD Melhoria

Alterações na API Pública

Método Aspose.PSD.FileFormats.Psd.PsdImage.AddRegularLayer

Classe Aspose.PSD.CoreExceptions.ImageFormats.PsdImageArgumentException

Método Aspose.PSD.CoreExceptions.ImageFormats.PsdImageArgumentException.#ctor(System.String)

Método Aspose.PSD.CoreExceptions.ImageFormats.PsdImageArgumentException.#ctor(System.String,System.Exception)

Classe Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.BaseFillSettings

Método Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.BaseFillSettings.#ctor

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.BaseFillSettings.FillType

Classe Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.ColorFillSettings

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.ColorFillSettings.Color

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.ColorFillSettings.FillType

Classe Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.FillType

Campo/Enum Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.FillType.Color

Campo/Enum Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.FillType.Gradient

Campo/Enum Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.FillType.Pattern

Classe Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientColorPoint

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientColorPoint.Color

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientColorPoint.Location

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientColorPoint.MedianPointLocation

Classe Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientFillSettings

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientFillSettings.Color

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientFillSettings.AlignWithLayer

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientFillSettings.Dither

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientFillSettings.Reverse

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientFillSettings.Angle

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientFillSettings.GradientType

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientFillSettings.HorizontalOffset

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientFillSettings.VerticalOffset

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientFillSettings.FillType

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientFillSettings.ColorPoints

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientFillSettings.TransparencyPoints

Método Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientFillSettings.AddColorPoint

Método Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientFillSettings.AddTransparencyPoint

Método Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientFillSettings.RemoveTransparencyPoint(Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientTransparencyPoint)

Método Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientFillSettings.RemoveColorPoint(Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientColorPoint)

Classe Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientTransparencyPoint

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientTransparencyPoint.Opacity

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientTransparencyPoint.Location

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientTransparencyPoint.MedianPointLocation

Classe Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.PatternFillSettings

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.PatternFillSettings.FillType

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.PatternFillSettings.Linked

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.PatternFillSettings.Scale

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.PatternFillSettings.PointType

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.PatternFillSettings.PatternName

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.PatternFillSettings.PatternId

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.PatternFillSettings.HorizontalOffset

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.PatternFillSettings.VerticalOffset

Classe Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.StrokeEffect

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.StrokeEffect.BlendMode

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.StrokeEffect.IsVisible

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.StrokeEffect.FillSettings

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.StrokeEffect.Opacity

Classe Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Lfx2Resources.GradientType

Classe Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Lfx2Resources.GradientType

Campo/Enum Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Lfx2Resources.GradientType.Linear

Campo/Enum Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Lfx2Resources.GradientType.Radial

Campo/Enum Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Lfx2Resources.GradientType.Angle

Campo/Enum Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Lfx2Resources.GradientType.Reflected

Campo/Enum Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Lfx2Resources.GradientType.Diamond

Campo/Enum Aspose.PSD.FileFormats.Psd.Layers.LayerResources.Lfx2Resources.GradientType.ShapeBurst

Classe Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource

Método Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.#ctor

Método Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.#ctor(System.Byte[])

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.PatternData

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.PatternId

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.Name

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.Height

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.Width

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.ImageMode

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.Version

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.PatternLength

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.Signature

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.Key

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.Length

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.PsdVersion

Método Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.SetPattern(System.Int32[],Aspose.PSD.Rectangle)

Método Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.Save(Aspose.PSD.StreamContainer,System.Int32)

Campo/Enum Aspose.PSD.FileFormats.Psd.Layers.LayerResources.PattResource.TypeToolKey

Método Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientFillSettings.#ctor

Método Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientFillSettings.GenerateLfx2ResourceNodes

Classe Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientOverlayEffect

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientOverlayEffect.Settings

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientOverlayEffect.BlendMode

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientOverlayEffect.IsVisible

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.GradientOverlayEffect.Opacity

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.PatternFillSettings.Color

Método Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.BlendingOptions.AddGradientOverlay

Método Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.BlendingOptions.AddPatternOverlay

Método Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.PatternFillSettings.GenerateLfx2ResourceNodes(System.String,Aspose.PSD.Color,System.String,System.String,System.Double,System.Boolean,Aspose.PSD.PointF)

Classe Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.PatternOverlayEffect

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.PatternOverlayEffect.Settings

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.PatternOverlayEffect.BlendMode

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.PatternOverlayEffect.IsVisible

Propriedade Aspose.PSD.FileFormats.Psd.Layers.LayerEffects.PatternOverlayEffect.Opacity

Exemplos de Uso:

PSDNET-76. Suporte à Camada de Traço

1) Tipo de Preenchimento - Padrão

     // Efeito de Traço. Tipo de Preenchimento - Padrão. Exemplo

    string nomeArquivoFonte = "Traço.psd";

    string caminhoExportacao = "TraçoPreenchimentoAlterado.psd";

    var opcoesCarregamento = new PsdLoadOptions()

    {

        LoadEffectsResource = true

    };

    // Preparando novos dados

    var novoPadrao = new int[]

    {

         Color.Aqua.ToArgb(), Color.Red.ToArgb(), Color.Red.ToArgb(), Color.Aqua.ToArgb(),

         Color.Aqua.ToArgb(), Color.White.ToArgb(), Color.White.ToArgb(), Color.Aqua.ToArgb(),

         Color.Aqua.ToArgb(), Color.White.ToArgb(), Color.White.ToArgb(), Color.Aqua.ToArgb(),

         Color.Aqua.ToArgb(), Color.Red.ToArgb(), Color.Red.ToArgb(), Color.Aqua.ToArgb(),

    };

   var novosLimitesPadrao = new Rectangle(0, 0, 4, 4);

   var guid = Guid.NewGuid();

    using (var im = (PsdImage)Image.Load(nomeArquivoFonte, opcoesCarregamento))

    {

         var traçoPadrão = (StrokeEffect)im.Layers[3].BlendingOptions.Effects[0];

         Assert.AreEqual(BlendMode.Normal, traçoPadrão.BlendMode);

         Assert.AreEqual(255, traçoPadrão.Opacity);

         Assert.AreEqual(true, traçoPadrão.IsVisible);

         var configPreenchimento = (PatternFillSettings)traçoPadrão.FillSettings;

         Assert.AreEqual(FillType.Pattern, configPreenchimento.FillType);

         traçoPadrão.Opacity = 127;

         traçoPadrão.BlendMode = BlendMode.Color;

         PattResource recurso;

         foreach (var recursoCamadaGlobal in im.GlobalLayerResources)

         {

             if (recursoCamadaGlobal is PattResource)

             {

                  recurso = (PattResource)recursoCamadaGlobal;

                  recurso.PatternId = guid.ToString();

                  recurso.Name = "$$$/Presets/Patterns/HorizontalLine1=Horizontal Line 9\0";        

                  recurso.SetPattern(novoPadrão, novosLimitesPadrao);               

             }

         }

         ((PatternFillSettings)configPreenchimento).PatternName = "$$$/Presets/Patterns/HorizontalLine1=Horizontal Line 9\0";

         ((PatternFillSettings)configPreenchimento).PatternId = guid.ToString() + "\0";

        im.Save(caminhoExportacao);

    }

    // Arquivo de teste após edição

    using (var im = (PsdImage)Image.Load(nomeArquivoFonte, opcoesCarregamento))

    {

        var traçoPadrão = (StrokeEffect)im.Layers[3].BlendingOptions.Effects[0];

        PattResource recurso = null;

        foreach (var recursoCamadaGlobal in im.GlobalLayerResources)

        {

            if (recursoCamadaGlobal is PattResource)

            {

                recurso = (PattResource)recursoCamadaGlobal;

            }

        }

        if (recurso == null)

        {

            throw new Exception("Recurso PattResource não encontrado");

        }

        // Verificar os dados do padrão

        Assert.AreEqual(novoPadrão, recurso.PatternData);

        Assert.AreEqual(novosLimitesPadrao, new Rectangle(0, 0, recurso.Width, recurso.Height));

        Assert.AreEqual(guid.ToString(), recurso.PatternId);

        Assert.AreEqual(BlendMode.Color, traçoPadrão.BlendMode);

        Assert.AreEqual(127, traçoPadrão.Opacity);

         Assert.AreEqual(true, traçoPadrão.IsVisible);

        var configPreenchimento = (PatternFillSettings)traçoPadrão.FillSettings;

        Assert.AreEqual(FillType.Pattern, configPreenchimento.FillType);

    }

2) Tipo de Preenchimento - Gradiente

     // Efeito de Traço. Tipo de Preenchimento - Gradiente. Exemplo

    string nomeArquivoFonte = "Traço.psd";

    string caminhoExportacao = "TraçoGradienteAlterado.psd";

    var opcoesCarregamento = new PsdLoadOptions()

    {

        LoadEffectsResource = true

    };

    using (var im = (PsdImage)Image.Load(nomeArquivoFonte, opcoesCarregamento))

    {

        var traçoGradiente = (StrokeEffect)im.Layers[2].BlendingOptions.Effects[0];

        Assert.AreEqual(BlendMode.Normal, traçoGradiente.BlendMode);

        Assert.AreEqual(255, traçoGradiente.Opacity);

        Assert.AreEqual(true, traçoGradiente.IsVisible);

        var configPreenchimento = (GradientFillSettings)traçoGradiente.FillSettings;

        Assert.AreEqual(Color.Black, configPreenchimento.Color);

        Assert.AreEqual(FillType.Gradient, configPreenchimento.FillType);

        Assert.AreEqual(true, configPreenchimento.AlignWithLayer);

        Assert.AreEqual(GradientType.Linear, configPreenchimento.GradientType);

        Assert.IsTrue(Math.Abs(90 - configPreenchimento.Angle) < 0.001, "O ângulo está incorreto");

        Assert.AreEqual(false, configPreenchimento.Dither);

        Assert.IsTrue(Math.Abs(0 - configPreenchimento.HorizontalOffset) < 0.001, "O deslocamento horizontal está incorreto");

        Assert.IsTrue(Math.Abs(0 - configPreenchimento.VerticalOffset) < 0.001, "O deslocamento vertical está incorreto");

        Assert.AreEqual(false, configPreenchimento.Reverse);

        // Pontos de cor

        var pontosCor = configPreenchimento.ColorPoints;

        Assert.AreEqual(2, pontosCor.Length);

        Assert.AreEqual(Color.Black, pontosCor[0].Color);

        Assert.AreEqual(0, pontosCor[0].Location);

        Assert.AreEqual(50, pontosCor[0].MedianPointLocation);

        Assert.AreEqual(Color.White, pontosCor[1].Color);

        Assert.AreEqual(4096, pontosCor[1].Location);

        Assert.AreEqual(50, pontosCor[1].MedianPointLocation);

        // Pontos de transparência

        var pontosTransparência = configPreenchimento.TransparencyPoints;

        Assert.AreEqual(2, pontosTransparência.Length);

        Assert.AreEqual(0, pontosTransparência[0].Location);

        Assert.AreEqual(50, pontosTransparência[0].MedianPointLocation);

        Assert.AreEqual(100, pontosTransparência[0].Opacity);

        Assert.AreEqual(4096, pontosTransparência[1].Location);

        Assert.AreEqual(50, pontosTransparência[1].MedianPointLocation);

        Assert.AreEqual(100, pontosTransparência[1].Opacity);

        // Testar edição

        configPreenchimento.Color = Color.Green;

        traçoGradiente.Opacity = 127;

        traçoGradiente.BlendMode = BlendMode.Color;

        configPreenchimento.AlignWithLayer = false;

        configPreenchimento.GradientType = GradientType.Radial;

        configPreenchimento.Angle = 45;

        configPreenchimento.Dither = true;

        configPreenchimento.HorizontalOffset = 15;

        configPreenchimento.VerticalOffset = 11;

        configPreenchimento.Reverse = true;

        // Adicionar novo ponto de cor

        var pontoCor = configPreenchimento.AddColorPoint();

        pontoCor.Color = Color.Green;

        pontoCor.Location = 4096;

        pontoCor.MedianPointLocation = 75;

        // Alterar a localização doponto anteriormente inserido

        configPreenchimento.ColorPoints[1].Location = 1899;

        // Adicionar novo ponto de transparência

        var pontoTransparência = configPreenchimento.AddTransparencyPoint();

        pontoTransparência.Opacity = 25;

        pontoTransparência.MedianPointLocation = 25;

        pontoTransparência.Location = 4096;

        // Alterar a localização do ponto de transparência anterior

        configPreenchimento.TransparencyPoints[1].Location = 2411;

        im.Save(caminhoExportacao);

    }

    // Arquivo de teste após edição

    using (var im = (PsdImage)Image.Load(caminhoExportacao, opcoesCarregamento))

    {

        var traçoGradiente = (StrokeEffect)im.Layers[2].BlendingOptions.Effects[0];

        Assert.AreEqual(BlendMode.Color, traçoGradiente.BlendMode);

        Assert.AreEqual(127, traçoGradiente.Opacity);

        Assert.AreEqual(true, traçoGradiente.IsVisible);

        var configPreenchimento = (GradientFillSettings)traçoGradiente.FillSettings;

        Assert.AreEqual(Color.Green, configPreenchimento.Color);

        Assert.AreEqual(FillType.Gradient, configPreenchimento.FillType);

        // Verificar pontos de cor

        Assert.AreEqual(3, configPreenchimento.ColorPoints.Length);

        var ponto = configPreenchimento.ColorPoints[0];

        Assert.AreEqual(50, ponto.MedianPointLocation);

        Assert.AreEqual(Color.Black, ponto.Color);

        Assert.AreEqual(0, ponto.Location);

        ponto = configPreenchimento.ColorPoints[1];

        Assert.AreEqual(50, ponto.MedianPointLocation);

        Assert.AreEqual(Color.White, ponto.Color);

        Assert.AreEqual(1899, ponto.Location);

        ponto = configPreenchimento.ColorPoints[2];

        Assert.AreEqual(75, ponto.MedianPointLocation);

        Assert.AreEqual(Color.Green, ponto.Color);

        Assert.AreEqual(4096, ponto.Location);

        // Verificar pontos de transparência

        Assert.AreEqual(3, configPreenchimento.TransparencyPoints.Length);

        var pontoTransparência = configPreenchimento.TransparencyPoints[0];

        Assert.AreEqual(50, pontoTransparência.MedianPointLocation);

        Assert.AreEqual(100, pontoTransparência.Opacity);

        Assert.AreEqual(0, pontoTransparência.Location);

        pontoTransparência = configPreenchimento.TransparencyPoints[1];

        Assert.AreEqual(50, pontoTransparência.MedianPointLocation);

        Assert.assertEquals(100, pontoTransparência.Opacity);

        Assert.assertEquals(2411, pontoTransparência.Location);

        pontoTransparência = configPreenchimento.TransparencyPoints[2];

        Assert.assertEquals(25, pontoTransparência.MedianPointLocation);

        Assert.assertEquals(25, pontoTransparência.Opacity);

        Assert.assertEquals(4096, pontoTransparência.Location);

    }

PSDNET-84. Suporte ao Efeito de Padrão.

    // Efeito de sobreposição de padrão. Exemplo

    string nomeArquivoFonte = "SobreposicaoPadrao.psd";

    string caminhoExportacao = "SobreposicaoPadraoAlterada.psd";

    var novoPadrão = new int[]

    {

        Color.Aqua.ToArgb(), Color.Red.ToArgb(), Color.Red.ToArgb(), Color.Aqua.ToArgb(),

        Color.Aqua.ToArgb(), Color.White.ToArgb(), Color.White.ToArgb(), Color.Aqua.ToArgb(),

    };

    var novosLimitesPadrão = new Rectangle(0, 0, 4, 2);

    var guid = Guid.NewGuid();

    var novoNomePadrão = "$$$/Presets/Patterns/Pattern=Novo nome de padrão\0";

    var opcoesCarregamento = new PsdLoadOptions()

    {

        LoadEffectsResource = true

    };

    using (var im = (PsdImage)Image.Load(nomeArquivoFonte))

    {

        var efeitoPadrão = (PatternOverlayEffect)im.Layers[1].BlendingOptions.Effects[0];

        Assert.AreEqual(BlendMode.Normal, efeitoPadrão.BlendMode);

        Assert.AreEqual(127, efeitoPadrão.Opacity);

        Assert.AreEqual(true, efeitoPadrão.IsVisible);

        var configurações = efeitoPadrão.Settings;

        Assert.AreEqual(Color.Empty, configurações.Color);

        Assert.AreEqual(FillType.Pattern, configurações.FillType);

        Assert.AreEqual("85163837-eb9e-5b43-86fb-e6d5963ea29a\0", configurações.PatternId);

        Assert.AreEqual("$$$/Presets/Patterns/OpticalSquares=Optical Squares\0", configurações.PatternName);

        Assert.AreEqual(null, configurações.PointType);

        Assert.assertEquals(100, configurações.Scale);

        Assert.AreEqual(false, configurações.Linked);

        Assert.IsTrue(Math.Abs(0 - configurações.HorizontalOffset) < 0.001, "O deslocamento horizontal está incorreto");

        Assert.assertTrue(Math.abs(0 - configurações.VerticalOffset) < 0.001, "O deslocamento vertical está incorreto");

        // Testar a edição

        configurações.Color = Color.Green;

        efeitoPadrão.Opacity = 193;

        efeitoPadrão.BlendMode = BlendMode.Difference;

        configurações.HorizontalOffset = 15;

        configurações.VerticalOffset = 11;

        PattResource recurso;

        foreach (var recursoCamadaGlobal in im.GlobalLayerResources)

        {

            if (recursoCamadaGlobal is PattResource)

            {

                recurso = (PattResource)recursoCamadaGlobal;

                recurso.PatternId = guid.ToString();

                recurso.Name = novoNomePadrão;

                recurso.SetPattern(novoPadrão, novosLimitesPadrão);

            }

        }

        configurações.PatternName = novoNomePadrão;

        configurações.PatternId = guid.ToString() + "\0";

        im.Save(caminhoExportacao);

    }

    // Arquivo de teste após edição

    using (var im = (PsdImage)Image.Load(nomeArquivoFonte, opcoesCarregamento))

    {

        var efeitoPadrão = (PatternOverlayEffect)im.Layers[1].BlendingOptions.Effects[0];

        Assert.assertEquals(BlendMode.Difference, efeitoPadrão.BlendMode);

        Assert.assertEquals(193, efeitoPadrão.Opacity);

        Assert.assertEquals(true, efeitoPadrão.IsVisible);

        var configurações = efeitoPadrão.Settings;

        Assert.AreEqual(Color.Empty, configurações.Color);

        Assert.AreEqual(FillType.Pattern, configurações.FillType);

        PattResource recurso = null;

        foreach (var recursoCamadaGlobal in im.GlobalLayerResources)

        {

             if (recursoCamadaGlobal is PattResource)

             {

                 recurso = (PattResource)recursoCamadaGlobal;

             }

        }

        if (recurso == null)

        {

             throw new Exception("Recurso PattResource não encontrado");

        }

        // Verificar os dados do padrão

        Assert.AreEqual(novoPadrão, recurso.PatternData);

        Assert.AreEqual(novosLimitesPadrão, new Rectangle(0, 0, recurso.Width, recurso.Height));

        Assert.assertEquals(guid.ToString(), recurso.PatternId);

        Assert.AreEqual(novoNomePadrão, recurso.Name);

    }

PSDNET-89. Habilitar a capacidade de adicionar a nova camada regular gerada à PsdImage.

  // Habilitar a capacidade de adicionar a nova camada regular gerada à PsdImage

    string nomeArquivoFonte = "UmaCamada.psd";

    string caminhoExportacao = "UmaCamadaEditada.psd";

    string caminhoExportacaoPng = "UmaCamadaEditada.png";

    using (var im = (PsdImage)Image.Load(nomeArquivoFonte))

    {

       // Preparando dois arrays int

       var dados1 = new int[2500];

       var dados2 = new int[2500];

       var limite1 = new Rectangle(0, 0, 50, 50);

       var limite2 = new Rectangle(0, 0, 100, 25);

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

       {

           dados1[i] = -10000000;

           dados2[i] = -10000000;

       }

       var camadas = new Layer[4];

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

       {

           camadas[i] = im.AddRegularLayer();

           camadas[i].SaveArgb32Pixels(limite1, dados1);

       }

       image.Resize(186, 602);

       camadas[0].Crop(new Rectangle(0, 0, 186, 159));

       camadas[1].Crop(new Rectangle(186, 0, 186, 159));

       camadas[2].Crop(new Rectangle(0, 159, 186, 142));

       camadas[3].Crop(new Rectangle(186, 159, 186, 142));

       var camadaAntiga = im.Layers[0];

       camadaAntiga.Dispose();

       im.Layers = camadas;

       var topo = 0;

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

       {

           var largura = camadas[i].Width;

           var altura = camadas[i].Height;

           camadas[i].Left = 0;

           camadas[i].Top = topo;

           camadas[i].Right = largura;

           camadas[i].Bottom = altura + camadas[i].Top;

           topo += camadas[i].Height;

       }

       // Salvando como psd

       im.Save(caminhoExportacao, new PsdOptions());

       // Salvando como png

       im.Save(caminhoExportacaoPng, new PngOptions());

    }

PSDNET-93. Após atualização do conteúdo da camada de texto com o caractere \ (barra invertida), o arquivo resultante não pode ser aberto no Photoshop.

 using (

var imagem =

Image.Load(

"exemplo.psd"))

{

if (!(imagem is PsdImage)) return;

                var psdImagem = (PsdImage)imagem;

                var camadas = psdImagem.Layers;

                for (var índice = camadas.Length - 1; índice >= 0; índice--)

                {

                    var camada = camadas[índice];

                    if (!(camada is TextLayer)) continue;

                    var camadaTexto = (TextLayer)camada;

                    camadaTexto.UpdateText("展 就");

                }

                var opçõesImagem = new PsdOptions(psdImagem);

                psdImagem.Save("resultado.psd", opçõesImagem);

            }

PSDNET-39. Imagens quebradas após a exportação com dados de imagem muito grandes no Modo de Cor CMYK.

     // Imagens quebradas após a exportação com dados de imagem muito grandes no Modo de Cor CMYK. Exemplo

    string nomeArquivoFonte = "ImagemCMYKOversizedComCamadaDeAjuste.psd";

    string caminhoExportacao = "ImagemCMYKOversizedComCamadaDeAjuste.png";

    using (var im = (PsdImage)Image.Load(nomeArquivoFonte))

    {        

        im.Save(caminhoExportacao, new PngOptions());

    }

PSDNET-52. Possível: a rotação no PSD não funciona.

  // Rotação do PSD. Exemplo

    string nomeArquivoFonte = "OChapéu.psd";

    var opçõesPng = new PngOptions() { ColorType = PngColorType.TruecolorWithAlpha };

    // Rotação da imagem inteira

    using (PsdImage imagem = (PsdImage)Image.Load(nomeArquivoFonte))

    {

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

        {

            int ângulo = i * 45;

            imagem.Rotate(ângulo);

            string nomeArquivoSaida = "OChapéuRotacionado" + ângulo + ".png";

            imagem.Save(nomeArquivoSaida, opçõesPng);

        }

    }

    // Rotação da camada

    using (PsdImage imagem = (PsdImage)Image.Load(nomeArquivoFonte))

    {

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

        {

            int ângulo = i * 45;

            imagem.Layers[1].Rotate(ângulo);

            string nomeArquivoSaida = "OChapéuCamadaRotacionada" + ângulo + ".png";

            imagem.Save(nomeArquivoSaida, opçõesPng);

        }

    }       

PSDNET-88. Possível: Os métodos de recorte no Aspose.Psd não estão funcionando.

   // Possível: Os métodos de recorte no Aspose.Psd não estão funcionando

    string nomeArquivoFonte = "ArquivoFonte.psd";

    string caminhoExportacao = "ArquivoFonteEditado.psd";

    string caminhoExportacaoPng = "ArquivoFonteEditado.png";

    using (var imagem = (PsdImage)Image.Load(nomeArquivoFonte))

    {

        var camadaAntiga = imagem.Layers[0];

        var limitesAntigos = camadaAntiga.Bounds;

        var dadosCamadaAntiga = imagem.Layers[0].LoadArgb32Pixels(limitesAntigos);

        var camadas = new Layer[4];

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

        {

            camadas[i] = imagem.AddRegularLayer();

            camadas[i].SaveArgb32Pixels(limitesAntigos, dadosCamadaAntiga);

        }

        imagem.Resize(186, 602);

        camadas[0].Crop(new Rectangle(0, 0, 186, 159));

        camadas[1].Crop(new Rectangle(186, 0, 186, 159));

        camadas[2].Crop(new Rectangle(0, 159, 186, 142));

        camadas[3].Crop(new Rectangle(186, 159, 186, 142));

        camadaAntiga.Dispose();

        imagem.Layers = camadas;

        var topo = 0;

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

        {

            var largura = camadas[i].Width;

            var altura = camadas[i].Height;

            camadas[i].Left = 0;

            camadas[i].Top = topo;

            camadas[i].Right = largura;

            camadas[i].Bottom = altura + camadas[i].Top;

            topo += camadas[i].Height;

        }

        // Salvar como psd

        imagem.Save(caminhoExportacao, new PsdOptions());

        // Salvar como png

        imagem.Save(caminhoExportacaoPng, new PngOptions());

    }