Notatki dotyczące wersji Aspose.PSD dla .NET 22.7

Klucz Podsumowanie Kategoria
PSDNET-482 Wsparcie dla zasobu sekcji obrazu #4000-4999 Zasób Plug-In Nowa funkcja
PSDNET-875 Wystąpienie nieobsłużonego wyjątku typu “System.OutOfMemoryException” w Aspose.PSD.dll Błąd
PSDNET-1050 Po wyeksportowaniu pliku PSD, wynikowy plik jest znacznie większy niż plik źródłowy Błąd
PSDNET-1083 Niepoprawne analizowanie danych dla XmpResource Błąd
PSDNET-1205 Po eksporcie rozmiar plików PSD z podfolderami wzrósł Błąd

Zmiany w API publicznym

Dodane API:

  • 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)

Usunięte API:

  • Brak

Przykłady użycia:

PSDNET-482. Wsparcie dla zasobu sekcji obrazu #4000-4999 Zasób Plug-In

// Poniższy kod demonstruje, jak ustawić/aktualizować czas opóźnienia w ramce klatki czasowej animowanych danych.
string plikŹródłowy = "3_animated.psd";
string plikWyjściowyPsd = "output_3_animated.psd";

T ZnajdźStrukturę<T>(IEnumerable<OSTypeStructure> struktury, string nazwaKlucza) where T : OSTypeStructure
{
    foreach (var struktura in struktury)
    {
        if (struktura.KeyName.ClassName == nazwaKlucza)
        {
            return struktura as T;
        }
    }

    return null;
}

OSTypeStructure[] DodajLubZamieńStrukturę(IEnumerable<OSTypeStructure> struktury, OSTypeStructure nowaStruktura)
{
    List<OSTypeStructure> listaStruktur = new List<OSTypeStructure>(struktury);

    for (int i = 0; i < listaStruktur.Count; i++)
    {
        OSTypeStructure struktura = listaStruktur[i];
        if (struktura.KeyName.ClassName == nowaStruktura.KeyName.ClassName)
        {
            listaStruktur.RemoveAt(i);
            break;
        }
    }

    listaStruktur.Add(nowaStruktura);

    return listaStruktur.ToArray();
}

using (PsdImage obraz = (PsdImage)Image.Load(plikŹródłowy))
{
    foreach (var zasóbObrazu in obraz.ImageResources)
    {
        if (zasóbObrazu is AnimatedDataSectionResource)
        {
            var daneAnimowane =
            (AnimatedDataSectionStructure) (zasóbObrazu as AnimatedDataSectionResource).AnimatedDataSection;
            var listaKlatek = ZnajdźStrukturę<ListStructure>(daneAnimowane.Items, "FrIn");

            var klatka1 = (DescriptorStructure)listaKlatek.Types[1];

            // Tworzy rekord opóźnienia klatki o wartości 100 centysekund równych 1 sekundzie.
            var opóźnienieKlatki = new IntegerStructure(new ClassID("FrDl"));
            opóźnienieKlatki.Value = 100; // ustaw czas w centysekundach.

            klatka1.Struktury = DodajLubZamieńStrukturę(klatka1.Struktury, opóźnienieKlatki);

            break;
        }
    }

    obraz.Save(plikWyjściowyPsd);
}

PSDNET-875. Wystąpienie nieobsłużonego wyjątku typu “System.OutOfMemoryException” w Aspose.PSD.dll

string srcFile = "001-.psd";
string jpgFilePath = "T_0003.jpg";
string outputFilePath = "output_newPsd.psd";

using (var im = (PsdImage)Image.Load(srcFile))
{
    using (FileStream fs = new FileStream(jpgFilePath, FileMode.Open))
    {
        var nowaWarstwa = new Aspose.PSD.FileFormats.Psd.Layers.Layer(fs);
        nowaWarstwa.DisplayName = "NowaWarstwa";

        im.AddLayer(nowaWarstwa);

        im.Save(outputFilePath, true);   
    }
}

PSDNET-1050. Po wyeksportowaniu pliku PSD, wynikowy plik jest znacznie większy niż plik źródłowy

string źródło = "ShimadzuLetterhead100.psd";
string wynik = "output.psd";
using (var img = (PsdImage)Image.Load(źródło))
{
    img.Save(wynik);
}

double rozmiarWynikuMb = new FileInfo(wynik).Length / 1024d / 1024d;
if (rozmiarWynikuMb > 6)
{
    throw new Exception("Plik wynikowy jest większy niż powinien być.");
}

PSDNET-1083. Nieprawidłowe parsowanie danych dla XmpResource

string ścieżkaObrazuŹródłowegoPsd = @"input.psd";
string zapisanaŚcieżkaObrazuPsd = @"saved.psd";

bool czyOryginałZawiera = false;
bool czyZapisanaZawiera = false;

// Znajdź podklucz XMP w pliku źródłowym
using (PsdImage obraz = (PsdImage)Image.Load(ścieżkaObrazuŹródłowegoPsd))
{
    foreach (var pakiet in obraz.XmpData.Packages)
    {
        foreach (var paczka in pakiet)
        {
            if (paczka.Value is XmpArray)
            {
                XmpArray xmpArray = (XmpArray)paczka.Value;

                string wartośćXml = xmpArray.GetXmlValue();

                if (wartośćXml.Contains("<photoshop:LayerName>test1</photoshop:LayerName>"))
                {
                    czyOryginałZawiera = true;
                    break;
                }
            }
        }

        if (czyOryginałZawiera)
        {
            break;
        }
    }
    obraz.Save(zapisanaŚcieżkaObrazuPsd);
}

// Znajdź podklucz XMP w zapisanym pliku
using (PsdImage obraz = (PsdImage)Image.Load(zapisanaŚcieżkaObrazuPsd))
{
    foreach (var pakiet in obraz.XmpData.Packages)
    {
        foreach (var paczka in pakiet)
        {
            if (paczka.Value is XmpArray)
            {
                XmpArray xmpArray = (XmpArray)paczka.Value;

                string wartośćXml = xmpArray.GetXmlValue();

                if (wartośćXml.Contains("<photoshop:LayerName>test1</photoshop:LayerName>"))
                {
                    czyZapisanaZawiera = true;
                    break;
                }
            }
        }

        if (czyZapisanaZawiera)
        {
            break;
        }
    }
    obraz.Save(zapisanaŚcieżkaObrazuPsd);
}

if (czyOryginałZawiera && czyZapisanaZawiera)
{
    // Wszystko jest w porządku!
}
else
{
    throw new Exception("To nie działa");
}

PSDNET-1205. Po eksporcie rozmiar plików PSD z podfolderami wzrósł

string[] plikiŹródłowe = new string[] { "1lvlFoldersTest.psd", "5lvlFoldersTest.psd"};

foreach (var nazwaPliku in plikiŹródłowe)
{
    string ścieżkaPlikuŹródłowego = nazwaPliku;
    string ścieżkaPlikuWyjściowego = "output_" + nazwaPliku;

    using (PsdImage obraz = (PsdImage)Image.Load(ścieżkaPlikuŹródłowego))
    {
        obraz.Save(ścieżkaPlikuWyjściowego);
    }

    double rozmiarWynikuMb = new FileInfo(ścieżkaPlikuWyjściowego).Length / 1024d / 1024d;
    if (rozmiarWynikuMb > 1.9)
    {
        throw new Exception("Plik wynikowy jest większy niż powinien być.");
    }
}