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 (Tile atau Stretch), dan penanganan area tak terdefinisi (WrapAround atau RepeatEdgePixels) semuanya merupakan properti baca/tulis yang sederhana.
  • Peta perpindahan dapat disematkan dalam PSD output dengan memberikan true ke 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

PropertiTipeTujuan
HorizontalScaledoubleSkala perpindahan horizontal, seperti pada dialog Displace Photoshop
VerticalScaledoubleSkala perpindahan vertikal
DisplacementMethodDisplacementMethodTile mengulang peta; Stretch mengubah ukuran peta agar sesuai dengan lapisan
UndefinedAreasUndefinedAreasWrapAround atau RepeatEdgePixels untuk piksel yang dipindahkan di luar lapisan
IsDisplacementMapEmbeddedboolMenunjukkan apakah peta tertanam dalam file PSD
DisplaceMapData—Data peta perpindahan yang tertanam
DisplacementMapPathstringJalur 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

  1. Memuat PSD – Image.Load mengembalikan sebuah Image generik, yang kemudian di‑cast ke PsdImage untuk mengakses fitur khusus PSD seperti lapisan dan smart filter.
  2. 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 ke Layers, karena urutan lapisan dapat berbeda antar file.
  3. Membuat filter – Konstruktor DisplaceSmartFilter(string, bool) menerima jalur peta displacement dan sebuah flag yang mengontrol apakah peta tersebut disematkan. Menetapkan true membuat PSD output menjadi mandiri.
  4. Mengonfigurasi filter – HorizontalScale dan VerticalScale mengatur kekuatan displacement. DisplacementMethod.Tile mengulang peta di seluruh lapisan, sedangkan Stretch mengubah ukurannya agar pas. UndefinedAreas.WrapAround mengisi piksel yang bergeser keluar kanvas dengan konten dari tepi berlawanan; RepeatEdgePixels memperluas warna tepi sebagai gantinya.
  5. Memperbarui koleksi – SmartFilters.Filters diekspos sebagai array. Menyalinnya ke List<SmartFilter>, menambahkan filter baru, dan menetapkan kembali dengan ToArray() mempertahankan semua smart filter yang sudah ada pada lapisan.
  6. Menyimpan perubahan – UpdateResourceValues() menulis koleksi filter ke dalam sumber daya PSD lapisan. Melewatkan pemanggilan ini akan menyebabkan filter baru hilang saat disimpan.
  7. 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

  1. Memuat ulang file – Image.Load membuka PSD yang disimpan pada langkah sebelumnya.
  2. Menemukan lapisan Smart Object – Pencarian berbasis tipe yang sama menjaga konsistensi langkah baca dan tulis.
  3. 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 dengan as, yang secara diam-diam mengembalikan null jika filter yang berbeda berada di posisi tersebut.
  4. Membaca properti – Semua pengaturan filter tersedia sebagai properti bertipe, sehingga dapat dicatat, dibandingkan, atau diekspor ke laporan.
  5. Validasi – Pembantu AssertAreEqual membandingkan 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

  1. 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.

  2. Bisakah saya menambahkan DisplaceSmartFilter ke lapisan raster biasa? Data filter pintar disimpan bersama lapisan Smart Object, sehingga filter harus ditambahkan ke koleksi SmartFilters dari SmartObjectLayer. Jika konten Anda berada di lapisan biasa, ubah terlebih dahulu menjadi Smart Object.

  3. Bagaimana cara menyematkan displacement map ke dalam PSD? Berikan path displacement map dan true ke konstruktor DisplaceSmartFilter. Setelah menyimpan, IsDisplacementMapEmbedded mengembalikan true dan DisplaceMapData menyimpan data peta yang disematkan.

  4. Nilai apa yang dapat diambil properti UndefinedAreas? UndefinedAreas mendukung WrapAround, yang mengisi piksel yang tidak terdefinisi dengan konten dari tepi berlawanan gambar, dan RepeatEdgePixels, yang memperluas warna piksel tepi.

  5. Apa perbedaan antara DisplacementMethod.Tile dan DisplacementMethod.Stretch? Tile mengulangi peta displacement di seluruh lapisan dengan ukuran aslinya, sementara Stretch mengubah ukuran peta agar sesuai dengan lapisan.

  6. Apakah saya harus memanggil UpdateResourceValues setelah memodifikasi filter pintar? Ya. UpdateResourceValues menulis 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:

Baca Selengkapnya