Filtr Displace jest jednym z najbardziej przydatnych narzędzi zniekształcania w programie Photoshop. Przekształca piksele warstwy zgodnie z wartościami jasności oddzielnej mapy przemieszczenia, co pozwala projektantom owinąć grafikę wokół fałdów tkaniny, dodać efekty falowania lub dopasować logotypy do teksturowanych powierzchni. Gdy filtr jest zastosowany jako filtr inteligentny, jego ustawienia znajdują się w pliku PSD i pozostają w pełni edytowalne. Ten artykuł pokazuje, jak odczytywać i zapisywać dane filtru inteligentnego Displace w języku C#. Dodasz filtr inteligentny Displace do warstwy Smart Object, skonfigurujesz jego skalę i opcje obsługi krawędzi, osadzisz mapę przemieszczenia, zapiszesz plik PSD, a następnie odczytasz ustawienia filtru, aby zweryfikować pełny cykl — wszystko bez zainstalowanego programu Adobe Photoshop.
Najważniejsze wnioski
- Klasa
DisplaceSmartFilter, dostępna w Aspose.PSD for .NET 26.8 i nowszych, udostępnia filtr Photoshop Displace jako silnie typowany obiekt .NET. - Skala pozioma i pionowa, metoda przemieszczenia (
TilelubStretch) oraz obsługa obszaru niezdefiniowanego (WrapAroundlubRepeatEdgePixels) to proste właściwości odczytu/zapisu. - Mapa przemieszczenia może być osadzona w wyjściowym pliku PSD poprzez przekazanie
truedo konstruktora, co utrzymuje plik jako samodzielny i przenośny. SmartFilters.UpdateResourceValues()musi być wywołane po zmianie kolekcji filtrów, w przeciwnym razie zmiany nie zostaną zapisane.- To samo API odczytuje dane filtrów z istniejących plików PSD, co czyni je odpowiednim do walidacji, audytu i przetwarzania wsadowego.
Dlaczego Displace Smart Filter ma znaczenie
Automatyzowane pipeline’ów projektowych często muszą odtwarzać efekty Photoshopa w dużej skali. Typowe przykłady obejmują generowanie mockupów produktów, w których projekt nadruku podąża za fałdami koszulki, tworzenie wariantów szablonów dla zespołów marketingowych lub audyt biblioteki szablonów PSD w celu potwierdzenia, że każdy plik używa tych samych ustawień filtru.
Robienie tego ręcznie w Photoshopie nie jest skalowalne, a spłaszczenie efektu do pikseli powoduje utratę możliwości późniejszej edycji. Czytając i zapisując dane inteligentnego filtru Displace w C#, zachowujesz filtr nieniszczący i edytowalny w Photoshopie, jednocześnie kontrolując go z kodu po stronie serwera, zadań w tle lub narzędzi desktopowych.
Używanie Aspose.PSD do odczytu i zapisu danych filtru Displace Smart
Aspose.PSD for .NET umożliwia programistom C# odczytywanie i zapisywanie danych filtru smart Displace bezpośrednio przy użyciu klasy DisplaceSmartFilter.
Rozpoczęcie
Zainstaluj Aspose.PSD NuGet package (wersja 26.8 lub nowsza) z konsoli Menedżera pakietów:
Install-Package Aspose.PSD
Lub użyj .NET CLI:
dotnet add package Aspose.PSD
Poniższe przykłady używają następujących przestrzeni nazw:
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;
Będziesz potrzebować dwóch plików wejściowych: pliku PSD, który zawiera co najmniej jedną warstwę Smart Object, oraz pliku PSD, który będzie użyty jako mapa przemieszczeń. Szczegóły API znajdziesz w Aspose.PSD for .NET documentation oraz w smart filters guide.
DisplaceSmartFilter Właściwości w skrócie
| Property | Type | Purpose |
|---|---|---|
HorizontalScale | double | Skala przemieszczenia w poziomie, tak jak w oknie dialogowym Displace programu Photoshop |
VerticalScale | double | Skala przemieszczenia w pionie |
DisplacementMethod | DisplacementMethod | Tile powtarza mapę; Stretch zmienia rozmiar mapy, aby dopasować ją do warstwy |
UndefinedAreas | UndefinedAreas | WrapAround lub RepeatEdgePixels dla pikseli przesuniętych poza warstwę |
IsDisplacementMapEmbedded | bool | Wskazuje, czy mapa jest osadzona w pliku PSD |
DisplaceMapData | — | Osadzone dane mapy przemieszczenia |
DisplacementMapPath | string | Ścieżka do mapy przemieszczenia |
Jak dodać inteligentny filtr Displace w C#
Pierwszym krokiem jest załadowanie pliku PSD zawierającego warstwę Smart Object. Następnie tworzysz DisplaceSmartFilter, konfigurujesz jego właściwości, dodajesz go do kolekcji filtrów inteligentnych warstwy i zapisujesz wynik.
Poniższy przykład w C# dodaje i konfiguruje filtr inteligentny Displace na warstwie obiektu inteligentnego.
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);
}
Wyjaśnienie
- Loading the PSD –
Image.Loadzwraca ogólnyImage, który jest rzutowany naPsdImage, aby uzyskać dostęp do specyficznych dla PSD funkcji, takich jak warstwy i inteligentne filtry. - Finding the Smart Object layer –
OfType<SmartObjectLayer>()wybiera pierwszą warstwę Smart Object i zgłasza wyraźny komunikat, jeśli takiej nie ma. Jest to bezpieczniejsze niż bezpośrednie indeksowanieLayers, ponieważ kolejność warstw może się różnić w zależności od pliku. - Creating the filter – Konstruktor
DisplaceSmartFilter(string, bool)przyjmuje ścieżkę do mapy przemieszczenia oraz flagę określającą, czy mapa ma być osadzona. Przekazanietruesprawia, że wyjściowy PSD jest samodzielny. - Configuring the filter –
HorizontalScaleiVerticalScaleustawiają siłę przemieszczenia.DisplacementMethod.Tilepowtarza mapę na całej warstwie, natomiastStretchzmienia jej rozmiar, aby dopasować.UndefinedAreas.WrapAroundwypełnia piksele przesunięte poza obszar płótna treścią z przeciwległej krawędzi;RepeatEdgePixelsrozszerza kolory krawędzi. - Updating the collection –
SmartFilters.Filtersjest udostępniany jako tablica. Skopiowanie jej doList<SmartFilter>, dodanie nowego filtra i ponowne przypisanie wynikuToArray()zachowuje wszystkie inteligentne filtry, które już znajdowały się na warstwie. - Persisting the changes –
UpdateResourceValues()zapisuje kolekcję filtrów w zasobach PSD warstwy. Pominięcie tego wywołania powoduje utratę nowego filtra przy zapisie. - Saving –
image.Save(outputFile)zapisuje zaktualizowany PSD na dysku.
Jak odczytać dane Displace Smart Filter w C#
Po zapisaniu pliku PSD możesz go ponownie wczytać i sprawdzić właściwości filtru, aby potwierdzić, że każda wartość została poprawnie zachowana. To samo podejście działa dla plików PSD utworzonych w Photoshopie.
Poniższy przykład w C# odczytuje inteligentny filtr Displace i weryfikuje jego ustawienia.
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}.");
}
}
Wyjaśnienie
- Ponowne ładowanie pliku –
Image.Loadotwiera plik PSD zapisany w poprzednim kroku. - Lokalizowanie warstwy Smart Object – To samo wyszukiwanie oparte na typie zapewnia spójność kroków odczytu i zapisu.
- Znajdowanie filtru według typu –
OfType<DisplaceSmartFilter>().LastOrDefault()zwraca najnowszy dodany filtr Displace i nigdy nie powoduje nieprawidłowego rzutowania. Jest to bardziej niezawodne niż odczytywanie ostatniego elementu tablicy i rzutowanie przy użyciuas, które cicho zwracanull, jeśli w tej pozycji znajduje się inny filtr. - Odczytywanie właściwości – Wszystkie ustawienia filtru są dostępne jako typowane właściwości, więc mogą być logowane, porównywane lub eksportowane do raportu.
- Walidacja – Pomocnik
AssertAreEqualporównuje zapisane wartości z oryginalnymi i zgłasza wyjątek z opisową wiadomością przy jakiejkolwiek niezgodności.
Podsumowanie
Za pomocą klasy DisplaceSmartFilter w Aspose.PSD for .NET, programiści C# mogą dodawać, konfigurować, zapisywać i odczytywać filtry inteligentne Photoshop Displace w całości w kodzie. Filtr pozostaje niedestrukcyjny i edytowalny w Photoshopie, mapa przemieszczenia może podróżować wewnątrz pliku PSD, a to samo API obsługuje walidację round‑trip. Umożliwia to łatwe tworzenie generatorów mockupów, pipeline’ów szablonów oraz narzędzi do audytu PSD w oparciu o .NET.
FAQs
Która wersja Aspose.PSD for .NET obsługuje filtr inteligentny Displace? Odczyt i zapis danych filtru inteligentnego Displace zostały wprowadzone w Aspose.PSD for .NET 26.8. Użyj wersji 26.8 lub nowszej, aby uzyskać dostęp do klasy
DisplaceSmartFilter.Czy mogę dodać DisplaceSmartFilter do zwykłej warstwy rastrowej? Dane filtrów inteligentnych są przechowywane w warstwach Smart Object, więc filtr musi zostać dodany do kolekcji
SmartFilterswarstwySmartObjectLayer. Jeśli twoja zawartość znajduje się na zwykłej warstwie, najpierw przekształć ją w Smart Object.Jak wstawić mapę przemieszczenia w pliku PSD? Podaj ścieżkę do mapy przemieszczenia i
truedo konstruktoraDisplaceSmartFilter. Po zapisaniu,IsDisplacementMapEmbeddedzwracatrueiDisplaceMapDataprzechowuje wbudowane dane mapy.Jakie wartości może przyjmować właściwość UndefinedAreas?
UndefinedAreasobsługujeWrapAround, które wypełnia niezdefiniowane piksele treścią z przeciwległego brzegu obrazu, orazRepeatEdgePixels, które rozszerza kolory pikseli brzegowych.Jaka jest różnica między DisplacementMethod.Tile a DisplacementMethod.Stretch?
Tilepowtarza mapę przemieszczenia na warstwie w jej oryginalnym rozmiarze, natomiastStretchzmienia rozmiar mapy, aby dopasować ją do warstwy.Czy muszę wywołać UpdateResourceValues po modyfikacji inteligentnych filtrów? Tak.
UpdateResourceValueszapisuje zmodyfikowaną kolekcję filtrów w zasobach warstwy Smart Object. Bez tego nowy filtr nie zostanie zachowany po zapisaniu.
Uzyskaj darmową licencję i odkryj więcej
Wypróbuj Aspose.PSD for .NET bez ograniczeń, żądając tymczasowej licencji:
Uzyskaj darmową tymczasową licencję
Dodatkowe zasoby do pracy z plikami PSD w .NET:
- Dokumentacja Aspose.PSD for .NET
- Referencja API Aspose.PSD for .NET
- Manipulacja inteligentnymi filtrami w Aspose.PSD for C#
- Darmowe narzędzia PSD online
