مرشح Displace هو أحد أكثر أدوات التشويه فائدة في Photoshop. يقوم بتشويه بكسلات الطبقة وفقًا لقيم السطوع في خريطة إزاحة منفصلة، وهو ما يستخدمه المصممون لتغليف الأعمال الفنية حول طيات القماش، أو إضافة تأثيرات تموج، أو وضع الشعارات على أسطح ذات نسيج. عندما يُطبق هذا المرشح كمرشح ذكي، تبقى إعداداته داخل ملف PSD وتظل قابلة للتحرير بالكامل. تُظهر هذه المقالة كيفية قراءة وكتابة بيانات مرشح Displace الذكي في C#. ستضيف مرشح Displace الذكي إلى طبقة Smart Object، وتضبط خيارات المقياس ومعالجة الحواف، وتدمج خريطة الإزاحة، وتحفظ ملف PSD، ثم تقرأ إعدادات المرشح مرة أخرى للتحقق من صحة العملية — كل ذلك دون الحاجة إلى تثبيت Adobe Photoshop.
النقاط الرئيسية
- الفئة
DisplaceSmartFilter، المتاحة في Aspose.PSD for .NET 26.8 وما بعده، تكشف عن فلتر Photoshop Displace ككائن .NET مكتوب بنوع قوي. - مقياس الأفقي والرأسي، طريقة الإزاحة (
TileأوStretch)، ومعالجة المنطقة غير المعرفة (WrapAroundأوRepeatEdgePixels) كلها خصائص قراءة/كتابة بسيطة. - يمكن تضمين خريطة الإزاحة في ملف PSD الناتج بتمرير
trueإلى المُنشئ، مما يبقي الملف مستقلًا ومحمولًا. - يجب استدعاء
SmartFilters.UpdateResourceValues()بعد تغيير مجموعة الفلاتر، وإلا لن يتم حفظ التغييرات. - نفس الـ API يقرأ بيانات الفلتر مرة أخرى من ملفات PSD الموجودة، مما يجعله مناسبًا للتحقق، التدقيق، والمعالجة الدفعية.
لماذا يُعَدّ مرشح Displace Smart مهمًا
غالبًا ما تحتاج خطوط أتمتة التصميم إلى إعادة إنتاج تأثيرات Photoshop على نطاق واسع. تشمل الأمثلة النموذجية إنشاء نماذج منتجات حيث يتبع التصميم المطبوع طيات القميص، وإنتاج تنوعات القوالب لفرق التسويق، أو تدقيق مكتبة قوالب PSD للتأكد من أن كل ملف يستخدم نفس إعدادات الفلتر.
القيام بذلك يدويًا في Photoshop لا يتناسب مع المتطلبات، وتحويل التأثير إلى بكسلات يفقد القدرة على تحريره لاحقًا. من خلال قراءة وكتابة بيانات الفلتر الذكي Displace في C#، تحتفظ بالفلتر غير مدمر وقابل للتحرير في Photoshop، مع التحكم فيه من خلال كود الخادم، أو وظائف الخلفية، أو الأدوات المكتبية.
استخدام Aspose.PSD لقراءة وكتابة بيانات مرشح Displace Smart
Aspose.PSD for .NET تمكّن مطوري C# من قراءة وكتابة بيانات مرشح Displace الذكي مباشرةً عبر فئة DisplaceSmartFilter.
البدء
قم بتثبيت Aspose.PSD NuGet package (الإصدار 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 يحتوي على طبقة Smart Object واحدة على الأقل، وملف PSD لاستخدامه كخريطة إزاحة. للحصول على تفاصيل API، راجع توثيق Aspose.PSD for .NET ودليل الفلاتر الذكية.
خصائص DisplaceSmartFilter في لمحة سريعة
| الخاصية | النوع | الغرض |
|---|---|---|
HorizontalScale | double | مقياس إزاحة أفقي، كما هو في مربع حوار Displace في Photoshop |
VerticalScale | double | مقياس إزاحة عمودي |
DisplacementMethod | DisplacementMethod | Tile يكرر الخريطة؛ Stretch يغيّر حجم الخريطة لتتناسب مع الطبقة |
UndefinedAreas | UndefinedAreas | WrapAround أو RepeatEdgePixels للبكسلات التي تم إزاحتها خارج الطبقة |
IsDisplacementMapEmbedded | bool | يشير إلى ما إذا كانت الخريطة مدمجة في ملف PSD |
DisplaceMapData | — | بيانات خريطة الإزاحة المدمجة |
DisplacementMapPath | string | مسار خريطة الإزاحة |
كيفية إضافة مرشح Displace الذكي في C#
الخطوة الأولى هي تحميل ملف PSD يحتوي على طبقة كائن ذكي. ثم تقوم بإنشاء DisplaceSmartFilter، وتكوين خصائصه، وإضافته إلى مجموعة الفلاتر الذكية للطبقة، ثم حفظ النتيجة.
المثال التالي بلغة C# يضيف ويُكوّن مرشح Displace الذكي على طبقة 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);
}
شرح
- تحميل PSD –
Image.Loadيُعيد كائنImageعام، يتم تحويله إلىPsdImageللوصول إلى ميزات PSD الخاصة مثل الطبقات والفلاتر الذكية. - العثور على طبقة Smart Object –
OfType<SmartObjectLayer>()يختار أول طبقة Smart Object ويعطي رسالة واضحة إذا لم توجد. هذا أكثر أمانًا من الفهرسة مباشرة في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 المحدث إلى القرص.
كيفية قراءة بيانات فلتر Displace Smart في C#
بعد حفظ ملف PSD، يمكنك إعادة تحميله وفحص خصائص الفلتر للتأكد من أن كل قيمة تم حفظها بشكل صحيح. نفس النهج يعمل مع ملفات PSD التي تم إنشاؤها في Photoshop.
المثال التالي بلغة 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، الذي يُعيدnullبصمت إذا كان هناك فلتر مختلف في ذلك الموضع. - قراءة الخصائص – جميع إعدادات الفلتر متاحة كخصائص مكتوبة، لذا يمكن تسجيلها، مقارنتها، أو تصديرها إلى تقرير.
- التحقق – أداة المساعدة
AssertAreEqualتقارن القيم المخزنة بالقيم الأصلية وتطرح استثناءً برسالة وصفية عند أي عدم تطابق.
الخلاصة
باستخدام الفئة DisplaceSmartFilter في Aspose.PSD for .NET، يمكن لمطوري C# إضافة وتكوين وحفظ وقراءة فلاتر Displace الذكية في Photoshop بالكامل عبر الشيفرة. يظل الفلتر غير مدمر وقابل للتحرير في Photoshop، ويمكن لخريطة الإزاحة الانتقال داخل ملف PSD، وتدعم نفس واجهة برمجة التطبيقات (API) التحقق من صحة الجولة الكاملة. هذا يجعل من السهل بناء مولدات نماذج أولية، خطوط أنابيب القوالب، وأدوات تدقيق PSD على منصة .NET.
الأسئلة الشائعة
أي نسخة من Aspose.PSD for .NET تدعم مرشح Displace الذكي؟
تم تقديم قراءة وكتابة بيانات مرشح Displace الذكي في Aspose.PSD for .NET 26.8. استخدم الإصدار 26.8 أو أحدث للوصول إلى الفئةDisplaceSmartFilter.هل يمكنني إضافة 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:
- توثيق Aspose.PSD for .NET
- مرجع API لـ Aspose.PSD for .NET
- معالجة الفلاتر الذكية في Aspose.PSD for C#
- أدوات PSD مجانية عبر الإنترنت
