Displace 필터는 Photoshop에서 가장 유용한 왜곡 도구 중 하나입니다. 이 필터는 별도의 변위 맵의 밝기 값을 기준으로 레이어의 픽셀을 왜곡하여 디자이너가 옷 주름에 아트를 감싸거나, 물결 효과를 추가하거나, 텍스처가 있는 표면에 로고를 맞추는 데 사용됩니다. 이 필터를 스마트 필터로 적용하면 설정이 PSD 파일 내부에 저장되어 완전히 편집 가능하게 유지됩니다. 이 문서에서는 C#에서 Displace 스마트 필터 데이터를 읽고 쓰는 방법을 보여줍니다. Smart Object 레이어에 Displace 스마트 필터를 추가하고, 스케일 및 가장자리 처리 옵션을 구성하고, 변위 맵을 삽입하고, PSD를 저장한 다음, 필터 설정을 다시 읽어 라운드 트립을 검증합니다 — 모두 Adobe Photoshop이 설치되지 않은 상태에서 수행됩니다.
핵심 요점
DisplaceSmartFilter클래스는 Aspose.PSD for .NET 26.8 이상에서 사용할 수 있으며, Photoshop Displace 필터를 강력하게 형식화된 .NET 객체로 노출합니다.- 수평 및 수직 스케일, 변위 방법(
Tile또는Stretch), 그리고 정의되지 않은 영역 처리(WrapAround또는RepeatEdgePixels)는 모두 간단한 읽기/쓰기 속성입니다. - 생성자에
true를 전달하면 변위 맵을 출력 PSD에 포함시킬 수 있으며, 이를 통해 파일이 자체 포함되고 휴대 가능하게 유지됩니다. SmartFilters.UpdateResourceValues()는 필터 컬렉션을 변경한 후에 호출해야 하며, 그렇지 않으면 변경 사항이 저장되지 않습니다.- 동일한 API는 기존 PSD 파일에서 필터 데이터를 다시 읽어들여 검증, 감사 및 배치 처리에 적합합니다.
왜 Displace 스마트 필터가 중요한가
디자인 자동화 파이프라인은 종종 대규모로 Photoshop 효과를 재현해야 합니다. 일반적인 예로는 프린트 디자인이 티셔츠의 주름을 따라가는 제품 목업을 생성하거나, 마케팅 팀을 위한 템플릿 변형을 제작하거나, 모든 파일이 동일한 필터 설정을 사용하는지 확인하기 위해 PSD 템플릿 라이브러리를 감사하는 경우가 있습니다.
Photoshop에서 수작업으로 이를 수행하면 규모를 확장할 수 없으며, 효과를 픽셀로 평탄화하면 나중에 편집할 수 있는 능력을 잃게 됩니다. C#에서 Displace 스마트 필터 데이터를 읽고 쓰면 필터를 비파괴적이며 Photoshop에서 편집 가능하게 유지하면서 서버 측 코드, 백그라운드 작업 또는 데스크톱 도구를 통해 제어할 수 있습니다.
Aspose.PSD를 사용하여 Displace Smart Filter 데이터 읽기 및 쓰기
Aspose.PSD for .NET C# 개발자가 DisplaceSmartFilter 클래스를 통해 Displace 스마트 필터 데이터를 직접 읽고 쓸 수 있도록 지원합니다.
시작하기
Package Manager Console에서 Aspose.PSD NuGet 패키지 (버전 26.8 이상)를 설치합니다:
Install-Package Aspose.PSD
또는 .NET CLI를 사용하십시오:
dotnet add package Aspose.PSD
아래 예제에서는 다음 네임스페이스를 사용합니다:
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;
두 개의 입력 파일이 필요합니다: 최소 하나의 스마트 오브젝트 레이어가 포함된 PSD와 변위 맵으로 사용할 PSD입니다. API 세부 사항은 Aspose.PSD for .NET documentation 및 스마트 필터 가이드를 참조하십시오.
DisplaceSmartFilter 속성 한눈에 보기
| Property | Type | Purpose |
|---|---|---|
HorizontalScale | double | Photoshop의 Displace 대화 상자와 같은 수평 변위 스케일 |
VerticalScale | double | 수직 변위 스케일 |
DisplacementMethod | DisplacementMethod | Tile은 맵을 반복하고; Stretch는 레이어에 맞게 맵 크기를 조정합니다 |
UndefinedAreas | UndefinedAreas | 레이어 밖으로 이동한 픽셀에 대해 WrapAround 또는 RepeatEdgePixels |
IsDisplacementMapEmbedded | bool | 맵이 PSD에 포함되어 있는지 여부를 나타냅니다 |
DisplaceMapData | — | 포함된 변위 맵 데이터 |
DisplacementMapPath | string | 변위 맵의 경로 |
C#에서 Displace 스마트 필터 추가 방법
첫 번째 단계는 Smart Object 레이어를 포함하는 PSD를 로드하는 것입니다. 그런 다음 DisplaceSmartFilter를 생성하고, 해당 속성을 구성한 뒤 레이어의 스마트 필터 컬렉션에 추가하고 결과를 저장합니다.
다음 C# 예제는 스마트 오브젝트 레이어에 Displace 스마트 필터를 추가하고 구성합니다.
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);
}
설명
- PSD 로드 –
Image.Load는 일반Image를 반환하며, 이는PsdImage로 캐스팅되어 레이어 및 스마트 필터와 같은 PSD 전용 기능에 접근할 수 있습니다. - 스마트 오브젝트 레이어 찾기 –
OfType<SmartObjectLayer>()는 첫 번째 스마트 오브젝트 레이어를 선택하고, 존재하지 않을 경우 명확한 메시지와 함께 실패합니다. 이는Layers에 직접 인덱싱하는 것보다 안전합니다, 왜냐하면 파일마다 레이어 순서가 다르기 때문입니다. - 필터 생성 –
DisplaceSmartFilter(string, bool)생성자는 변위 맵 경로와 맵을 포함시킬지 여부를 제어하는 플래그를 받습니다.true를 전달하면 출력 PSD가 자체 포함됩니다. - 필터 구성 –
HorizontalScale와VerticalScale은 변위 강도를 설정합니다.DisplacementMethod.Tile은 레이어 전체에 맵을 반복하고,Stretch는 레이어에 맞게 크기를 조정합니다.UndefinedAreas.WrapAround는 캔버스 밖으로 이동한 픽셀을 반대쪽 가장자리의 내용으로 채우며,RepeatEdgePixels는 가장자리 색상을 확장합니다. - 컬렉션 업데이트 –
SmartFilters.Filters는 배열로 노출됩니다. 이를List<SmartFilter>에 복사하고 새 필터를 추가한 뒤ToArray()로 다시 할당하면 레이어에 이미 존재하던 스마트 필터를 보존할 수 있습니다. - 변경 사항 저장 –
UpdateResourceValues()는 필터 컬렉션을 레이어의 PSD 리소스에 기록합니다. 이 호출을 생략하면 새 필터가 저장 시 사라집니다. - 저장 –
image.Save(outputFile)은 업데이트된 PSD를 디스크에 기록합니다.
C#에서 Displace Smart Filter 데이터 읽는 방법
PSD를 저장한 후, 다시 로드하고 필터 속성을 검사하여 모든 값이 올바르게 유지되었는지 확인할 수 있습니다. 동일한 방법은 Photoshop에서 만든 PSD 파일에도 적용됩니다.
다음 C# 예제는 Displace 스마트 필터를 다시 읽고 설정을 검증합니다.
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}.");
}
}
설명
- 파일 다시 로드 –
Image.Load는 이전 단계에서 저장된 PSD를 엽니다. - Smart Object 레이어 찾기 – 동일한 유형 기반 조회를 사용하여 읽기 및 쓰기 단계가 일관되게 유지됩니다.
- 유형별 필터 찾기 –
OfType<DisplaceSmartFilter>().LastOrDefault()는 가장 최근에 추가된 Displace 필터를 반환하며 절대 잘못된 형변환을 발생시키지 않습니다. 이는 마지막 배열 요소를 읽고as로 형변환하는 것보다 더 신뢰할 수 있는데,as는 다른 필터가 해당 위치에 있을 경우 조용히null을 반환하기 때문입니다. - 속성 읽기 – 모든 필터 설정은 형식이 지정된 속성으로 제공되므로 로그를 남기거나, 비교하거나, 보고서로 내보낼 수 있습니다.
- 검증 –
AssertAreEqual도우미는 지속된 값과 원래 값을 비교하고, 불일치가 있을 경우 설명이 포함된 메시지와 함께 예외를 발생시킵니다.
결론
Aspose.PSD for .NET의 DisplaceSmartFilter 클래스를 사용하면 C# 개발자는 코드를 통해 Photoshop Displace 스마트 필터를 추가, 구성, 저장 및 다시 읽어올 수 있습니다. 이 필터는 Photoshop에서 비파괴적이며 편집 가능하게 유지되고, 변위 맵은 PSD 내부를 이동할 수 있으며, 동일한 API가 라운드트립 검증을 지원합니다. 이를 통해 .NET 기반에서 목업 생성기, 템플릿 파이프라인 및 PSD 감사 도구를 쉽게 구축할 수 있습니다.
FAQs
Aspose.PSD for .NET의 어느 버전이 Displace 스마트 필터를 지원합니까? Displace 스마트 필터 데이터의 읽기 및 쓰기는 Aspose.PSD for .NET 26.8에서 도입되었습니다.
DisplaceSmartFilter클래스를 사용하려면 26.8 버전 이상을 사용하십시오.일반 래스터 레이어에 DisplaceSmartFilter를 추가할 수 있나요?
스마트 필터 데이터는 Smart Object 레이어에 저장되므로, 필터는SmartFilters컬렉션의SmartObjectLayer에 추가해야 합니다. 내용이 일반 레이어에 있는 경우, 먼저 Smart Object로 변환하십시오.PSD에 변위 맵을 어떻게 삽입합니까? 변위 맵 경로와
true를DisplaceSmartFilter생성자에 전달합니다. 저장 후IsDisplacementMapEmbedded는true를 반환하고DisplaceMapData는 삽입된 맵 데이터를 보유합니다.UndefinedAreas 속성이 취할 수 있는 값은 무엇입니까?
UndefinedAreas는WrapAround를 지원하며, 이는 이미지의 반대 가장자리에서 콘텐츠를 가져와 정의되지 않은 픽셀을 채웁니다. 또한RepeatEdgePixels는 가장자리 픽셀의 색상을 확장합니다.DisplacementMethod.Tile과 DisplacementMethod.Stretch의 차이점은 무엇인가요?
Tile은 변위 맵을 원래 크기로 레이어 전체에 반복하고,Stretch는 변위 맵을 레이어에 맞게 크기를 조정합니다.스마트 필터를 수정한 후에 UpdateResourceValues를 호출해야 합니까?
예.UpdateResourceValues는 수정된 필터 컬렉션을 Smart Object 레이어의 리소스에 기록합니다. 이를 호출하지 않으면 저장할 때 새 필터가 지속되지 않습니다.
무료 라이선스를 받고 더 알아보기
제한 없이 Aspose.PSD for .NET을 평가하려면 임시 라이선스를 요청하십시오:
PSD 파일을 .NET에서 작업하기 위한 추가 리소스:
