Utiliser des fichiers PSD comme modèles pour l'automatisation - Cas des cartes de visite
Aperçu
Cet article décrit des cas d’utilisation courants lorsque vous avez besoin de mettre à jour certaines couches dans un fichier PSD de manière programmable, où le fichier PSD/PSB a une structure de modèle connue. Cela peut être utilisé pour créer une grande quantité de cartes de visite pour différentes personnes (Cas des cartes de visite). Ou vous devez traduire le fichier PSD dans différentes langues en remplaçant certains éléments graphiques.
Après avoir lu cet article, vous saurez comment procéder :
Cas simple
Par exemple, vous avez un modèle PSD avec des noms de calques connus. Vous devez donc changer, mettre à jour ou remplacer une couche PSD via C#. Tout d’abord, vous devez ouvrir le fichier de modèle avec Aspose.PSD.
Comment ouvrir un fichier PSD via C# ?
// Let's load Image with Picture Frame | |
using (PsdImage image = (PsdImage)Image.Load(sourceFile)) |
Ensuite, nous devons trouver une couche que nous voulons remplacer par son nom. Voici une implémentation simple pour cela.
Comment trouver la couche dans le fichier PSD par son nom
// Using Layer Display Name you can find it in the PSD Image Layers List | |
private Layer FindLayerByName(PsdImage image, string name) | |
{ | |
var layers = image.Layers; | |
foreach (var layer in layers) | |
{ | |
if (string.Equals(layer.DisplayName, name, StringComparison.InvariantCultureIgnoreCase)) | |
{ | |
return layer; | |
} | |
} | |
return null; | |
} |
Lorsque la couche est trouvée, nous pouvons la mettre à jour de manière courante, en utilisant Graphics :
Comment dessiner sur la couche PSD avec Graphics
// Let's find layer that we want to replace | |
var layerToReplace = FindLayerByName(image, "LayerToReplace"); | |
var layers = new List<Layer>(image.Layers); | |
using (Stream stream = new FileStream(newLayerFile, FileMode.Open)) | |
{ | |
var newLayer = new Layer(stream); | |
// Drawing of new layer on the old | |
var graphic = new Graphics(layerToReplace); | |
graphic.Clear(Color.Empty); | |
graphic.DrawImage(newLayer, new Rectangle(new Point(), new Size(layerToReplace.Width, layerToReplace.Height))); | |
} |
Dans ce cas, nous dessinons une nouvelle image PNG sur la couche PSD existante, de sorte que les anciennes données seront perdues dans le nouveau fichier.
Mais que faire si nous devons également mettre à jour le texte ? Le processus sera similaire. Trouvez le calque de texte par son nom, puis mettez à jour de manière programmatique le calque de texte du fichier Photoshop avec C#.
Comment mettre à jour le calque de texte dans Photoshop en utilisant C#
// We also can update text layers in PSD file. This can be used for business card create automation | |
var layerToUpdateText = (TextLayer)FindLayerByName(image, "Place the name of the picture here"); | |
// Simple way to update text | |
layerToUpdateText.UpdateText("Louis le Grand Dauphin"); |
Enfin, nous devons enregistrer nos modifications :
Comment enregistrer le fichier PSD modifié en utilisant Aspose.PSD
// Save PSD file | |
image.Save(outputFile); |
L’image résultante :
Cas complexe avec fonctionnalités supplémentaires
Ci-dessus, nous avons montré la manière la plus simple de remplacer une image dans une couche d’un fichier PSD.
Mais Aspose.PSD peut offrir des fonctionnalités supplémentaires plus complexes comme l’ajout d’une nouvelle couche, la suppression d’anciennes couches et la mise à jour du calque texte en utilisant différents styles dans un texte multi-lignes.
Nous pouvons trouver la couche que nous voulons remplacer, puis nous trouvons son index dans la liste des couches, le supprimons et insérons une nouvelle couche après l’avoir créée à partir d’un fichier Jpeg au même endroit.
Créer une nouvelle couche à partir du fichier et l’insérer dans l’image PSD en utilisant Aspose.PSD
// Finding layer that we want to replace | |
var layerToReplace = FindLayerByName(image, "LayerToReplace"); | |
var layers = new List<Layer>(image.Layers); | |
var indexOfLayer = layers.IndexOf(layerToReplace); | |
layers.Remove(layerToReplace); | |
using (Stream stream = new FileStream(newLayerFile, FileMode.Open)) | |
{ | |
var newLayer = new Layer(stream); | |
// We put new layer on the same coordinate and position in Layers as the removed layer | |
CopyLayerPosition(layerToReplace, newLayer); | |
layers.Insert(indexOfLayer, newLayer); | |
// Save list of changed layers | |
image.Layers = layers.ToArray(); | |
} |
À la fin de ce fragment de code, nous corrigeons la position de la couche et enregistrons le nouvel ensemble de couches dans l’image Psd.
Comment copier les propriétés de la couche de PsdImage
// Way to Copy Layer Coordinates in Aspose.PSD | |
void CopyLayerPosition(Layer from, Layer to) | |
{ | |
to.Left = from.Left; | |
to.Top = from.Top; | |
to.Right = from.Right; | |
to.Bottom = from.Bottom; | |
} |
Et enfin, nous devons mettre à jour les calques de texte dans l’image PSD existante avec C#. Aspose.PSD prend en charge la mise à jour du TextLayer par Portions. Chaque portion de texte a une combinaison unique de propriétés de style et de paragraphe.
Comment copier les propriétés de la couche de PsdImage
En conclusion, nous avons modifié le modèle PSD via du code en ajoutant une nouvelle couche à partir d’un fichier Jpeg, Png, J2k, Bmp, Gif ou Tiff et un texte multi-ligne avec différents styles dans chaque ligne.