Le filtre Displace est l’un des outils de distorsion les plus utiles de Photoshop. Il déforme les pixels d’un calque en fonction des valeurs de luminosité d’une carte de déplacement séparée, ce qui permet aux concepteurs d’envelopper des illustrations autour des plis du tissu, d’ajouter des effets d’ondulation ou d’adapter des logos sur des surfaces texturées. Lorsqu’il est appliqué en tant que filtre dynamique, ses paramètres sont enregistrés dans le fichier PSD et restent entièrement modifiables. Cet article montre comment lire et écrire les données du filtre dynamique Displace en C#. Vous ajouterez un filtre dynamique Displace à un calque d’objet dynamique, configurerez ses options d’échelle et de gestion des bords, intégrerez la carte de déplacement, enregistrerez le PSD, puis lirez à nouveau les paramètres du filtre pour vérifier le cycle complet — le tout sans Adobe Photoshop installé.
Points clés
- La classe
DisplaceSmartFilter, disponible dans Aspose.PSD for .NET 26.8 et versions ultérieures, expose le filtre Displace de Photoshop sous forme d’un objet .NET fortement typé. - L’échelle horizontale et verticale, la méthode de déplacement (
TileouStretch) et la gestion des zones indéfinies (WrapAroundouRepeatEdgePixels) sont toutes de simples propriétés en lecture/écriture. - La carte de déplacement peut être intégrée dans le PSD de sortie en passant
trueau constructeur, ce qui rend le fichier autonome et portable. SmartFilters.UpdateResourceValues()doit être appelé après avoir modifié la collection de filtres, sinon les modifications ne sont pas enregistrées.- La même API lit les données de filtre à partir des fichiers PSD existants, ce qui la rend adaptée à la validation, à l’audit et au traitement par lots.
Pourquoi le filtre intelligent Displace est important
Les pipelines d’automatisation de la conception doivent souvent reproduire les effets Photoshop à grande échelle. Des exemples typiques incluent la génération de maquettes de produits où un design imprimé suit les plis d’un T‑shirt, la création de variantes de modèles pour les équipes marketing, ou l’audit d’une bibliothèque de modèles PSD afin de confirmer que chaque fichier utilise les mêmes paramètres de filtre.
Faire cela manuellement dans Photoshop n’est pas évolutif, et aplatir l’effet en pixels fait perdre la possibilité de le modifier ultérieurement. En lisant et en écrivant les données du filtre intelligent Displace en C#, vous conservez le filtre non destructif et modifiable dans Photoshop, tout en le contrôlant depuis le code côté serveur, les tâches en arrière‑plan ou les outils de bureau.
Utilisation d’Aspose.PSD pour la lecture et l’écriture des données du filtre intelligent Displace
Aspose.PSD for .NET permet aux développeurs C# de lire et d’écrire les données du filtre intelligent Displace directement via la classe DisplaceSmartFilter.
Démarrage
Installez le Aspose.PSD NuGet package (version 26.8 ou ultérieure) depuis la console du Gestionnaire de packages :
Install-Package Aspose.PSD
Ou utilisez la CLI .NET:
dotnet add package Aspose.PSD
Les exemples ci‑dessous utilisent les espaces de noms suivants :
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Aspose.PSD;
using Aspose.PSD.FileFormats.Psd;
using Aspose.PSD.FileFormats.Psd.Layers.SmartFilters;
using Aspose.PSD.FileFormats.Psd.Layers.SmartObjects;
Vous aurez également besoin de deux fichiers d’entrée : un PSD contenant au moins un calque d’objet dynamique, et un PSD à utiliser comme carte de déplacement. Pour les détails de l’API, consultez la documentation Aspose.PSD for .NET et le guide des filtres intelligents.
Propriétés DisplaceSmartFilter en un coup d’œil
| Propriété | Type | But |
|---|---|---|
HorizontalScale | double | Échelle de déplacement horizontal, comme dans la boîte de dialogue Displace de Photoshop |
VerticalScale | double | Échelle de déplacement vertical |
DisplacementMethod | DisplacementMethod | Tile répète la carte ; Stretch redimensionne la carte pour l’adapter au calque |
UndefinedAreas | UndefinedAreas | WrapAround ou RepeatEdgePixels pour les pixels déplacés en dehors du calque |
IsDisplacementMapEmbedded | bool | Indique si la carte est intégrée dans le PSD |
DisplaceMapData | — | Les données de la carte de déplacement intégrée |
DisplacementMapPath | string | Le chemin de la carte de déplacement |
Comment ajouter un filtre intelligent Displace en C#
La première étape consiste à charger un PSD contenant un calque d’objet dynamique. Vous créez ensuite un DisplaceSmartFilter, configurez ses propriétés, l’ajoutez à la collection de filtres intelligents du calque, puis enregistrez le résultat.
L’exemple C# suivant ajoute et configure un filtre intelligent Displace sur un calque d’objet dynamique.
string baseFolder = "Data";
string outputFolder = "Output";
Directory.CreateDirectory(outputFolder);
string sourceFile = Path.Combine(baseFolder, "no_displace_filter.psd");
string displaceMapPath = Path.Combine(baseFolder, "displace_map.psd");
string outputFile = Path.Combine(outputFolder, "output_displace_filter.psd");
// Load the source PSD file.
using (PsdImage image = (PsdImage)Image.Load(sourceFile))
{
// Find the first Smart Object layer instead of relying on a hard-coded index.
SmartObjectLayer smartObj = image.Layers.OfType<SmartObjectLayer>().FirstOrDefault()
?? throw new InvalidOperationException("The source PSD has no Smart Object layer.");
// Create the filter. The second argument embeds the displacement map in the output PSD.
DisplaceSmartFilter displace = new DisplaceSmartFilter(displaceMapPath, true)
{
HorizontalScale = 12.5,
VerticalScale = 15.0,
DisplacementMethod = DisplacementMethod.Tile,
UndefinedAreas = UndefinedAreas.WrapAround
};
// Filters is exposed as an array, so copy it to a list, append the new filter,
// and assign the updated array back to the collection.
List<SmartFilter> filters = new List<SmartFilter>(smartObj.SmartFilters.Filters);
filters.Add(displace);
smartObj.SmartFilters.Filters = filters.ToArray();
// Write the updated filter collection into the Smart Object layer's resources.
smartObj.SmartFilters.UpdateResourceValues();
// Save the modified PSD.
image.Save(outputFile);
}
Explication
- Chargement du PSD –
Image.Loadrenvoie uneImagegénérique, qui est convertie enPsdImagepour accéder aux fonctionnalités spécifiques aux PSD telles que les calques et les filtres intelligents. - Recherche du calque Smart Object –
OfType<SmartObjectLayer>()sélectionne le premier calque Smart Object et échoue avec un message clair s’il n’existe pas. C’est plus sûr que d’indexer directement dansLayers, car l’ordre des calques varie d’un fichier à l’autre. - Création du filtre – Le constructeur
DisplaceSmartFilter(string, bool)prend le chemin du fichier de carte de déplacement et un indicateur qui contrôle si la carte est intégrée. Passertruerend le PSD de sortie autonome. - Configuration du filtre –
HorizontalScaleetVerticalScaledéfinissent l’intensité du déplacement.DisplacementMethod.Tilerépète la carte sur le calque, tandis queStretchla redimensionne pour l’adapter.UndefinedAreas.WrapAroundremplit les pixels déplacés hors du canevas avec le contenu du bord opposé ;RepeatEdgePixelsétend les couleurs du bord à la place. - Mise à jour de la collection –
SmartFilters.Filtersest exposé sous forme de tableau. Le copier dans uneList<SmartFilter>, ajouter le nouveau filtre, puis réassigner le résultat deToArray()préserve tous les filtres intelligents déjà présents sur le calque. - Persistance des modifications –
UpdateResourceValues()écrit la collection de filtres dans les ressources PSD du calque. Ignorer cet appel entraîne la perte du nouveau filtre lors de l’enregistrement. - Enregistrement –
image.Save(outputFile)écrit le PSD mis à jour sur le disque.
Comment lire les données du filtre Displace Smart Filter en C#
Après avoir enregistré le PSD, vous pouvez le recharger et inspecter les propriétés du filtre pour confirmer que chaque valeur a été correctement persistée. La même approche fonctionne pour les fichiers PSD créés dans Photoshop.
L’exemple C# suivant lit le filtre intelligent Displace et valide ses paramètres.
using (PsdImage image = (PsdImage)Image.Load(outputFile))
{
SmartObjectLayer smartObj = image.Layers.OfType<SmartObjectLayer>().FirstOrDefault()
?? throw new InvalidOperationException("The PSD has no Smart Object layer.");
// Search by type instead of position, so other smart filters on the layer are ignored.
DisplaceSmartFilter displace = smartObj.SmartFilters.Filters
.OfType<DisplaceSmartFilter>()
.LastOrDefault()
?? throw new InvalidOperationException("No Displace smart filter found on the layer.");
Console.WriteLine($"Horizontal scale: {displace.HorizontalScale}");
Console.WriteLine($"Vertical scale: {displace.VerticalScale}");
Console.WriteLine($"Method: {displace.DisplacementMethod}");
Console.WriteLine($"Undefined areas: {displace.UndefinedAreas}");
Console.WriteLine($"Map embedded: {displace.IsDisplacementMapEmbedded}");
// Verify that the saved values match the values written earlier.
AssertAreEqual(12.5, displace.HorizontalScale);
AssertAreEqual(15.0, displace.VerticalScale);
AssertAreEqual(DisplacementMethod.Tile, displace.DisplacementMethod);
AssertAreEqual(UndefinedAreas.WrapAround, displace.UndefinedAreas);
AssertAreEqual(true, displace.IsDisplacementMapEmbedded);
AssertAreEqual(true, displace.DisplaceMapData != null);
}
static void AssertAreEqual(object expected, object actual, string message = null)
{
if (!object.Equals(expected, actual))
{
throw new Exception(message ?? $"Expected {expected}, but got {actual}.");
}
}
Explication
- Rechargement du fichier –
Image.Loadouvre le PSD enregistré à l’étape précédente. - Localisation du calque Smart Object – La même recherche basée sur le type maintient la cohérence des étapes de lecture et d’écriture.
- Recherche du filtre par type –
OfType<DisplaceSmartFilter>().LastOrDefault()renvoie le filtre Displace ajouté le plus récemment et ne produit jamais de conversion invalide. C’est plus fiable que de lire le dernier élément du tableau et de le convertir avecas, ce qui renvoie silencieusementnullsi un autre filtre occupe cette position. - Lecture des propriétés – Tous les paramètres du filtre sont disponibles en tant que propriétés typées, de sorte qu’ils puissent être journalisés, comparés ou exportés vers un rapport.
- Validation – L’assistant
AssertAreEqualcompare les valeurs persistées avec les valeurs d’origine et lève une exception avec un message descriptif en cas de divergence.
Conclusion
Avec la classe DisplaceSmartFilter dans Aspose.PSD for .NET, les développeurs C# peuvent ajouter, configurer, enregistrer et relire les filtres intelligents Displace de Photoshop entièrement en code. Le filtre reste non destructif et modifiable dans Photoshop, la carte de déplacement peut voyager à l’intérieur du PSD, et la même API prend en charge la validation round‑trip. Cela rend simple la création de générateurs de maquettes, de pipelines de modèles et d’outils d’audit PSD sur .NET.
FAQ
Quelle version d’Aspose.PSD for .NET prend en charge le filtre intelligent Displace ?
La lecture et l’écriture des données du filtre intelligent Displace ont été introduites dans Aspose.PSD for .NET 26.8. Utilisez la version 26.8 ou ultérieure pour accéder à la classeDisplaceSmartFilter.Puis-je ajouter un DisplaceSmartFilter à un calque raster ordinaire ? Les données du filtre intelligent sont stockées avec les calques d’objets intelligents, donc le filtre doit être ajouté à la collection
SmartFiltersd’unSmartObjectLayer. Si votre contenu se trouve sur un calque ordinaire, convertissez‑le d’abord en objet intelligent.Comment intégrer la carte de déplacement dans le PSD ? Passez le chemin de la carte de déplacement et
trueau constructeurDisplaceSmartFilter. Après l’enregistrement,IsDisplacementMapEmbeddedrenvoietrueetDisplaceMapDatacontient les données de la carte intégrée.Quelles valeurs la propriété UndefinedAreas peut‑elle prendre ?
UndefinedAreasprend en chargeWrapAround, qui remplit les pixels non définis avec le contenu du bord opposé de l’image, etRepeatEdgePixels, qui prolonge les couleurs des pixels de bord.Quelle est la différence entre DisplacementMethod.Tile et DisplacementMethod.Stretch ?
Tilerépète la carte de déplacement sur le calque à sa taille d’origine, tandis queStretchredimensionne la carte pour l’adapter au calque.Dois-je appeler UpdateResourceValues après avoir modifié les filtres intelligents ? Oui.
UpdateResourceValuesécrit la collection de filtres modifiée dans les ressources du calque Smart Object. Sans cela, le nouveau filtre n’est pas conservé lors de l’enregistrement.
Obtenez une licence gratuite et explorez davantage
Évaluez Aspose.PSD for .NET sans limitations en demandant une licence temporaire :
Obtenez une licence temporaire gratuite
Ressources supplémentaires pour travailler avec les fichiers PSD dans .NET :
- Documentation Aspose.PSD for .NET
- Référence API Aspose.PSD for .NET
- Manipulation des filtres intelligents dans Aspose.PSD for C#
- Outils PSD en ligne gratuits
