Aspose.PSD pour .NET 19.9 - Notes de version

Clé Résumé Catégorie
PSDNET-160 Nom de calque incorrect extrait Fonctionnalité
PSDNET-175 Obtention des propriétés de texte d’une partie différente de texte à l’intérieur de PSD TextLayer Fonctionnalité
PSDNET-190 Prise en charge de l’ajout d’un groupe de calques Fonctionnalité
PSDNET-192 Prise en charge de la propriété d’échelle pour le calque de remplissage de dégradé Fonctionnalité
PSDNET-162 Ajustement de la luminosité Amélioration
PSDNET-174 IndexOutOfRangeException lors de l’enregistrement de l’image PSD en tant que JPEG Bogue
PSDNET-180 La mise à jour du texte du calque de texte lance une exception Bogue
PSDNET-182 Enregistrement de l’image PSD après une opération RotateFlip produit un fichier corrompu qui ne peut pas être ouvert Bogue

Changements d’API publics

APIs ajoutées:

  • M:Aspose.PSD.FileFormats.Psd.Layers.LayerGroup.AddLayerGroup(System.String,System.Int32)
  • T:Aspose.PSD.FileFormats.Psd.Layers.Text.IText
  • P:Aspose.PSD.FileFormats.Psd.Layers.Text.IText.Items
  • P:Aspose.PSD.FileFormats.Psd.Layers.Text.IText.Text
  • M:Aspose.PSD.FileFormats.Psd.Layers.Text.IText.ProducePortion
  • M:Aspose.PSD.FileFormats.Psd.Layers.Text.IText.AddPortion(Aspose.PSD.FileFormats.Psd.Layers.Text.ITextPortion)
  • M:Aspose.PSD.FileFormats.Psd.Layers.Text.IText.InsertPortion(Aspose.PSD.FileFormats.Psd.Layers.Text.ITextPortion,System.Int32)
  • M:Aspose.PSD.FileFormats.Psd.Layers.Text.IText.RemovePortion(System.Int32)
  • M:Aspose.PSD.FileFormats.Psd.Layers.Text.IText.UpdateLayerData
  • T:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextParagraph
  • P:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextParagraph.Justification
  • P:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextParagraph.FirstLineIndent
  • P:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextParagraph.StartIndent
  • P:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextParagraph.EndIndent
  • P:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextParagraph.SpaceBefore
  • P:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextParagraph.SpaceAfter
  • P:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextParagraph.AutoHyphenate
  • P:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextParagraph.HyphenatedWordSize
  • P:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextParagraph.PreHyphen
  • P:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextParagraph.PostHyphen
  • P:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextParagraph.ConsecutiveHyphens
  • P:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextParagraph.Zone
  • P:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextParagraph.WordSpacing
  • P:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextParagraph.LetterSpacing
  • P:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextParagraph.GlyphSpacing
  • P:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextParagraph.AutoLeading
  • P:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextParagraph.LeadingType
  • P:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextParagraph.Hanging
  • P:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextParagraph.Burasagari
  • P:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextParagraph.KinsokuOrder
  • P:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextParagraph.EveryLineComposer
  • M:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextParagraph.Apply(Aspose.PSD.FileFormats.Psd.Layers.Text.ITextParagraph)
  • M:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextParagraph.IsEqual(Aspose.PSD.FileFormats.Psd.Layers.Text.ITextParagraph)
  • T:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextPortion
  • P:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextPortion.Text
  • P:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextPortion.Style
  • P:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextPortion.Paragraph
  • T:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextStyle
  • P:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextStyle.FontSize
  • P:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextStyle.AutoLeading
  • P:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextStyle.Leading
  • P:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextStyle.Tracking
  • P:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextStyle.Kerning
  • P:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextStyle.FillColor
  • P:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextStyle.StrokeColor
  • P:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextStyle.HindiNumbers
  • M:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextStyle.Apply(Aspose.PSD.FileFormats.Psd.Layers.Text.ITextStyle)
  • M:Aspose.PSD.FileFormats.Psd.Layers.Text.ITextStyle.IsEqual(Aspose.PSD.FileFormats.Psd.Layers.Text.ITextStyle)
  • P:Aspose.PSD.FileFormats.Psd.Layers.TextLayer.TextData
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.IGradientFillSettings.Scale
  • P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.GdFlResource.Scale
  • P:Aspose.PSD.FileFormats.Psd.Layers.FillSettings.GradientFillSettings.Scale

APIs supprimées:

  • Aucune

Exemples d’utilisation:

PSDNET-160. Nom de calque incorrect extrait

Pour afficher correctement le nom du calque, utilisez la propriété DisplayName. Un setter est désormais ajouté pour cette propriété et la propriété peut être modifiée. Lorsque Photoshop enregistre le nom du calque en utilisant la propriété Nom, les caractères coréens sont stockés comme byte 63'?' en ASCII. Utilisez la propriété DisplayName car la propriété Nom ne prend pas en charge les caractères coréens.

             // apporter des modifications dans les noms de calques et enregistrer
            using (var image = (PsdImage)Image.Load("calques avec noms.psd"))
            {
                for (int i = 0; i < image.Layers.Length; i++)
                {
                    var calque = image.Layers[i];
                    // définir une nouvelle valeur dans la propriété DisplayName
                    calque.DisplayName += "_modifié";
                }
                image.Save("sortie.psd");
            }

PSDNET-175. Obtention des propriétés de texte d’une partie différente de texte à l’intérieur de PSD TextLayer

            const double Tolérance = 0,0001;
            var cheminFichier = "ParagraphesTroisCouleurs.psd";
            var cheminSortie = "ParagraphesTroisCouleurs_sortie.psd";
            using (var im = (PsdImage)Image.Load(cheminFichier))
            {
                for (int i = 0; i < im.Layers.Length; i++)
                {
                    var calque = im.Layers[i] as TextLayer;
                    if (calque != null)
                    {
                        var portions = calque.TextData.Items;
                        if (portions.Length != 4)
                        {
                            throw new Exception();
                        }
                        // Vérification du texte de chaque portion
                        if (portions[0].Text != "Ancien " ||
                            portions[1].Text != "couleur" ||
                            portions[2].Text != " texte\r" ||
                            portions[3].Text != "Deuxième paragraphe\r")
                        {
                            throw new Exception();
                        }
                        // Vérification des données de paragraphe
                        // Les paragraphes ont une justification différente
                        if (
                            portions[0].Paragraph.Justification != 0 ||
                            portions[1].Paragraph.Justification != 0 ||
                            portions[2].Paragraph.Justification != 0 ||
                            portions[3].Paragraph.Justification != 2)
                        {
                            throw new Exception();
                        }
                        // Toutes les autres propriétés du premier et du deuxième paragraphe sont égales
                        for (int j = 0; j < portions.Length; j++)
                        {
                            var paragraphe = portions[j].Paragraph;
                            if (Math.Abs(paragraphe.AutoLeading - 1,2) > Tolérance ||
                                paragraphe.AutoHyphenate != false ||
                                paragraphe.Burasagari != false ||
                                paragraphe.ConsecutiveHyphens != 8 ||
                                Math.Abs(paragraphe.StartIndent) > Tolérance ||
                                Math.Abs(paragraphe.EndIndent) > Tolérance ||
                                paragraphe.EveryLineComposer != false ||
                                Math.Abs(paragraphe.FirstLineIndent) > Tolérance ||
                                paragraphe.GlyphSpacing.Length != 3 ||
                                Math.Abs(paragraphe.GlyphSpacing[0] - 1) > Tolérance ||
                                Math.Abs(paragraphe.GlyphSpacing[1] - 1) > Tolérance ||
                                Math.Abs(paragraphe.GlyphSpacing[2] - 1) > Tolérance ||
                                paragraphe.Hanging != false ||
                                paragraphe.HyphenatedWordSize != 6 ||
                                paragraphe.KinsokuOrder != 0 ||
                                paragraphe.LetterSpacing.Length != 3 ||
                                Math.Abs(paragraphe.LetterSpacing[0]) > Tolérance ||
                                Math.Abs(paragraphe.LetterSpacing[1]) > Tolérance ||
                                Math.Abs(paragraphe.LetterSpacing[2]) > Tolérance ||
                                paragraphe.LeadingType != LeadingMode.Auto ||
                                paragraphe.PreHyphen != 2 ||
                                paragraphe.PostHyphen != 2 ||
                                Math.Abs(paragraphe.SpaceBefore) > Tolérance ||
                                Math.Abs(paragraphe.SpaceAfter) > Tolérance ||
                                paragraphe.WordSpacing.Length != 3 ||
                                Math.Abs(paragraphe.WordSpacing[0] - 0,8) > Tolérance ||
                                Math.Abs(paragraphe.WordSpacing[1] - 1,0) > Tolérance ||
                                Math.Abs(paragraphe.WordSpacing[2] - 1,33) > Tolérance ||
                                Math.Abs(paragraphe.Zone - 36,0) > Tolérance)
                            {
                                throw new Exception();
                            }
                        }
                        // Vérification des données de style
                        // Les styles ont des couleurs et des tailles de police différentes
                        if (Math.Abs(portions[0].Style.FontSize - 12) > Tolérance ||
                            Math.Abs(portions[1].Style.FontSize - 12) > Tolérance ||
                            Math.Abs(portions[2].Style.FontSize - 12) > Tolérance ||
                            Math.Abs(portions[3].Style.FontSize - 10) > Tolérance)
                        {
                            throw new Exception();
                        }
                        if (portions[0].Style.FillColor != Color.FromArgb(255, 145, 0, 0) ||
                            portions[1].Style.FillColor != Color.FromArgb(255, 201, 128, 2) ||
                            portions[2].Style.FillColor != Color.FromArgb(255, 18, 143, 4) ||
                            portions[3].Style.FillColor != Color.FromArgb(255, 145, 42, 100))
                        {
                            throw new Exception();
                        }
                        for (int j = 0; j < portions.Length; j++)
                        {
                            var style = portions[j].Style;
                            if (style.AutoLeading != false ||
                                style.HindiNumbers != false ||
                                style.Kerning != 0 ||
                                style.Leading != 0 ||
                                style.StrokeColor != Color.FromArgb(255, 175, 90, 163) ||
                                style.Tracking != 50)
                            {
                                throw new Exception();
                            }
                        }
                        // Exemple de modification de texte
                        portions[0].Text = "Bonjour ";
                        portions[1].Text = "le Monde";
                        // Exemple de suppression de portions de texte
                        calque.TextData.RemovePortion(3);
                        calque.TextData.RemovePortion(2);
                        // Exemple d'ajout d'une nouvelle portion de texte
                        var portionCréée = calque.TextData.ProducePortion();
                        portionCréée.Text = "!!!\r";
                        calque.TextData.AddPortion(portionCréée);
                        portions = calque.TextData.Items;
                        // Exemple de modification de paragraphe et de style pour les portions
                        // Définir une justification correcte
                        portions[0].Paragraph.Justification = 1;
                        portions[1].Paragraph.Justification = 1;
                        portions[2].Paragraph.Justification = 1;
                        // Différentes couleurs pour chaque style. Elles seront modifiées, mais le rendu n'est pas entièrement pris en charge
                        portions[0].Style.FillColor = Color.Aquamarine;
                        portions[1].Style.FillColor = Color.Violet;
                        portions[2].Style.FillColor = Color.LightBlue;
                        // Différente police. Elle sera modifiée, mais le rendu n'est pas entièrement pris en charge
                        portions[0].Style.FontSize = 6;
                        portions[1].Style.FontSize = 8;
                        portions[2].Style.FontSize = 10;
                        calque.TextData.UpdateLayerData();
                        im.Save(cheminSortie, new PsdOptions(im));
                        break;
                    }
                }
            }

PSDNET-190. Prise en charge de l’ajout d’un groupe de calques

             // -Groupe 1
            // --Calque 1
            // --Groupe 2
            // ---Calque 2
            // ---Calque 3
            // --Calque 4
            string dossierDonnées = "test_psdnet190.psd";
            var optionsCréation = new PsdOptions();
            optionsCréation.Source = new FileCreateSource(dossierDonnées, false);
            optionsCréation.Palette = new PsdColorPalette(new Color[] { Color.Green });
            using (var imagePSD = (PsdImage)Image.Create(optionsCréation, 500, 500))
            {
                LayerGroup groupe1 = imagePSD.AddLayerGroup("Groupe 1", 0, true);
                Layer calque1 = new Layer(imagePSD);
                calque1.Name = "Calque 1";
                groupe1.AddLayer(calque1);
                LayerGroup groupe2 = groupe1.AddLayerGroup("Groupe 2", 1);
                Layer calque2 = new Layer(imagePSD);
                calque2.Name = "Calque 2";
                groupe2.AddLayer(calque2);
                Layer calque3 = new Layer(imagePSD);
                calque3.Name = "Calque 3";
                groupe2.AddLayer(calque3);
                Layer calque4 = new Layer(imagePSD);
                calque4.Name = "Calque 4";
                groupe1.AddLayer(calque4);
                imagePSD.Save();
            }

PSDNET-192. Prise en charge de la propriété d’échelle pour le calque de remplissage de dégradé

            using (var image = (PsdImage)Image.Load("RemplissageCalqueDégradé.psd"))
            {
                // obtention d'un calque de remplissage
                FillLayer calqueRemplissage = null;
                foreach (var calque in image.Layers)
                {
                    calqueRemplissage = calque as FillLayer;
                    if (calqueRemplissage != null)
                    {
                        break;
                    }
                }
                var paramètres = calqueRemplissage.FillSettings as IGradientFillSettings;
                // mise à jour de la valeur d'échelle
                paramètres.Scale = 200;
                calqueRemplissage.Update(); // Met à jour les données de pixels
                image.Save("imageMiseAEchelle.png", new PngOptions() { ColorType = PngColorType.TruecolorWithAlpha });
            }

PSDNET-174. IndexOutOfRangeException lors de l’enregistrement de l’image PSD en tant que JPEG

         using (var image = Aspose.PSD.Image.Load("ExemplePSD.psd"))
        {
            image.Save("exempleJPG.jpg", new JpegOptions());
        }

PSDNET-180. La mise à jour du texte du calque de texte lance une exception

           // La mise à jour du texte du calque de texte lance une exception

            string cheminFichier = "FlipVertical.psd";

            string cheminSortie =