Notes de version Aspose.PSD pour .NET 23.7
Clé | Résumé | Catégorie |
---|---|---|
PSDNET-802 | Ajouter la capacité d’exporter chaque calque d’un fichier PSD vers un fichier GIF animé | Fonctionnalité |
PSDNET-1441 | Assigner la propriété Remplissage du calque de forme à partir de la ressource VSCG | Fonctionnalité |
PSDNET-1534 | Ajouter de nouveaux types de déformation (arc et arche) | Fonctionnalité |
PSDNET-1543 | Changer l’application qui enregistre le fichier PSD en Aspose.PSD si la propriété UpdateMetadata est définie à true | Fonctionnalité |
PSDNET-1567 | Augmenter la zone de calcul de l’image déformée | Fonctionnalité |
PSDNET-1471 | Le calque d’ajustement noir et blanc traite mal la semi-transparence | Problème |
PSDNET-1505 | Le remplacement du contenu de l’objet intelligent (lorsque l’option AllowWarpRepaint est active) échoue après 2 minutes de calcul | Problème |
PSDNET-1585 | Ajouter la capacité d’obtenir la véritable position de gauche et de haut du groupe de calques | Problème |
PSDNET-1589 | Le redimensionnement du calque ne fonctionne pas correctement lorsque le fichier PSD a une ressource Vogk avec des structures en points | Problème |
PSDNET-1608 | TextBound ne fonctionne pas comme prévu | Problème |
PSDNET-1612 | Ajout d’un calque créé avec le constructeur par défaut à une image PSD ne lui ajoute pas de ressources par défaut | Problème |
PSDNET-1623 | La propriété LoopesCount de Timeline est ignorée lors de l’exportation vers un GIF animé | Problème |
Changements d’API publique
APIs ajoutées :
- P:Aspose.PSD.ImageOptions.PsdOptions.UpdateMetadata
- F:Aspose.PSD.FileFormats.Ai.AiFormatVersion.Pdf16
- F:Aspose.PSD.FileFormats.Ai.AiFormatVersion.Pdf17
- P:Aspose.PSD.Xmp.Schemas.XmpBaseSchema.XmpBasicPackage.Item(System.String)
- M:Aspose.PSD.Xmp.Schemas.XmpBaseSchema.XmpBasicPackage.SetValue(System.String,Aspose.PSD.Xmp.IXmlValue)
- M:Aspose.PSD.Xmp.Schemas.XmpBaseSchema.XmpBasicPackage.ContainsKey(System.String)
- P:Aspose.PSD.FileFormats.Psd.Layers.ShapeLayer.Fill
APIs supprimées :
- P:Aspose.PSD.FileFormats.Psd.Layers.LayerResources.VectorPath.FillColor
Exemples d’utilisation:
PSDNET-802. Ajouter la capacité d’exporter chaque calque d’un fichier PSD vers un fichier GIF animé
string src = "ChaqueCalqueEstFrame.psd";
string outputGif = "out_ChaqueCalqueEstFrame.gif";
string outputPsd = "out_ChaqueCalqueEstFrame.psd";
using (var psdImage = (PsdImage)Image.Load(src))
{
// Créer des images pour chaque calque.
int nombreCalques = psdImage.Layers.Length;
var chronologie = psdImage.Timeline;
Frame[] frames = new Frame[nombreCalques];
for (int i = 0; i < nombreCalques; i++)
{
frames[i] = new Frame();
LayerState[] étatsCalque = new LayerState[nombreCalques];
for (int j = 0; j < nombreCalques; j++)
{
étatsCalque[j] = new LayerState();
étatsCalque[j].Enabled = i == j;
}
frames[i].LayerStates = étatsCalque;
}
chronologie.Frames = frames;
// Mettre à jour les états actuels
Layer[] calques = psdImage.Layers;
LayerState[] états = chronologie.Frames[chronologie.ActiveFrameIndex].LayerStates;
for (int i = 0; i < nombreCalques; i++)
{
calques[i].IsVisible = états[i].Enabled;
}
chronologie.Save(outputGif, new GifOptions());
psdImage.Save(outputPsd);
}
PSDNET-1441. Assigner la propriété Remplissage du calque de forme à partir de la ressource VSCG
string fichierSrc = "FormeInterneSolide.psd";
string fichierSortie = "FormeInterneSolide.psd.sortie.psd";
using (PsdImage image = (PsdImage)Image.Load(
fichierSrc,
new PsdLoadOptions { LoadEffectsResource = true }))
{
ShapeLayer calqueForme = (ShapeLayer)image.Layers[1];
ColorFillSettings paramètresRemplissage = (ColorFillSettings)calqueForme.Fill;
paramètresRemplissage.Color = Color.Red;
calqueForme.Update();
image.Save(fichierSortie);
}
// Vérifier les modifications enregistrées
using (PsdImage image = (PsdImage)Image.Load(
fichierSortie,
new PsdLoadOptions { LoadEffectsResource = true }))
{
ShapeLayer calqueForme = (ShapeLayer)image.Layers[1];
ColorFillSettings paramètresRemplissage = (ColorFillSettings)calqueForme.Fill;
AssertAreEqual(Color.Red, paramètresRemplissage.Color);
image.Save(fichierSortie);
}
void AssertAreEqual(object attendu, object réel, string message = null)
{
if (!object.Equals(attendu, réel))
{
throw new Exception(message ?? "Les objets ne sont pas égaux.");
}
}
PSDNET-1471. Le calque d’ajustement noir et blanc traite mal la semi-transparence
string fichierSrc = "grenouille_nosymb.psd";
string fichierSortie = "grenouille_nosymb.psd.sortie.psd";
using (PsdImage psdImage = (PsdImage)Image.Load(fichierSrc))
{
psdImage.AddBlackWhiteAdjustmentLayer();
psdImage.Save(fichierSortie);
}
// Vérifier les modifications enregistrées
using (PsdImage image = (PsdImage)Image.Load(
fichierSortie,
new PsdLoadOptions { LoadEffectsResource = true }))
{
AssertAreEqual(2, image.Layers.Length);
BlackWhiteAdjustmentLayer calqueAjustementNoirBlanc = (BlackWhiteAdjustmentLayer)image.Layers[1];
if (calqueAjustementNoirBlanc == null)
{
throw new Exception("Le calque 2 devrait être BlackWhiteAdjustmentLayer");
}
image.Save(fichierSortie);
}
void AssertAreEqual(object attendu, object réel, string message = null)
{
if (!object.Equals(attendu, réel))
{
throw new Exception(message ?? "Les objets ne sont pas égaux.");
}
}
PSDNET-1505. Le remplacement du contenu de l’objet intelligent (lorsque l’option AllowWarpRepaint est active) échoue après 2 minutes de calcul
string fichierSource = "mug 4.psd";
string fichierChange = "illustration_remplacer.png";
string fichierSortie = "export.png";
int nouvelleHauteur = 300;
using (var psdImage = (PsdImage)Image.Load(fichierSource, new PsdLoadOptions() { AllowWarpRepaint = true, LoadEffectsResource = true }))
{
SmartObjectLayer calqueObjetIntelligent = (SmartObjectLayer)psdImage.Layers[3];
var échelle = (double)nouvelleHauteur / calqueObjetIntelligent.Height;
var nouvelleLargeur = (int)Math.Round(calqueObjetIntelligent.Width * échelle);
PsdImage imageInterne = new PsdImage(nouvelleLargeur, nouvelleHauteur);
innerImage.SetResolution(72, 72);
Stream fluxInterne = new FileStream(fichierChange, FileMode.Open);
Layer calque = new Layer(fluxInterne) { HorizontalResolution = 72, VerticalResolution = 72 };
try
{
innerImage.AddLayer(calque);
calqueObjetIntelligent.ReplaceContents(imageInterne);
calqueObjetIntelligent.UpdateModifiedContent();
psdImage.Save(fichierSortie, new PngOptions
{
ColorType = PngColorType.TruecolorWithAlpha
});
}
finally
{
imageInterne.Dispose();
fluxInterne.Dispose();
calque.Dispose();
}
}
PSDNET-1534. Ajouter de nouveaux types de déformation (arc et arche)
string fichierArcSource = "arc_deformation.psd";
string fichierArcSortie = "arc_export.png";
string fichierArcheSource = "arch_deformation.psd";
string fichierArcheSortie = "arch_export.png";
using (var psdImage = (PsdImage)Image.Load(fichierArcSource, new PsdLoadOptions() { AllowWarpRepaint = true, LoadEffectsResource = true }))
{
psdImage.Save(fichierArcSortie, new PngOptions
{
ColorType = PngColorType.TruecolorWithAlpha
});
}
using (var psdImage = (PsdImage)Image.Load(fichierArcheSource, new PsdLoadOptions() { AllowWarpRepaint = true, LoadEffectsResource = true }))
{
psdImage.Save(fichierArcheSortie, new PngOptions
{
ColorType = PngColorType.TruecolorWithAlpha
});
}
PSDNET-1543. Changer l’application qui enregistre le fichier PSD en Aspose.PSD si la propriété UpdateMetadata est définie à true
string chemin = "sortie.psd";
using (var image = new PsdImage(100, 100))
{
// Si vous voulez changer l'outil créateur, assurez-vous que la propriété "UpdateMetadata" est définie à true. Elle est définie à true par défaut.
var psdOptions = new PsdOptions();
psdOptions.UpdateMetadata = true;
// Enregistrer l'image.
image.Save(chemin, psdOptions);
// Vérifier l'outil créateur dans le code.
var xmpData = image.XmpData;
var basicPackage = image.XmpData.GetPackage(Namespaces.XmpBasic);
// Ici, les informations sur l'outil créateur seront mises à jour.
var outilCréateurActuel = (string)basicPackage[":CreatorTool"];
}
PSDNET-1567. Augmenter la zone de calcul de l’image déformée
string fichierSource = "mug4_deformation.psd";
string fichierSortie = "mug4_export.png";
using (var psdImage = (PsdImage)Image.Load(fichierSource, new PsdLoadOptions() { AllowWarpRepaint = true, LoadEffectsResource = true }))
{
psdImage.Save(fichierSortie, new PngOptions
{
ColorType = PngColorType.TruecolorWithAlpha
});
}
PSDNET-1585. Ajouter la capacité d’obtenir la véritable position de gauche et de haut du groupe de calques
string fichierSource = "CalquesFigures.psd";
void AssertAreEqual(object attendu, object réel)
{
if (!object.Equals(attendu, réel))
{
throw new Exception("Les objets ne sont pas égaux.");
}
}
using (var image = (PsdImage)Image.Load(fichierSource))
{
var calques = image.Layers;
for (int i = 0; i < calques.Length; i++)
{
var calque = calques[i];
if (calque is LayerGroup)
{
// Obtenir LayerGroup.
var groupe = (LayerGroup)calque;
var gaucheAttendue = int.MaxValue;
var hautAttendu = int.MaxValue;
var droiteAttendue = 0;
var basAttendu = 0;
// Calculer les vraies positions de gauche, de haut, de droite et de bas.
foreach (var calqueInterne in groupe.Layers)
{
if (calqueInterne is AdjustmentLayer || calqueInterne.Bounds.IsEmpty)
{
continue;
}
gaucheAttendue = Math.Min(gaucheAttendue, calqueInterne.Left);
hautAttendu = Math.Min(hautAttendu, calqueInterne.Top);
droiteAttendue = Math.Max((gaucheAttendue + groupe.Width), (calqueInterne.Left + calqueInterne.Width));
basAttendu = Math.Max((hautAttendu + groupe.Height), (calqueInterne.Top + calqueInterne.Height));
}
// Les positions de gauche, de haut, de droite et de bas du groupe de calques sont maintenant calculées correctement.
AssertAreEqual(groupe.Left, gaucheAttendue);
AssertAreEqual(groupe.Top, hautAttendu);
AssertAreEqual(groupe.Right, droiteAttendue);
AssertAreEqual(groupe.Bottom, basAttendu);
}
}
}
PSDNET-1589. Le redimensionnement du calque ne fonctionne pas correctement lorsque le fichier PSD a une ressource Vogk avec des structures en points
string[] fichiersSources = new string[]
{
"PointsVecteursOrigine.psd",
"TopVogkResStruct.psd"
};
foreach (string fichierSource in fichiersSources)
{
using (PsdImage image = (PsdImage)Image.Load(fichierSource))
{
Layer calque = image.Layers[0];
calque.Resize(50, 50);
AssertAreEqual(calque.Height, 50);
AssertAreEqual(calque.Width, 50);
}
}
void AssertAreEqual(object attendu, object réel, string message = null)
{
if (!object.Equals(attendu, réel))
{
throw new Exception(message ?? "Les objets ne sont pas égaux.");
}
}
PSDNET-1608. TextBound ne fonctionne pas comme prévu
string fichierSource = "entrée_Test_forTicket.psd";
string fichierSortie = "sortie_1608.psd";
Size nouveauTextBox = new Size(-1, -1);
using (PsdImage psdImage = (PsdImage)Aspose.PSD.Image.Load(fichierSource))
{
//Étape: Remplacer le texte
TextLayer calqueTexte = (TextLayer)psdImage.Layers[3];
calqueTexte.TextData.Items[0].Text = "Texte test remplacé";
//Étape: Mettre à jour TextBoundBox
calqueTexte.TextData.UpdateLayerData();
nouveauTextBox = new Size((int)Math.Ceiling(calqueTexte.TextBoundBox.Width), calqueTexte.Height);
calqueTexte.TextBoundBox = new Aspose.PSD.RectangleF(PointF.Empty, nouveauTextBox);
calqueTexte.TextData.UpdateLayerData();
psdImage.Save(fichierSortie);
}
// Vérifier les changements
using (var psdImage = (PsdImage)Image.Load(fichierSortie))
{
Txt2Resource ressourceTxt2 = (Txt2Resource)psdImage.GlobalLayerResources[1];
string donnéesTexte = Encoding.GetEncoding("Windows-1251").GetString(ressourceTxt2.Data);
string recherche = "<< /0 << /1 << /0 ["; // ensemble de caractères spécifique pour trouver la valeur de la zone de texte dans ce fichier.
int débutIndex = donnéesTexte.IndexOf(recherche) + recherche.Length;
int finIndex = donnéesTexte.IndexOf("]", débutIndex);
string élémentsBoîte = donnéesTexte.Substring(débutIndex, finIndex - débutIndex);
string hauteur = nouveauTextBox.Height.ToString("0.0####").Replace(",", ".");
string largeur = nouveauTextBox.Width.ToString("0.0####").Replace(",", ".");
if (!élémentsBoîte.Contains(hauteur) || !élémentsBoîte.Contains(largeur))
{
throw new Exception("La zone de texte n'est pas mise à jour.");
}
}
PSDNET-1612. Ajout d’un calque créé avec le constructeur par défaut à une image PSD ne lui ajoute pas de ressources par défaut
string sortie = "nouveauCalque.psd";
using (var psdImage = new PsdImage(500, 500))
{
var calque = new Layer();
psdImage.AddLayer(calque);
LyidResource ressourceLyid = (LyidResource)FindResource(LyidResource.TypeToolKey, calque.Resources);
int idCalque = ressourceLyid.Value; // N'