Filter Displace adalah salah satu alat distorsi paling berguna di Photoshop. Filter ini memutar piksel lapisan sesuai dengan nilai kecerahan dari peta displacement terpisah, yang merupakan cara desainer membungkus karya seni di sekitar lipatan kain, menambahkan efek riak, atau menempatkan logo pada permukaan bertekstur. Ketika filter tersebut diterapkan sebagai smart filter, pengaturannya disimpan di dalam file PSD dan tetap dapat diedit sepenuhnya. Artikel ini menunjukkan cara membaca dan menulis data smart filter Displace dalam C#. Anda akan menambahkan smart filter Displace ke lapisan Smart Object, mengonfigurasi opsi skala dan penanganan tepi, menyematkan peta displacement, menyimpan PSD, dan kemudian membaca kembali pengaturan filter untuk memverifikasi round trip — semuanya tanpa menginstal Adobe Photoshop.
Poin Penting
- Kelas
DisplaceSmartFilter, tersedia di Aspose.PSD for .NET 26.8 dan yang lebih baru, mengekspos filter Photoshop Displace sebagai objek .NET yang kuat bertipe. - Skala horizontal dan vertikal, metode perpindahan (
TileatauStretch), dan penanganan area tak terdefinisi (WrapAroundatauRepeatEdgePixels) semuanya merupakan properti baca/tulis yang sederhana. - Peta perpindahan dapat disematkan dalam PSD output dengan memberikan
trueke konstruktor, yang membuat file menjadi mandiri dan dapat dipindahkan. SmartFilters.UpdateResourceValues()harus dipanggil setelah mengubah koleksi filter, jika tidak perubahan tidak akan disimpan.- API yang sama membaca data filter kembali dari file PSD yang ada, yang membuatnya cocok untuk validasi, audit, dan pemrosesan batch.
Mengapa Filter Pintar Displace Penting
Pipeline otomatisasi desain sering kali perlu mereproduksi efek Photoshop secara skala besar. Contoh tipikal meliputi pembuatan mockup produk di mana desain cetak mengikuti lipatan kaos, menghasilkan variasi templat untuk tim pemasaran, atau mengaudit perpustakaan templat PSD untuk memastikan bahwa setiap file menggunakan pengaturan filter yang sama.
Melakukan ini secara manual di Photoshop tidak dapat diskalakan, dan meratakan efek menjadi piksel menghilangkan kemampuan untuk mengeditnya nanti. Dengan membaca dan menulis data filter pintar Displace di C#, Anda mempertahankan filter tetap non‑destruktif dan dapat diedit di Photoshop, sambil mengendalikannya dari kode sisi server, pekerjaan latar belakang, atau alat desktop.
Menggunakan Aspose.PSD untuk Membaca dan Menulis Data Filter Pintar Displace
Aspose.PSD for .NET memungkinkan pengembang C# untuk membaca dan menulis data filter pintar Displace secara langsung melalui kelas DisplaceSmartFilter.
Memulai
Instal Aspose.PSD paket NuGet (versi 26.8 atau lebih baru) dari Package Manager Console:
Install-Package Aspose.PSD
Atau gunakan .NET CLI:
dotnet add package Aspose.PSD
Contoh di bawah menggunakan namespace berikut:
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;
Anda juga akan membutuhkan dua file input: sebuah PSD yang berisi setidaknya satu lapisan Smart Object, dan sebuah PSD untuk digunakan sebagai peta perpindahan. Untuk detail API, lihat Aspose.PSD for .NET documentation dan panduan filter pintar.
DisplaceSmartFilter Properti Sekilas
| Properti | Tipe | Tujuan |
|---|---|---|
HorizontalScale | double | Skala perpindahan horizontal, seperti pada dialog Displace Photoshop |
VerticalScale | double | Skala perpindahan vertikal |
DisplacementMethod | DisplacementMethod | Tile mengulang peta; Stretch mengubah ukuran peta agar sesuai dengan lapisan |
UndefinedAreas | UndefinedAreas | WrapAround atau RepeatEdgePixels untuk piksel yang dipindahkan di luar lapisan |
IsDisplacementMapEmbedded | bool | Menunjukkan apakah peta tertanam dalam file PSD |
DisplaceMapData | — | Data peta perpindahan yang tertanam |
DisplacementMapPath | string | Jalur peta perpindahan |
Cara Menambahkan Filter Pintar Displace di C#
Langkah pertama adalah memuat PSD yang berisi lapisan Smart Object. Anda kemudian membuat DisplaceSmartFilter, mengonfigurasi propertinya, menambahkannya ke koleksi smart filter lapisan, dan menyimpan hasilnya.
Contoh C# berikut menambahkan dan mengonfigurasi filter pintar Displace pada lapisan Smart Object.
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);
}
Penjelasan
- Memuat PSD –
Image.Loadmengembalikan sebuahImagegenerik, yang kemudian di‑cast kePsdImageuntuk mengakses fitur khusus PSD seperti lapisan dan smart filter. - Menemukan lapisan Smart Object –
OfType<SmartObjectLayer>()memilih lapisan Smart Object pertama dan gagal dengan pesan yang jelas jika tidak ada. Ini lebih aman dibandingkan mengindeks langsung keLayers, karena urutan lapisan dapat berbeda antar file. - Membuat filter – Konstruktor
DisplaceSmartFilter(string, bool)menerima jalur peta displacement dan sebuah flag yang mengontrol apakah peta tersebut disematkan. Menetapkantruemembuat PSD output menjadi mandiri. - Mengonfigurasi filter –
HorizontalScaledanVerticalScalemengatur kekuatan displacement.DisplacementMethod.Tilemengulang peta di seluruh lapisan, sedangkanStretchmengubah ukurannya agar pas.UndefinedAreas.WrapAroundmengisi piksel yang bergeser keluar kanvas dengan konten dari tepi berlawanan;RepeatEdgePixelsmemperluas warna tepi sebagai gantinya. - Memperbarui koleksi –
SmartFilters.Filtersdiekspos sebagai array. Menyalinnya keList<SmartFilter>, menambahkan filter baru, dan menetapkan kembali denganToArray()mempertahankan semua smart filter yang sudah ada pada lapisan. - Menyimpan perubahan –
UpdateResourceValues()menulis koleksi filter ke dalam sumber daya PSD lapisan. Melewatkan pemanggilan ini akan menyebabkan filter baru hilang saat disimpan. - Menyimpan –
image.Save(outputFile)menulis PSD yang telah diperbarui ke disk.
Cara Membaca Data Filter Pintar Displace di C#
Setelah menyimpan PSD, Anda dapat memuat ulang dan memeriksa properti filter untuk memastikan bahwa setiap nilai telah disimpan dengan benar. Pendekatan yang sama berlaku untuk file PSD yang dibuat di Photoshop.
Contoh C# berikut membaca kembali filter pintar Displace dan memvalidasi pengaturannya.
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}.");
}
}
Penjelasan
- Memuat ulang file –
Image.Loadmembuka PSD yang disimpan pada langkah sebelumnya. - Menemukan lapisan Smart Object – Pencarian berbasis tipe yang sama menjaga konsistensi langkah baca dan tulis.
- Menemukan filter berdasarkan tipe –
OfType<DisplaceSmartFilter>().LastOrDefault()mengembalikan filter Displace yang paling baru ditambahkan dan tidak pernah menghasilkan cast yang tidak valid. Ini lebih dapat diandalkan daripada membaca elemen array terakhir dan melakukan cast denganas, yang secara diam-diam mengembalikannulljika filter yang berbeda berada di posisi tersebut. - Membaca properti – Semua pengaturan filter tersedia sebagai properti bertipe, sehingga dapat dicatat, dibandingkan, atau diekspor ke laporan.
- Validasi – Pembantu
AssertAreEqualmembandingkan nilai yang dipersistensikan dengan nilai asli dan melemparkan pesan deskriptif bila ada ketidaksesuaian.
Kesimpulan
Dengan kelas DisplaceSmartFilter di Aspose.PSD for .NET, pengembang C# dapat menambahkan, mengkonfigurasi, menyimpan, dan membaca kembali filter pintar Displace Photoshop sepenuhnya dalam kode. Filter tetap non‑destruktif dan dapat diedit di Photoshop, peta perpindahan dapat berada di dalam PSD, dan API yang sama mendukung validasi putar‑balik. Ini membuatnya mudah untuk membangun generator mockup, pipeline templat, dan alat audit PSD di atas .NET.
FAQ
Versi berapa dari Aspose.PSD for .NET yang mendukung filter pintar Displace? Membaca dan menulis data filter pintar Displace diperkenalkan di Aspose.PSD for .NET 26.8. Gunakan versi 26.8 atau yang lebih baru untuk mengakses kelas
DisplaceSmartFilter.Bisakah saya menambahkan DisplaceSmartFilter ke lapisan raster biasa? Data filter pintar disimpan bersama lapisan Smart Object, sehingga filter harus ditambahkan ke koleksi
SmartFiltersdariSmartObjectLayer. Jika konten Anda berada di lapisan biasa, ubah terlebih dahulu menjadi Smart Object.Bagaimana cara menyematkan displacement map ke dalam PSD? Berikan path displacement map dan
trueke konstruktorDisplaceSmartFilter. Setelah menyimpan,IsDisplacementMapEmbeddedmengembalikantruedanDisplaceMapDatamenyimpan data peta yang disematkan.Nilai apa yang dapat diambil properti UndefinedAreas?
UndefinedAreasmendukungWrapAround, yang mengisi piksel yang tidak terdefinisi dengan konten dari tepi berlawanan gambar, danRepeatEdgePixels, yang memperluas warna piksel tepi.Apa perbedaan antara DisplacementMethod.Tile dan DisplacementMethod.Stretch?
Tilemengulangi peta displacement di seluruh lapisan dengan ukuran aslinya, sementaraStretchmengubah ukuran peta agar sesuai dengan lapisan.Apakah saya harus memanggil UpdateResourceValues setelah memodifikasi filter pintar? Ya.
UpdateResourceValuesmenulis koleksi filter yang dimodifikasi ke dalam sumber daya lapisan Smart Object. Tanpa itu, filter baru tidak akan disimpan saat Anda menyimpan.
Dapatkan Lisensi Gratis dan Jelajahi Lebih Lanjut
Evaluasi Aspose.PSD for .NET tanpa batasan dengan meminta lisensi sementara:
Dapatkan Lisensi Sementara Gratis
Sumber daya tambahan untuk bekerja dengan file PSD di .NET:
- Aspose.PSD for .NET Dokumentasi
- Aspose.PSD for .NET Referensi API
- Manipulasi Smart Filter di Aspose.PSD for C#
- Alat PSD Online Gratis
