Displace filtresi, Photoshop’un en kullanışlı bozulma araçlarından biridir. Katmanın piksellerini ayrı bir yer değiştirme haritasının parlaklık değerlerine göre bükerek, tasarımcıların sanat eserlerini kumaş kıvrımlarına sarmasını, dalgalanma efektleri eklemesini veya logoları dokulu yüzeylere yerleştirmesini sağlar. Bu filtre akıllı filtre olarak uygulandığında, ayarları PSD dosyasının içinde saklanır ve tamamen düzenlenebilir kalır. Bu makale, C# dilinde displace akıllı filtre verilerini nasıl okuyup yazacağınızı gösterir. Bir Smart Object katmanına Displace akıllı filtre ekleyecek, ölçek ve kenar işleme seçeneklerini yapılandıracak, yer değiştirme haritasını gömecek, PSD’yi kaydedecek ve ardından filtre ayarlarını okuyarak dönüşümün doğruluğunu doğrulayacaksınız — tüm bunlar Adobe Photoshop yüklü olmadan gerçekleşir.

Anahtar Çıkarımlar

  • DisplaceSmartFilter sınıfı, Aspose.PSD for .NET 26.8 ve sonraki sürümlerde mevcuttur ve Photoshop Displace filtresini güçlü tiplenmiş bir .NET nesnesi olarak sunar.
  • Yatay ve dikey ölçek, yer değiştirme yöntemi (Tile veya Stretch) ve tanımsız alan işleme (WrapAround veya RepeatEdgePixels) hepsi basit okuma/yazma özellikleridir.
  • Yer değiştirme haritası, yapıcıya true geçirilerek çıktı PSD’sine gömülebilir; bu, dosyanın kendi içinde bütünleşik ve taşınabilir olmasını sağlar.
  • SmartFilters.UpdateResourceValues() filtre koleksiyonunu değiştirdikten sonra çağrılmalıdır, aksi takdirde değişiklikler kaydedilmez.
  • Aynı API, mevcut PSD dosyalarından filtre verilerini geri okur; bu da onu doğrulama, denetleme ve toplu işleme için uygun kılar.

Neden Displace Akıllı Filtresi Önemlidir

Tasarım otomasyon hatları genellikle Photoshop efektlerini ölçekli bir şekilde yeniden üretmek zorundadır. Tipik örnekler arasında, bir baskı tasarımının bir tişörtün kıvrımlarını takip ettiği ürün mockup’ları oluşturmak, pazarlama ekipleri için şablon varyasyonları üretmek veya her dosyanın aynı filtre ayarlarını kullandığını doğrulamak için bir PSD şablon kütüphanesini denetlemek yer alır.

Bunu Photoshop’ta elle yapmak ölçeklenemez ve efekti piksellere dönüştürmek, daha sonra düzenleme yeteneğini kaybettirir. C#’ta Displace akıllı filtre verilerini okuyup yazarak, filtreyi Photoshop’ta yıkıcı olmayan ve düzenlenebilir tutarsınız; aynı zamanda sunucu tarafı kodu, arka plan işleri veya masaüstü araçlarıyla kontrol edebilirsiniz.

Aspose.PSD ile Deplasman Akıllı Filtre Verilerini Okuma ve Yazma

Aspose.PSD for .NET C# geliştiricilerinin Displace akıllı filtre verilerini doğrudan DisplaceSmartFilter sınıfı aracılığıyla okumasını ve yazmasını sağlar.

Başlarken

Aspose.PSD NuGet package paketini (versiyon 26.8 veya daha yenisi) Package Manager Console’dan yükleyin:

Install-Package Aspose.PSD

Veya .NET CLI’yi kullanın:

dotnet add package Aspose.PSD

Aşağıdaki örnekler şu ad alanlarını kullanır.

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;

Ayrıca iki giriş dosyasına ihtiyacınız olacak: en az bir Smart Object katmanı içeren bir PSD ve yer değiştirme haritası olarak kullanılacak bir PSD. API detayları için, Aspose.PSD for .NET belgeleri ve akıllı filtreler rehberi bağlantılarına bakın.

DisplaceSmartFilter Özelliklerine Genel Bakış

ÖzellikTürAmaç
HorizontalScaledoublePhotoshop’un Displace iletişim kutusundaki gibi yatay yer değiştirme ölçeği
VerticalScaledoubleDikey yer değiştirme ölçeği
DisplacementMethodDisplacementMethodTile haritayı tekrar eder; Stretch haritayı katmana sığacak şekilde yeniden boyutlandırır
UndefinedAreasUndefinedAreasKatmanın dışına kaydırılan pikseller için WrapAround veya RepeatEdgePixels
IsDisplacementMapEmbeddedboolHaritanın PSD içinde gömülü olup olmadığını gösterir
DisplaceMapData—Gömülü yer değiştirme haritası verileri
DisplacementMapPathstringYer değiştirme haritasının yolu

C#’ta Displace Akıllı Filtreyi Nasıl Eklenir

İlk adım, Smart Object katmanı içeren bir PSD dosyasını yüklemektir. Ardından DisplaceSmartFilter oluşturur, özelliklerini yapılandırır, katmanın akıllı filtre koleksiyonuna ekler ve sonucu kaydedersiniz.

Aşağıdaki C# örneği, bir Smart Object katmanına Displace akıllı filtresini ekler ve yapılandırır.

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);
}

Açıklama

  1. PSD’yi Yükleme – Image.Load genel bir Image döndürür; bu, katmanlar ve akıllı filtreler gibi PSD’ye özgü özelliklere erişmek için PsdImage tipine dönüştürülür.
  2. Akıllı Nesne katmanını bulma – OfType<SmartObjectLayer>() ilk Akıllı Nesne katmanını seçer ve hiç yoksa net bir mesajla hataya düşer. Bu, Layers içine doğrudan indeksleme yapmaktan daha güvenlidir, çünkü katman sırası dosyalar arasında değişir.
  3. Filtreyi oluşturma – DisplaceSmartFilter(string, bool) yapıcı, yer değiştirme haritasının yolunu ve haritanın gömülü olup olmayacağını kontrol eden bir bayrağı alır. true geçirilmesi, çıktının PSD’sini bağımsız hâle getirir.
  4. Filtreyi yapılandırma – HorizontalScale ve VerticalScale yer değiştirme şiddetini ayarlar. DisplacementMethod.Tile haritayı katman boyunca tekrarlar, Stretch ise ona sığacak şekilde yeniden boyutlandırır. UndefinedAreas.WrapAround tuvalden kaydırılan pikselleri karşı kenardan gelen içerikle doldurur; RepeatEdgePixels ise kenar renklerini genişletir.
  5. Koleksiyonu güncelleme – SmartFilters.Filters bir dizi olarak sunulur. Bunu bir List<SmartFilter>‘a kopyalayıp yeni filtreyi ekleyip ToArray() ile geri atamak, katmanda zaten bulunan akıllı filtreleri korur.
  6. Değişiklikleri kalıcı hale getirme – UpdateResourceValues() filtre koleksiyonunu katmanın PSD kaynaklarına yazar. Bu çağrıyı atlamak, yeni filtrenin kaydedilirken kaybolmasına neden olur.
  7. Kaydetme – image.Save(outputFile) güncellenmiş PSD’yi diske yazar.

C#’ta Displace Akıllı Filtre Verilerini Okuma

PSD’yi kaydettikten sonra, yeniden yükleyebilir ve filtre özelliklerini inceleyerek her değerin doğru bir şekilde kalıcı olup olmadığını doğrulayabilirsiniz. Aynı yaklaşım, Photoshop’ta oluşturulan PSD dosyaları için de çalışır.

Aşağıdaki C# örneği, Displace akıllı filtresini geri okur ve ayarlarını doğrular.

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}.");
    }
}

Açıklama

  1. Dosyayı Yeniden Yükleme – Image.Load önceki adımda kaydedilen PSD’yi açar.
  2. Smart Object katmanını bulma – Aynı tür tabanlı arama, okuma ve yazma adımlarının tutarlı kalmasını sağlar.
  3. Filtreyi türüne göre bulma – OfType<DisplaceSmartFilter>().LastOrDefault() en son eklenen Displace filtresini döndürür ve asla geçersiz bir dönüşüm oluşturmaz. Bu, son dizi öğesini okuyup as ile dönüştürmeye göre daha güvenilirdir; as farklı bir filtre bu konumda bulunursa sessizce null döndürür.
  4. Özellikleri okuma – Tüm filtre ayarları tipli özellikler olarak mevcuttur, böylece kaydedilebilir, karşılaştırılabilir veya bir rapora dışa aktarılabilir.
  5. Doğrulama – AssertAreEqual yardımcı işlevi, kalıcı değerleri orijinal değerlerle karşılaştırır ve herhangi bir uyumsuzlukta açıklayıcı bir mesajla hata fırlatır.

Sonuç

DisplaceSmartFilter sınıfı Aspose.PSD for .NET içinde, C# geliştiricileri Photoshop Displace akıllı filtrelerini tamamen kod içinde ekleyebilir, yapılandırabilir, kaydedebilir ve geri okuyabilir. Filtre, Photoshop’ta yıkıcı olmayan ve düzenlenebilir kalır, yer değiştirme haritası PSD içinde taşınabilir ve aynı API tur‑dönüş doğrulamasını destekler. Bu, .NET üzerinde mockup oluşturucular, şablon boru hatları ve PSD denetim araçları oluşturmayı kolaylaştırır.

SSS

  1. Aspose.PSD for .NET’in hangi sürümü Displace akıllı filtresini destekliyor? Displace akıllı filtre verilerini okuma ve yazma, Aspose.PSD for .NET 26.8’de tanıtıldı. DisplaceSmartFilter sınıfına erişmek için 26.8 veya daha sonraki bir sürümü kullanın.

  2. Bir DisplaceSmartFilter’ı normal bir raster katmanına ekleyebilir miyim? Akıllı filtre verileri Smart Object katmanlarıyla depolanır, bu yüzden filtre SmartFilters koleksiyonuna bir SmartObjectLayer içinde eklenmelidir. İçeriğiniz normal bir katmanda ise, önce bir Smart Object’e dönüştürün.

  3. PSD içinde yer değiştirme haritasını nasıl gömebilirim? Yer değiştirme haritası yolunu ve true değerini DisplaceSmartFilter yapıcısına geçirin. Kaydetme işleminden sonra, IsDisplacementMapEmbedded true döndürür ve DisplaceMapData gömülü harita verilerini tutar.

  4. UndefinedAreas özelliği hangi değerleri alabilir? UndefinedAreas WrapAround değerini destekler; bu, tanımsız pikselleri görüntünün karşı kenarındaki içerikle doldurur ve RepeatEdgePixels değerini destekler; bu da kenar piksellerinin renklerini uzatır.

  5. DisplacementMethod.Tile ve DisplacementMethod.Stretch arasındaki fark nedir? Tile yer değiştirme haritasını katman boyunca orijinal boyutunda tekrar eder, Stretch ise haritayı katmana sığacak şekilde yeniden boyutlandırır.

  6. Akıllı filtreleri değiştirdikten sonra UpdateResourceValues’ı çağırmam gerekiyor mu? Evet. UpdateResourceValues değiştirilmiş filtre koleksiyonunu Smart Object katmanının kaynaklarına yazar. Olmadan, yeni filtre kaydedildiğinde kalıcı olmaz.

Ücretsiz Bir Lisans Alın ve Daha Fazlasını Keşfedin

Aspose.PSD for .NET’i sınırlama olmadan değerlendirin ve geçici bir lisans talep edin:

Ücretsiz Geçici Lisans Al

PSD dosyalarıyla .NET’te çalışmak için ek kaynaklar:

Daha Fazla Oku