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
DisplaceSmartFiltersı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 (
TileveyaStretch) ve tanımsız alan işleme (WrapAroundveyaRepeatEdgePixels) hepsi basit okuma/yazma özellikleridir. - Yer değiştirme haritası, yapıcıya
truegeç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ış
| Özellik | Tür | Amaç |
|---|---|---|
HorizontalScale | double | Photoshop’un Displace iletişim kutusundaki gibi yatay yer değiştirme ölçeği |
VerticalScale | double | Dikey yer değiştirme ölçeği |
DisplacementMethod | DisplacementMethod | Tile haritayı tekrar eder; Stretch haritayı katmana sığacak şekilde yeniden boyutlandırır |
UndefinedAreas | UndefinedAreas | Katmanın dışına kaydırılan pikseller için WrapAround veya RepeatEdgePixels |
IsDisplacementMapEmbedded | bool | Haritanın PSD içinde gömülü olup olmadığını gösterir |
DisplaceMapData | — | Gömülü yer değiştirme haritası verileri |
DisplacementMapPath | string | Yer 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
- PSD’yi Yükleme –
Image.Loadgenel birImagedöndürür; bu, katmanlar ve akıllı filtreler gibi PSD’ye özgü özelliklere erişmek içinPsdImagetipine dönüştürülür. - 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,Layersiçine doğrudan indeksleme yapmaktan daha güvenlidir, çünkü katman sırası dosyalar arasında değişir. - 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.truegeçirilmesi, çıktının PSD’sini bağımsız hâle getirir. - Filtreyi yapılandırma –
HorizontalScaleveVerticalScaleyer değiştirme şiddetini ayarlar.DisplacementMethod.Tileharitayı katman boyunca tekrarlar,Stretchise ona sığacak şekilde yeniden boyutlandırır.UndefinedAreas.WrapAroundtuvalden kaydırılan pikselleri karşı kenardan gelen içerikle doldurur;RepeatEdgePixelsise kenar renklerini genişletir. - Koleksiyonu güncelleme –
SmartFilters.Filtersbir dizi olarak sunulur. Bunu birList<SmartFilter>‘a kopyalayıp yeni filtreyi ekleyipToArray()ile geri atamak, katmanda zaten bulunan akıllı filtreleri korur. - 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. - 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
- Dosyayı Yeniden Yükleme –
Image.Loadönceki adımda kaydedilen PSD’yi açar. - Smart Object katmanını bulma – Aynı tür tabanlı arama, okuma ve yazma adımlarının tutarlı kalmasını sağlar.
- 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 okuyupasile dönüştürmeye göre daha güvenilirdir;asfarklı bir filtre bu konumda bulunursa sessizcenulldöndürür. - Ö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.
- Doğrulama –
AssertAreEqualyardı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
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ı.
DisplaceSmartFiltersınıfına erişmek için 26.8 veya daha sonraki bir sürümü kullanın.Bir DisplaceSmartFilter’ı normal bir raster katmanına ekleyebilir miyim? Akıllı filtre verileri Smart Object katmanlarıyla depolanır, bu yüzden filtre
SmartFilterskoleksiyonuna birSmartObjectLayeriçinde eklenmelidir. İçeriğiniz normal bir katmanda ise, önce bir Smart Object’e dönüştürün.PSD içinde yer değiştirme haritasını nasıl gömebilirim? Yer değiştirme haritası yolunu ve
truedeğeriniDisplaceSmartFilteryapıcısına geçirin. Kaydetme işleminden sonra,IsDisplacementMapEmbeddedtruedöndürür veDisplaceMapDatagömülü harita verilerini tutar.UndefinedAreas özelliği hangi değerleri alabilir?
UndefinedAreasWrapArounddeğerini destekler; bu, tanımsız pikselleri görüntünün karşı kenarındaki içerikle doldurur veRepeatEdgePixelsdeğerini destekler; bu da kenar piksellerinin renklerini uzatır.DisplacementMethod.Tile ve DisplacementMethod.Stretch arasındaki fark nedir?
Tileyer değiştirme haritasını katman boyunca orijinal boyutunda tekrar eder,Stretchise haritayı katmana sığacak şekilde yeniden boyutlandırır.Akıllı filtreleri değiştirdikten sonra UpdateResourceValues’ı çağırmam gerekiyor mu? Evet.
UpdateResourceValuesdeğ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:
PSD dosyalarıyla .NET’te çalışmak için ek kaynaklar:
- Aspose.PSD for .NET Belgeleri
- Aspose.PSD for .NET API Referansı
- Aspose.PSD for C# içinde Akıllı Filtre Manipülasyonu
- Ücretsiz Çevrimiçi PSD Araçları
