המסנן 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
Aspose.PSD for .NET מאפשר למפתחים ב‑C# לקרוא ולכתוב נתוני פילטר חכם Displace ישירות דרך המחלקה DisplaceSmartFilter.
התחלה
התקן את חבילת NuGet של Aspose.PSD (גרסה 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 שמכיל שכבת Smart Object. לאחר מכן אתה יוצר 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 ב‑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.
FAQs
איזו גרסה של Aspose.PSD for .NET תומכת במסנן החכם Displace? קריאה וכתיבה של נתוני מסנן החכם Displace הוצגו ב‑Aspose.PSD for .NET 26.8. השתמשו בגרסה 26.8 או מאוחרת יותר כדי לגשת למחלקה
DisplaceSmartFilterclass.האם אני יכול להוסיף 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 חינמיים מקוונים
