Aspose.PSD for .NET 18.8 - Notes de publication

Clé Résumé Catégorie
PSDNET-68 Prise en charge de la propriété LayerCreationDateTime. Fonctionnalité
PSDNET-67 Prise en charge de la mise en évidence de SheetColor Fonctionnalité
PSDNET-66 Possibilité de fusionner des calques entre eux Fonctionnalité
PSDNET-65 Ajouter la prise en charge partielle de la propriété Text Layer BoundBox Fonctionnalité
PSDNET-64 Ajouter la prise en charge pour IopaResource Fonctionnalité
PSDNET-56 Prise en charge des effets de calque pour le format PSD Fonctionnalité
PSDNET-55 Support InterruptMonitor pour .Net Fonctionnalité
PSDNET-50 Permettre l’aplatissement des calques Fonctionnalité
PSDNET-49 Ajouter le rendu de la propriété d’opacité de remplissage dans les calques. Fonctionnalité
PSDNET-43 Mise en œuvre du rendu de la couche d’ajustement des courbes Fonctionnalité
PSDNET-42 Ajouter la prise en charge de la couche d’ajustement des courbes Fonctionnalité
PSDNET-41 Mise en œuvre du rendu de la couche d’ajustement des niveaux Fonctionnalité
PSDNET-40 Ajouter la prise en charge de la couche d’ajustement des niveaux Fonctionnalité
PSDNET-37 Ajouter la prise en charge de la couche d’ajustement du mélangeur de canaux Fonctionnalité
PSDNET-35 Ajouter la prise en charge de la couche d’ajustement de teinte/saturation Fonctionnalité
PSDNET-34 Mise en œuvre du rendu de la couche d’ajustement d’exposition pour l’exportation. Fonctionnalité
PSDNET-31 Ajouter la prise en charge du rendu pour exportation de la couche d’ajustement du mélangeur de canaux Fonctionnalité
PSDNET-26 Ajouter la prise en charge du masque d’écrêtage Fonctionnalité
PSDNET-13 Ajouter la prise en charge du masque de calque Fonctionnalité
PSDNET-9 Ajouter la prise en charge de la couche d’ajustement du filtre photo Fonctionnalité
PSDNET-8 Ajouter la prise en charge de la couche d’ajustement du mélangeur de canaux Fonctionnalité
PSDNET-7 Ajouter la prise en charge de la couche d’ajustement de l’exposition Fonctionnalité
PSDNET-6 Ajouter la prise en charge de la couche d’ajustement de luminosité/contraste Fonctionnalité
PSDNET-5 Ajouter la prise en charge partielle des calques d’ajustement Fonctionnalité
PSDNET-3 Ajouter la prise en charge de l’option de texte PSD NoBreak Fonctionnalité
PSDNET-2 Possibilité d’ajouter des calques de texte à l’exécution Fonctionnalité
PSDNET-62 Le Codec TIFF ne peut pas enregistrer une image de canal 16 bits Amélioration
PSDNET-61 L’enregistrement de l’image PSD produit des couleurs invalides Amélioration
PSDNET-60 La coordonnée du coin supérieur gauche est incorrecte lors de la mise à jour Amélioration
PSDNET-59 Exception lors de la mise à jour des calques de texte Amélioration
PSDNET-58 Exposer la propriété Codec de l’image JPEG2000 au public Amélioration
PSDNET-57 Correction des options 24 bpp pour l’exportation vers BMP Amélioration
PSDNET-46 La couche d’ajustement est ignorée pour la conversion PSD CMJN en TIFF ou JPG Amélioration

Exemples d’utilisation :

PSDNET-68 Prise en charge de la propriété LayerCreationDateTime

 // Exemple d'utilisation de la propriété LayerCreationDateTime

string sourceFileName = "UnCalque.psd";

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

{

    var calque = im.Calques[0];

    var creationDateTime = calque.LayerCreationDateTime;

    var expectedDateTime = new DateTime(2018, 7, 17, 8, 57, 24, 769);

    Assert.AreEqual(expectedDateTime, creationDateTime);

    var maintenant = DateTime.Now;

    var calqueCree = im.AjouterCalqueAjustementNiveaux();

    // Vérifier si la date de création est mise à jour sur les nouveaux calques créés

    Assert.True(maintenant <= calqueCree.LayerCreationDateTime);

}

PSDNET-67 Prise en charge de la mise en évidence de SheetColor

 // Exemple d'utilisation de la propriété SheetColorHighlight

string sourceFileName = "ExempleMiseEnAvantSheetColor.psd";

string exportPath = "ExempleMiseEnAvantSheetColorModifie.psd";

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

{

    var calque1 = im.Calques[0];

    Assert.AreEqual(SheetColorHighlightEnum.Violet, calque1.SheetColorHighlight);

    var calque2 = im.Calques[1];

    Assert.AreEqual(SheetColorHighlightEnum.Orange, calque2.SheetColorHighlight);



    calque1.SheetColorHighlight = SheetColorHighlightEnum.Yellow;



    im.Save(exportPath);	

}

PSDNET-66 Possibilité de fusionner des calques entre eux

 // Exemple de fusion de deux calques

var sourceFile1 = "ExempleOpaciteDeRemplissage.psd";

var sourceFile2 = "TroisCalquesReguliersSemiTransparent.psd";

var exportPath = "CalquesFusionnesAPartirDeDeuxPsdDifferents.psd";

using (var im1 = (PsdImage)(Image.Load(sourceFile1)))

{

    var calque1 = im1.Calques[1];

    using (var im2 = (PsdImage)(Image.Load(sourceFile2)))

    {

        var calque2 = im2.Calques[0];

        calque1.FusionnerCalqueAvec(calque2);

	im2.Save(exportPath);	

    }

}

PSDNET-65 Ajouter la prise en charge partielle de la propriété Text Layer BoundBox

 // Exemple de Boîte de texte

string sourceFileName = "CalqueAvecTexte.psd";

var tailleOptiqueCorrecte = new Taille(127, 45);

var boiteCorrecte = new Taille(172, 62);

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

{

    var calqueTexte = (CalqueTexte)im.Calques[1];

    // La taille du calque est la taille de la zone de rendu

    var tailleOptique = calqueTexte.Taille;

    Assert.AreEqual(tailleOptiqueCorrecte, tailleOptique);

    // TextBoundBox est la taille maximale du calque pour le calque de texte. 

    // Dans cette zone, PS essaiera de adapter votre texte

    var boiteTexte = calqueTexte.TextBoundBox;

    Assert.AreEqual(boiteCorrecte, boiteTexte);

}

PSDNET-64 Ajouter la prise en charge pour IopaResource

 // Modifier la propriété d'opacité de remplissage en changeant IopaResource

string sourceFileName = "ExempleOpaciteDeRemplissage.psd";

string exportPath = "ExempleOpaciteDeRemplissageModifie.psd";

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

{

    var calque = im.Calques[2];



    var ressources = calque.Ressources;

    foreach (var ressource in ressources)

    {

        if (ressource est IopaResource)

        {

            var ressourceIopa = (IopaResource)ressource;

            ressourceIopa.OpaciteRemplissage = 200;

        }

    }



    im.Save(exportPath);	

}

PSDNET-56 Prise en charge des effets de calque pour le format PSD

 using (

    PsdImage image =

        (PsdImage)

        Aspose.PSD.Image.Load(

            sourceFileName,

            new Aspose.PSD.ImageLoadOptions.PsdLoadOptions()

            {

                LoadEffectsResource = true,

                UseDiskForLoadEffectsResource = true

            }))

{

    image.Save(

                output,

                new Aspose.PSD.ImageOptions.PngOptions()

                {

                    TypeCouleur =

                            Aspose.PSD.FormatsFichier.Png

                            .TypeCouleurPng

                            .VraiCouleurAvecAlpha

                });

}

PSDNET-55 Support InterruptMonitor pour .Net

         public void TestInterrupteurMonitor(string dir, string ouputDir)

        {

            OptionsImageBase saveOptions = new OptionsImage.PngOptions();

            Multithreading.InterruptMonitor monitor = new Multithreading.InterruptMonitor();

            TravailleurEnregistrerImage worker = new TravailleurEnregistrerImage(dir + "grand.psb", dir + "sortie_grande.png", saveOptions, monitor);

            Fil thread = new Fil(new ThreadStart(worker.ThreadProc));

            try

            {

                thread.Start();

                // Le délai d'attente doit être inférieur au temps nécessaire pour la conversion complète de l'image (sans interruption).

                FilSommeil(3000);

                // Interrompre le processus

                monitor.Interrompre();

                System.Console.WriteLine("Interruption du fil d'enregistrement #{0} à {1}", thread.ManagedThreadId, System.DateTime.Now);

                // Attendre l'interruption...

                thread.Join();

            }

            finally

            {

                // Si le fichier à supprimer n'existe pas, aucune exception n'est levée.

                System.IO.File.Delete(dir + "sortie_grande.png");

            }

        }

        /// <summary>

        /// Initie la conversion d'image et attend son interruption.

        /// </summary>

        private class TravailleurEnregistrerImage

        {

            /// <summary>

            /// Le chemin de l'image d'entrée.

            /// </summary>

            private readonly string cheminEntree;

            /// <summary>

            /// Le chemin de l'image de sortie.

            /// </summary>

            private readonly string cheminSortie;

            /// <summary>

            /// Le moniteur d'interruption.

            /// </summary>

            private readonly Multithreading.InterruptMonitor monitor;

            /// <summary>

            /// Les options d'enregistrement.

            /// </summary>

            private readonly OptionsImageBase optionsEnregistrement;

            /// <summary>

            /// Initialise une nouvelle instance de la classe TravailleurEnregistrerImage.

            /// </summary>

            /// <param name="cheminEntree">Le chemin de l'image d'entrée.</param>

            /// <param name="cheminSortie">Le chemin de l'image de sortie.</param>

            /// <param name="optionsEnregistrement">Les options d'enregistrement.</param>

            /// <param name="monitor">Le moniteur d'interruption.</param>

            public TravailleurEnregistrerImage(string cheminEntree, string cheminSortie, OptionsImageBase optionsEnregistrement, Multithreading.InterruptMonitor monitor)

            {

                this.cheminEntree = cheminEntree;

                this.cheminSortie = cheminSortie;

                this.optionsEnregistrement = optionsEnregistrement;

                this.monitor = monitor;

            }

            /// <summary>

            /// Essaye de convertir une image d'un format à un autre. Gère l'interruption.

            /// </summary>

            public void ThreadProc()

            {

                using (Image image = Image.Load(this.cheminEntree))

                {

                    Multithreading.InterruptMonitor.ThreadInstanceLocale = this.monitor;

                    try

                    {

                        image.Save(this.cheminSortie, this.optionsEnregistrement);

                        Asserter.Fails("Interruption attendue.");

                    }

                    attraper (CoreExceptions.OperationInterruptionException e)

                    {

                        System.Console.WriteLine("Fin du fil d'enregistrement #{0} à {1}", System.Threading.Thread.CurrentThread.ManagedThreadId, System.DateTime.Now);

                        System.Console.WriteLine(e);

                    }

                    attraper (System.Exception e)

                    {

                        System.Console.WriteLine(e);

                    }

                    enfin

                    {

                        Multithreading.InterruptMonitor.ThreadInstanceLocale = null;

                    }

                }

            }

        }

PSDNET-50 Prise en charge de l’aplatir des calques

 // Aplatir tout le PSD

string sourceFileName = "TroisCalquesReguliersSemiTransparent.psd";

string exportPath = "TroisCalquesReguliersSemiTransparentAplatis.psd";

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

{

    im.AplatirImage();

    im.Save(exportPath);	 

}

// Fusionner un calque dans un autre

string sourceFileName = "TroisCalquesReguliersSemiTransparent.psd";

string exportPath = "TroisCalquesReguliersSemiTransparentAplatisCalqueParCalque.psd";

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

{

    var calqueInferieur = im.Calques[0];

    var calqueIntermediaire = im.Calques[1];

    var calqueSuperieur = im.Calques[2];

    var calque1 = im.FusionnerCalques(calqueInferieur, calqueIntermediaire);

    var calque2 = im.FusionnerCalques(calque1, calqueSuperieur);

    // Configurer les calques fusionnés

    im.Calques = new Calque[] { calque2 };



    im.Save(exportPath);	 

}

PSDNET-49 Ajouter le rendu de la propriété d’opacité de remplissage dans les calques

 // Changer la propriété d'opacité de remplissage

string sourceFileName = "ExempleOpaciteDeRemplissage.psd";

string exportPath = "ExempleOpaciteDeRemplissageModifie.psd";

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

{

    var calque = im.Calques[2];

    calque.OpaciteRemplissage = 5;

    im.Save(exportPath);	

}

PSDNET-43 Mise en œuvre du rendu de la couche d’ajustement des courbes

 // Édition de la couche de courbes

string sourceFileName = "CoucheAjustementCourbes";

string cheminPsdApresChangement = "CoucheAjustementCourbesModif";

string cheminementExportPng = "CoucheAjustementCourbesModif";

pour (int j = 1; j < 2; j++)

{

    en utilisant (var im = ChargementFichier(sourceFileName + j.ToString() + ".psd"))

    {

        foreach (var calque in im.Calques)

	{

            if (calque est CoucheCourbes)

            {

                 var calqueCourbes = (CoucheCourbes)calque;

                 si (calqueCourbes.IsDiscreteManagerUsed)

                 {

                      var gestionnaire = (GestionnaireDiscreteCourbes)calqueCourbes.GetGestionnaireCourbes();

                      pour (int i = 10; i < 50; i++)

                      {

                           gestionnaire.DefinirValeurAPosition(0, (byte)i, (byte)(15 + (i * 2)));

                      }

                 }

                 autre

                 {

                      var gestionnaire = (GestionnaireContinuCourbes)calqueCourbes.GetGestionnaireCourbes();

                      gestionnaire.AjouterPointCourbe(0, 50, 100);

                      gestionnaire.AjouterPointCourbe(0, 150, 130);

                 }

            }

        }

    }



    // Enregistrer le PSD

    im.Save(cheminPsdApresChangement + j.ToString() + ".psd");



    // Enregistrer le PNG

    var optionsEnregistrement = new OptionsPng();

    optionsEnregistrement.TypeCouleur = TypeCouleurPng.VraiCouleurAvecAlpha;

    im.Save(cheminementExportPng + j.ToString() + ".png", optionsEnregistrement);

}

PSDNET-42 Ajouter la prise en charge de la couche d’ajustement des courbes

 // Édition de la couche de courbes

string sourceFileName = "CoucheAjustementCourbes";

string cheminPsdApresChangement = "CoucheAjustementCourbesModif";

pour (int j = 1; j < 2; j++)

{

    en utilisant (var im = ChargementFichier(sourceFileName + j.ToString() + ".psd"))

    {

         foreach (var calque in im.Calques)

	 {

            if (calque est CoucheCourbes)

            {

                 var calqueCourbes = (CoucheCourbes)calque;

                 si (calqueCourbes.IsDiscreteManagerUsed)

                 {

                      var gestionnaire = (GestionnaireDiscreteCourbes)calqueCourbes.GetGestionnaireCourbes();

                      pour (int i = 10; i < 50; i++)

                      {

                           gestionnaire.DefinirValeurAPosition(0, (byte)i, (byte)(15 + (i * 2)));

                      }

                 }

                 autre

                 {

                      var gestionnaire = (GestionnaireContinuCourbes)calqueCourbes.GetGestionnaireCourbes();

                      gestionnaire.AjouterPointCourbe(0, 50, 100);

                      gestionnaire.AjouterPointCourbe(0, 150, 130);

                 }

	 }

    }



    // Save PSD

    im.Save(cheminPsdApresChangement + j.ToString() + ".psd");

}

PSDNET-41 Mise en œuvre du rendu de la couche d’ajustement des niveaux

 // Édition de la couche de niveaux

string sourceFileName = "CoucheAjustementNiveaux.psd";

string cheminPsdApresChangement = "CoucheAjustementNiveauxModif.psd";

string cheminementExportPng = "CoucheAjustementNiveauxModif.png";

utilisation (var im = ChargementFichier(sourceFileName))

{

    pour chaque (var calque dans im.Calques)

    {

        if (calque est CoucheNiveaux)

        {

            var calqueNiveaux = (CoucheNiveaux)calque;

            var canal = calqueNiveaux.ObtenirCanal(0);

            canal.NiveauMilieuEntree = 2.0f;

            canal.NiveauOmbreEntree = 10;

            canal.NiveauHighlightEntree = 230;

            canal.NiveauOmbreSortie = 20;

            canal.NiveauHighlightSortie = 200;

        }

    }



    // Enregistrer PSD

    im.Save(cheminPsdApresChangement);



    // Enregistrer PNG

    var optionsEnregistrement = new OptionsPng();

    optionsEnregistrement.TypeCouleur = TypeCouleurPng.VraiCouleurAvecAlpha;

    im.Save(cheminementExportPng, optionsEnregistrement);

}

PSDNET-40 Ajouter la prise en charge de la couche d’ajustement des niveaux

 // Édition de la couche de niveaux

string sourceFileName = "CoucheAjustementNiveaux.psd";

string cheminPsdApresChangement = "CoucheAjustementNiveauxModif.psd";

utilisation (var im = ChargementFichier(sourceFileName))

{

    pour chaque (var calque dans im.Calques)

    {

        if (calque est CoucheNiveaux)

        {

            var calqueNiveaux = (CoucheNiveaux)calque;

            var canal = calqueNiveaux.ObtenirCanal(0);

            canal.NiveauMilieuEntree = 2.0f;

            canal.NiveauOmbreEntree = 10;

            canal.NiveauHighlightEntree = 230;

            canal.NiveauOmbreSortie = 20;

            canal.NiveauHighlightSortie = 200;

        }

    }



    // Enregistrer PSD

    im.Save(cheminPsdApresChangement);

}

PSDNET-37 Ajouter la prise en charge de la couche d’ajustement du mélangeur de canaux

// Mélangeur de canaux Rvb

string sourceFileName = "CoucheAjustementMélangeurCanauxRvb.psd";

string cheminPsdApresChangement = "CoucheAjustementMélangeurCanauxRvbModif.psd";

utilisation (var im = ChargementFichier(sourceFileName))

{

    pour chaque (var calque dans im.Calques)

    {

         if (calque est CoucheMélangeurCanauxRvb)

         {

              var calqueRgb = (CoucheMélangeurCanauxRvb)calque;

              calqueRgb.CanalRouge.Bleu = 100;

              calqueRgb.CanalBleu.Vert = -100;

              calqueRgb.CanalVert.Constante = 50;

         }

    }



    im.Save(cheminPsdApresChangement);

}

// Mélangeur de canaux Cmyk

string sourceFileName = "CoucheAjustementMélangeurCanauxCmyk.psd";

string cheminPsdApresChangement = "CoucheAjustementMélangeurCanauxCmykModif.psd";

utilisation (var im = ChargementFichier(sourceFileName))

{

    pour chaque (var calque dans im.Calques)

    {

         if (calque est CoucheMélangeurCanauxCmyk)

         {

             var calqueCmyk = (CoucheMélangeurCanauxCmyk)calque;

             calqueCmyk.CanalCyan.Noir = 20;

             calqueCmyk.CanalMagenta.Jaune = 50;

             calqueCmyk.CanalJaune.Cyan = -25;

             calqueCmyk.CanalNoir.Jaune = 25;

         }

    }



    im.Save(cheminPsdApresChangement);

}





// Ajout du nouveau calque (Cmyk pour cet exemple)

string sourceFileName = "CmykAvecAlpha.psd";

string cheminPsdApresChangement = "CoucheAjustementMélangeurCanauxCmykModif.psd";

utilisation (var im = ChargementFichier(sourceFileName))

{

    var nouveauCalque = im.AjouterCoucheAjustementMélangeurCanaux();

    nouveauCalque.ObtenirCanalParIndice(2).Constante = 50;

    nouveauCalque.ObtenirCanalParIndice(0).Constante = 50;



    im.Save(cheminPsdApresChangement);

}		

PSDNET-35 Ajouter la prise en charge de la couche d’ajustement de teinte/saturation

 // Édition de la couche de teinte/saturation

string sourceFileName = "CoucheAjustementTeinteSaturation.psd";

string cheminPsdApresChangement = "CoucheAjustementTeinteSaturationModif.psd";

utilisation (var im = ChargementFichier(sourceFileName))

{

     pour chaque (var calque dans im.Calques)

     {

           if (calque est CoucheTeinteSaturation)

           {

                var calqueTeinte = (CoucheTeinteSaturation)calque;

                calqueTeinte.Teinte = -25;

                calqueTeinte.Saturation = -12;

                calqueTeinte.Luminosite = 67;

                var plageCouleurs = calqueTeinte.ObtenirPlage(2);

                plageCouleurs.Teinte = -40;

                plageCouleurs.Saturation = 50;

                plageCouleurs.Luminosite = -20;

                plageCouleurs.BordureLaPlusAGauche = 300;

           }

      }

      im.Save(cheminPsdApresChangement);

}



// Ajout de la couche de teinte/saturation

string sourceFileName = "ExemplePhoto.psd";

string cheminPsdApresChangement = "ExemplePhotoAjoutTeinteSaturation.psd";



utilisation (PsdImage im = ChargementFichier(sourceFileName))

{

     this.EnregistrerPourTestVisuel(im, this.CheMin, prefix + fichier, "avant");

     var calqueTeinte = im.AjouterCoucheAjustementTeinteSaturation();

     calqueTeinte.Teinte = -25;

     calqueTeinte.Saturation = -12;

     calqueTeinte.Luminosite = 67;

     var plageCouleurs = calqueTeinte.ObtenirPlage(2);

     plageCouleurs.Teinte = -160;

     plageCouleurs.Saturation = 100;

     plageCouleurs.Luminosite = 20;

     plageCouleurs.BordureLaPlusAGauche = 300;



     im.Save(cheminPsdApresChangement);

}