Displace‑filter är ett av Photoshops mest användbara förvrängningsverktyg. Det deformerar ett lagers pixlar enligt ljusstyrkevärdena i en separat förskjutningskarta, vilket är hur designers omsluter grafik runt tygveck, lägger till krusningseffekter eller placerar logotyper på strukturerade ytor. När filtret appliceras som ett smart filter lagras dess inställningar i PSD‑filen och förblir fullt redigerbara. Denna artikel visar hur man läser och skriver data för Displace smart filter i C#. Du kommer att lägga till ett Displace smart filter på ett Smart Object‑lager, konfigurera dess skala‑ och kant‑hanteringsalternativ, bädda in förskjutningskartan, spara PSD‑filen och sedan läsa tillbaka filterinställningarna för att verifiera hela processen — allt utan att Adobe Photoshop är installerat.
Viktiga slutsatser
DisplaceSmartFilter-klassen, tillgänglig i Aspose.PSD for .NET 26.8 och senare, exponerar Photoshop Displace-filter som ett starkt typat .NET-objekt.- Horisontell och vertikal skala, förskjutningsmetod (
TileellerStretch) och hantering av odefinierade områden (WrapAroundellerRepeatEdgePixels) är alla enkla läs/skriv‑egenskaper. - Förskjutningskartan kan bäddas in i den resulterande PSD-filen genom att skicka
truetill konstruktorn, vilket gör filen självständig och portabel. SmartFilters.UpdateResourceValues()måste anropas efter att filterkollektionen har ändrats, annars sparas ändringarna inte.- Samma API läser filterdata tillbaka från befintliga PSD-filer, vilket gör det lämpligt för validering, granskning och batchbearbetning.
Varför Displace Smart Filter är viktigt
Designautomationspipelines behöver ofta reproducera Photoshop‑effekter i stor skala. Vanliga exempel inkluderar att skapa produktmockups där en tryckdesign följer veckningarna på en T‑shirt, producera mallvarianter för marknadsföringsteam, eller granska ett bibliotek av PSD‑mallar för att bekräfta att varje fil använder samma filterinställningar.
Att göra detta för hand i Photoshop skalar inte, och att platta till effekten till pixlar förlorar möjligheten att redigera den senare. Genom att läsa och skriva Displace smart filter data i C# behåller du filtret icke‑destruktivt och redigerbart i Photoshop, samtidigt som du styr det från server‑sidkod, bakgrundsjobb eller skrivbordsverktyg.
Användning av Aspose.PSD för att läsa och skriva Displace Smart Filter-data
Aspose.PSD for .NET gör det möjligt för C#-utvecklare att läsa och skriva Displace smart filter-data direkt via DisplaceSmartFilter-klassen.
Kom igång
Installera Aspose.PSD NuGet package (version 26.8 eller senare) från Package Manager Console:
Install-Package Aspose.PSD
Eller använd .NET CLI:
dotnet add package Aspose.PSD
Exemplen nedan använder följande namnrymder:
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;
Du kommer också att behöva två inmatningsfiler: en PSD som innehåller minst ett Smart Object‑lager och en PSD att använda som förskjutningskarta. För API‑detaljer, se Aspose.PSD for .NET-dokumentation och guide för smarta filter.
DisplaceSmartFilter-egenskaper i översikt
| Egenskap | Typ | Syfte |
|---|---|---|
HorizontalScale | double | Horisontell förskjutningsskala, som i Photoshop’s Displace-dialog |
VerticalScale | double | Vertikal förskjutningsskala |
DisplacementMethod | DisplacementMethod | Tile upprepar kartan; Stretch ändrar storlek på kartan så att den passar lagret |
UndefinedAreas | UndefinedAreas | WrapAround eller RepeatEdgePixels för pixlar som flyttas utanför lagret |
IsDisplacementMapEmbedded | bool | Anger om kartan är inbäddad i PSD |
DisplaceMapData | — | De inbäddade förskjutningskartsdata |
DisplacementMapPath | string | Sökvägen till förskjutningskartan |
Hur man lägger till ett Displace Smart Filter i C#
Det första steget är att ladda en PSD som innehåller ett Smart Object‑lager. Du skapar sedan en DisplaceSmartFilter, konfigurerar dess egenskaper, lägger till den i lagrets smarta filter‑samling och sparar resultatet.
Följande C#-exempel lägger till och konfigurerar ett Displace smart filter på ett Smart Object‑lager.
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);
}
Förklaring
- Laddar PSD –
Image.Loadreturnerar en generiskImage, som kastas tillPsdImageför att komma åt PSD‑specifika funktioner såsom lager och smarta filter. - Hitta Smart Object‑lagret –
OfType<SmartObjectLayer>()väljer det första Smart Object‑lagret och misslyckas med ett tydligt meddelande om inget finns. Detta är säkrare än att indexera direkt iLayers, eftersom lagerordningen varierar mellan filer. - Skapa filtret – Konstruktorn
DisplaceSmartFilter(string, bool)tar sökvägen till förskjutningskartan och en flagga som styr om kartan bäddas in. Att skickatruegör den sparade PSD‑filen självständig. - Konfigurera filtret –
HorizontalScaleochVerticalScaleanger förskjutningsstyrkan.DisplacementMethod.Tileupprepar kartan över lagret, medanStretchändrar storlek för att passa.UndefinedAreas.WrapAroundfyller pixlar som flyttats utanför duken med innehåll från motsatt kant;RepeatEdgePixelsförlänger kantfärgerna istället. - Uppdatera samlingen –
SmartFilters.Filtersexponeras som en array. Genom att kopiera den till enList<SmartFilter>, lägga till det nya filtret och tilldelaToArray()tillbaka bevaras eventuella smarta filter som redan fanns på lagret. - Spara förändringarna –
UpdateResourceValues()skriver filterkollektionen till lagrets PSD‑resurser. Hoppar man över detta anrop försvinner det nya filtret vid sparning. - Spara –
image.Save(outputFile)skriver den uppdaterade PSD‑filen till disk.
Hur man läser Displace Smart Filter-data i C#
Efter att du har sparat PSD-filen kan du läsa in den igen och inspektera filteregenskaperna för att bekräfta att varje värde har sparats korrekt. Samma metod fungerar för PSD-filer som skapats i Photoshop.
Följande C#-exempel läser tillbaka Displace smartfilter och validerar dess inställningar.
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}.");
}
}
Förklaring
- Laddar om filen –
Image.Loadöppnar PSD-filen som sparades i föregående steg. - Hitta Smart Object-lagret – Den samma typbaserade uppslagningen håller läs- och skrivstegen konsekventa.
- Hitta filtret efter typ –
OfType<DisplaceSmartFilter>().LastOrDefault()returnerar det senast tillagda Displace-filtret och ger aldrig en ogiltig typkonvertering. Detta är mer pålitligt än att läsa det sista arrayelementet och kasta medas, vilket tyst returnerarnullom ett annat filter sitter på den positionen. - Läsa egenskaper – Alla filterinställningar är tillgängliga som typade egenskaper, så de kan loggas, jämföras eller exporteras till en rapport.
- Validering –
AssertAreEqual-hjälpen jämför sparade värden med de ursprungliga värdena och kastar ett undantag med ett beskrivande meddelande vid någon avvikelse.
Slutsats
Med DisplaceSmartFilter-klassen i Aspose.PSD for .NET kan C#‑utvecklare lägga till, konfigurera, spara och läsa tillbaka Photoshop Displace‑smartfilter helt i kod. Filtret förblir icke‑destruktivt och redigerbart i Photoshop, förskjutningskartan kan färdas inom PSD‑filen, och samma API stödjer rundresvalidering. Detta gör det enkelt att bygga mockup‑generatorer, mall‑pipelines och PSD‑granskningsverktyg ovanpå .NET.
Vanliga frågor
Vilken version av Aspose.PSD for .NET stöder Displace smart filter? Läsning och skrivning av Displace smart filter‑data introducerades i Aspose.PSD for .NET 26.8. Använd version 26.8 eller senare för att komma åt klassen
DisplaceSmartFilter.Kan jag lägga till ett DisplaceSmartFilter på ett vanligt rasterlager? Smart filterdata lagras med Smart Object-lager, så filtret måste läggas till i
SmartFilters-samlingen av ettSmartObjectLayer. Om ditt innehåll är på ett vanligt lager, konvertera det först till ett Smart Object.Hur bäddar jag in förskjutningskartan i PSD? Skicka sökvägen till förskjutningskartan och
truetillDisplaceSmartFilter-konstruktorn. Efter sparning returnerarIsDisplacementMapEmbeddedtrueochDisplaceMapDatainnehåller den inbäddade kartdata.Vilka värden kan egenskapen UndefinedAreas anta?
UndefinedAreasstöderWrapAround, vilket fyller odefinierade pixlar med innehåll från motsatt kant av bilden, ochRepeatEdgePixels, vilket utökar färgerna på kantpixlarna.Vad är skillnaden mellan DisplacementMethod.Tile och DisplacementMethod.Stretch?
Tileupprepar förskjutningskartan över lagret i dess ursprungliga storlek, medanStretchändrar kartans storlek så att den passar lagret.Måste jag anropa UpdateResourceValues efter att ha ändrat smarta filter?
Ja.UpdateResourceValuesskriver den ändrade filterkollektionen till Smart Object‑lagrets resurser. Utan den sparas det nya filtret inte när du sparar.
Skaffa en gratis licens och utforska mer
Utvärdera Aspose.PSD for .NET utan begränsningar genom att begära en tillfällig licens:
Få en gratis tillfällig licens
Ytterligare resurser för att arbeta med PSD-filer i .NET:
- Aspose.PSD for .NET Dokumentation
- Aspose.PSD for .NET API-referens
- Smart filtermanipulering i Aspose.PSD for C#
- Gratis online PSD-verktyg
