Notas de Lançamento do Aspose.PSD para .NET 22.7

Chave Resumo Categoria
PSDNET-482 Suporte ao recurso da Seção de Imagem #4000-4999 do recurso Plug-In(s) Recurso
PSDNET-875 Ocorre uma exceção não tratada do tipo “System.OutOfMemoryException” no Aspose.PSD.dll Erro
PSDNET-1050 Após exportar o arquivo PSD, o resultado é muito maior do que o arquivo de origem Erro
PSDNET-1083 Análise incorreta dos dados para XmpResource Erro
PSDNET-1205 Após a exportação, o tamanho dos arquivos PSD com subpastas aumentou Erro

Alterações na API Pública

APIs Adicionadas:

  • T:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.AnimatedDataSectionStructure
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.AnimatedDataSectionStructure.Key
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.AnimatedDataSectionStructure.Length
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.AnimatedDataSectionStructure.Items
  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.AnimatedDataSectionStructure.SaveData(Aspose.PSD.StreamContainer)
  • F:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.AnimatedDataSectionStructure.StructureKey
  • T:Aspose.PSD.FileFormats.Psd.Resources.AnimatedDataSectionResource
  • P:Aspose.PSD.FileFormats.Psd.Resources.AnimatedDataSectionResource.DataSize
  • P:Aspose.PSD.FileFormats.Psd.Resources.AnimatedDataSectionResource.MinimalVersion
  • P:Aspose.PSD.FileFormats.Psd.Resources.AnimatedDataSectionResource.KeyName
  • P:Aspose.PSD.FileFormats.Psd.Resources.AnimatedDataSectionResource.AnimatedDataSection
  • M:Aspose.PSD.FileFormats.Psd.Resources.AnimatedDataSectionResource.SaveData(Aspose.PSD.StreamContainer)

APIs Removidas:

  • Nenhuma

Exemplos de Uso:

PSDNET-482. Suporte ao recurso da Seção de Imagem #4000-4999 Plug-In(s)

// O código a seguir demonstra como definir/atualizar o tempo de atraso no quadro de linha do tempo da animação de dados.
string arquivoOrigem = "3_animated.psd";
string psdSaida = "output_3_animated.psd";

T FindStructure<T>(IEnumerable<OSTypeStructure> estruturas, string nomeChave) where T : OSTypeStructure
{
    foreach (var estrutura in estruturas)
    {
        if (estrutura.KeyName.ClassName == nomeChave)
        {
            return estrutura as T;
        }
    }

    return null;
}

OSTypeStructure[] AddOrReplaceStructure(IEnumerable<OSTypeStructure> estruturas, OSTypeStructure novaEstrutura)
{
    List<OSTypeStructure> listaDeEstruturas = new List<OSTypeStructure>(estruturas);

    for (int i = 0; i < listaDeEstruturas.Count; i++)
    {
        OSTypeStructure estrutura = listaDeEstruturas[i];
        if (estrutura.KeyName.ClassName == novaEstrutura.KeyName.ClassName)
        {
            listaDeEstruturas.RemoveAt(i);
            break;
        }
    }

    listaDeEstruturas.Add(novaEstrutura);

    return listaDeEstruturas.ToArray();
}

using (PsdImage imagem = (PsdImage)Image.Load(arquivoOrigem))
{
    foreach (var recursoDeImagem in imagem.ImageResources)
    {
        if (recursoDeImagem is AnimatedDataSectionResource)
        {
            var dadosAnimados =
            (AnimatedDataSectionStructure) (recursoDeImagem as AnimatedDataSectionResource).AnimatedDataSection;
            var listaDeQuadros = FindStructure<ListStructure>(dadosAnimados.Items, "FrIn");

            var quadro1 = (DescriptorStructure)listaDeQuadros.Types[1];

            // Cria o registro de atraso de quadro com valor de 100 centésimos que equivale a 1 segundo.
            var atrasoQuadro = new IntegerStructure(new ClassID("FrDl"));
            atrasoQuadro.Value = 100; // define o tempo em centésimos.

            quadro1.Structures = AddOrReplaceStructure(quadro1.Structures, atrasoQuadro);

            break;
        }
    }

    imagem.Save(psdSaida);
}

PSDNET-875. Ocorre uma exceção não tratada do tipo “System.OutOfMemoryException” no Aspose.PSD.dll

string arquivoSrc = "001-.psd";
string caminhoParaJpg = "T_0003.jpg";
string caminhoParaSaida = "output_newPsd.psd";

using (var img = (PsdImage)Image.Load(arquivoSrc))
{
    using (FileStream fs = new FileStream(caminhoParaJpg, FileMode.Open))
    {
        var novaCamada = new Aspose.PSD.FileFormats.Psd.Layers.Layer(fs);
        novaCamada.DisplayName = "NovaCamada";

        img.AddLayer(novaCamada);

        img.Save(caminhoParaSaida, true);   
    }
}

PSDNET-1050. Após exportar o arquivo PSD, o resultado é muito maior do que o arquivo de origem

string src = "ShimadzuLetterhead100.psd";
string output = "output.psd";
using (var img = (PsdImage)Image.Load(src))
{
    img.Save(output);
}

double tamSaidaMb = new FileInfo(output).Length / 1024d / 1024d;
if (tamSaidaMb > 6)
{
    throw new Exception("O arquivo de saída é maior do que deveria ser.");
}

PSDNET-1083. Análise incorreta dos dados para XmpResource

string caminhoImagemPsdInput = @"input.psd";
string caminhoImagemPsdSalva = @"saved.psd";

bool originalContem = false;
bool salvaContem = false;

// Encontrar subchave XMP no arquivo de entrada
using (PsdImage img = (PsdImage)Image.Load(caminhoImagemPsdInput))
{
    foreach (var pacote in img.XmpData.Packages)
    {
        foreach (var pac in pacote)
        {
            if (pac.Value is XmpArray)
            {
                XmpArray arrayXmp = (XmpArray)pac.Value;

                string valorXml = arrayXmp.GetXmlValue();

                if (valorXml.Contains("<photoshop:LayerName>test1</photoshop:LayerName>"))
                {
                    originalContem = true;
                    break;
                }
            }
        }

        if (originalContem)
        {
            break;
        }
    }
    img.Save(caminhoImagemPsdSalva);
}

// Encontrar subchave XMP no arquivo salvo
using (PsdImage img = (PsdImage)Image.Load(caminhoImagemPsdSalva))
{
    foreach (var pacote in img.XmpData.Packages)
    {
        foreach (var pac in pacote)
        {
            if (pac.Value is XmpArray)
            {
                XmpArray arrayXmp = (XmpArray)pac.Value;

                string valorXml = arrayXmp.GetXmlValue();

                if (valorXml.Contains("<photoshop:LayerName>test1</photoshop:LayerName>"))
                {
                    salvaContem = true;
                    break;
                }
            }
        }

        if (salvaContem)
        {
            break;
        }
    }
    img.Save(caminhoImagemPsdSalva);
}

if (originalContem && salvaContem)
{
    // Tudo certo!
}
else
{
    throw new Exception("Isso não funciona");
}

PSDNET-1205. Após exportar, o tamanho dos arquivos PSD com subpastas aumentou

string[] arquivosFonte = new string[] { "1lvlFoldersTest.psd", "5lvlFoldersTest.psd"};

foreach (var nomeArquivo in arquivosFonte)
{
    string caminhoArquivoFonte = nomeArquivo;
    string caminhoArquivoSaida = "output_" + nomeArquivo;

    using (PsdImage imagem = (PsdImage)Image.Load(caminhoArquivoFonte))
    {
        imagem.Save(caminhoArquivoSaida);
    }

    double tamSaidaMb = new FileInfo(caminhoArquivoSaida).Length / 1024d / 1024d;
    if (tamSaidaMb > 1.9)
    {
        throw new Exception("O arquivo de saída é maior do que deveria ser.");
    }
}