Chiave Sommario Categoria
PSDNET-482 Supporto delle Risorse della Sezione delle Immagini #4000-4999 Plug-In resource(s) Funzionalità
PSDNET-875 Si verifica un’eccezione non gestita di tipo “System.OutOfMemoryException” in Aspose.PSD.dll Bug
PSDNET-1050 Dopo l’esportazione del file PSD, il risultato è molto più grande del file sorgente Bug
PSDNET-1083 Analisi errata dei dati per XmpResource Bug
PSDNET-1205 Dopo l’esportazione, le dimensioni dei file PSD con sottocartelle sono aumentate Bug

Cambiamenti nell’API pubblica

API aggiunte:

API rimosse:

Esempi di utilizzo:

PSDNET-482. Supporto delle Risorse della Sezione delle Immagini #4000-4999 Plug-In resource(s)

// Il codice seguente dimostra come impostare/aggiornare il tempo di ritardo nell'immagine della cornice temporale dei dati animati.
string fileSorgente = "3_animated.psd";
string psdOutput = "output_3_animated.psd";

T TrovaStruttura<T>(IEnumerable<OSTypeStructure> strutture, string nomeChiave) where T : OSTypeStructure
{
    foreach (var struttura in strutture)
    {
        if (struttura.KeyName.ClassName == nomeChiave)
        {
            return struttura as T;
        }
    }

    return null;
}

OSTypeStructure[] AggiungiOAggiornaStruttura(IEnumerable<OSTypeStructure> strutture, OSTypeStructure nuovaStruttura)
{
    List<OSTypeStructure> listaStrutture = new List<OSTypeStructure>(strutture);

    for (int i = 0; i < listaStrutture.Count; i++)
    {
        OSTypeStructure struttura = listaStrutture[i];
        if (struttura.KeyName.ClassName == nuovaStruttura.KeyName.ClassName)
        {
            listaStrutture.RemoveAt(i);
            break;
        }
    }

    listaStrutture.Add(nuovaStruttura);

    return listaStrutture.ToArray();
}

using (PsdImage immagine = (PsdImage)Image.Load(fileSorgente))
{
    foreach (var risorsaImmagine in immagine.ImageResources)
    {
        if (risorsaImmagine is AnimatedDataSectionResource)
        {
            var datiAnimati =
            (AnimatedDataSectionStructure) (risorsaImmagine as AnimatedDataSectionResource).AnimatedDataSection;
            var listaFrames = TrovaStruttura<ListStructure>(datiAnimati.Items, "FrIn");

            var frame1 = (DescriptorStructure)listaFrames.Types[1];

            // Crea il record di ritardo dell'immagine con valore 100 centesimi di secondo che corrisponde a 1 secondo.
            var ritardoFrame = new IntegerStructure(new ClassID("FrDl"));
            ritardoFrame.Value = 100; // imposta il tempo in centesimi di secondo.

            frame1.Structures = AggiungiOAggiornaStruttura(frame1.Structures, ritardoFrame);

            break;
        }
    }

    immagine.Save(psdOutput);
}

PSDNET-875. Si verifica un’eccezione non gestita di tipo “System.OutOfMemoryException” in Aspose.PSD.dll

string fileSrc = "001-.psd";
string percorsoJpg = "T_0003.jpg";
string percorsoOutput = "output_newPsd.psd";

using (var im = (PsdImage)Image.Load(fileSrc))
{
    using (FileStream fs = new FileStream(percorsoJpg, FileMode.Open))
    {
        var nuovoLivello = new Aspose.PSD.FileFormats.Psd.Layers.Layer(fs);
        nuovoLivello.DisplayName = "NuovoLivello";

        im.AddLayer(nuovoLivello);

        im.Save(percorsoOutput, true);   
    }
}

PSDNET-1050. Dopo l’esportazione del file PSD, il risultato è molto più grande del file sorgente

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

double dimensioneOutputMb = new FileInfo(output).Length / 1024d / 1024d;
if (dimensioneOutputMb > 6)
{
    throw new Exception("Il file di output è più grande di quanto dovrebbe essere.");
}

PSDNET-1083. Analisi errata dei dati per XmpResource

string percorsoImmaginePsdInput = @"input.psd";
string percorsoImmaginePsdSalvata = @"saved.psd";

bool contenutoOriginalePresente = false;
bool contenutoSalvatoPresente = false;

// Trova la chiave XMP secondaria nel file di input
using (PsdImage img = (PsdImage)Image.Load(percorsoImmaginePsdInput))
{
    foreach (var pacchetto in img.XmpData.Packages)
    {
        foreach (var pac in pacchetto)
        {
            if (pac.Value is XmpArray)
            {
                XmpArray xmpArray = (XmpArray)pac.Value;

                string valoreXml = xmpArray.GetXmlValue();

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

        if (contenutoOriginalePresente)
        {
            break;
        }
    }
    img.Save(percorsoImmaginePsdSalvata);
}

// Trova la chiave XMP secondaria nel file salvato
using (PsdImage img = (PsdImage)Image.Load(percorsoImmaginePsdSalvata))
{
    foreach (var pacchetto in img.XmpData.Packages)
    {
        foreach (var pac in pacchetto)
        {
            if (pac.Value is XmpArray)
            {
                XmpArray xmpArray = (XmpArray)pac.Value;

                string valoreXml = xmpArray.GetXmlValue();

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

        if (contenutoSalvatoPresente)
        {
            break;
        }
    }
    img.Save(percorsoImmaginePsdSalvata);
}

if (contenutoOriginalePresente && contenutoSalvatoPresente)
{
    // Tutto ok!
}
else
{
    throw new Exception("Non funziona");
}

PSDNET-1205. Dopo l’esportazione, le dimensioni dei file PSD con sottocartelle sono aumentate

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

foreach (var fileName in fileSorgenti)
{
    string percorsoSorgente = fileName;
    string percorsoOutput = "output_" + fileName;

    using (PsdImage immagine = (PsdImage)Image.Load(percorsoSorgente))
    {
        immagine.Save(percorsoOutput);
    }

    double dimensioneOutputMb = new FileInfo(percorsoOutput).Length / 1024d / 1024d;
    if (dimensioneOutputMb > 1.9)
    {
        throw new Exception("Il file di output è più grande di quanto dovrebbe essere.");
    }
}