המסנן 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 מאפיינים במבט כולל

מאפייןסוגמטרה
HorizontalScaledoubleקנה מידה של ההזזה האופקית, כפי שמופיע בתיבת הדו-שיח Displace של Photoshop
VerticalScaledoubleקנה מידה של ההזזה האנכית
DisplacementMethodDisplacementMethodTile חוזר על המפה; Stretch משנה את גודל המפה כדי להתאים לשכבה
UndefinedAreasUndefinedAreasWrapAround או RepeatEdgePixels לפיקסלים שהוזזו מחוץ לשכבה
IsDisplacementMapEmbeddedboolמציין האם המפה משובצת ב‑PSD
DisplaceMapData—נתוני מפת ההזזה המשובצת
DisplacementMapPathstringהנתיב של מפת ההזזה

כיצד להוסיף מסנן חכם 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);
}

הסבר

  1. טעינת קובץ ה‑PSD – Image.Load מחזיר Image גנרי, שמומר ל‑PsdImage כדי לגשת לתכונות ספציפיות של PSD כגון שכבות ומסננים חכמים.
  2. מציאת שכבת Smart Object – OfType<SmartObjectLayer>() בוחר את שכבת Smart Object הראשונה ומחזיר שגיאה עם הודעה ברורה אם אין כזו. זה בטוח יותר מאשר לגשת ישירות ל‑Layers, מכיוון שסדר השכבות משתנה בין קבצים.
  3. יצירת המסנן – הבונה DisplaceSmartFilter(string, bool) מקבלת את נתיב מפת ההזזה ודגל שמקובע האם המפה מוטמעת. העברת true עושה את קובץ ה‑PSD המפלט עצמאי.
  4. קביעת תצורת המסנן – HorizontalScale ו‑VerticalScale מגדירים את עוצמת ההזזה. DisplacementMethod.Tile משכפל את המפה על פני השכבה, בעוד Stretch משנה את גודלה כדי להתאים. UndefinedAreas.WrapAround ממלא פיקסלים שהוזזו מחוץ לקנבס בתוכן מהקצה הנגדי; RepeatEdgePixels מרחיב את צבעי הקצוות במקום זאת.
  5. עדכון האוסף – SmartFilters.Filters נחשף כמערך. העתקתו ל‑List<SmartFilter>, הוספת המסנן החדש, והקצאת ToArray() חזרה שומרת על כל המסננים החכמים שכבר היו על השכבה.
  6. שמירת השינויים – UpdateResourceValues() כותב את אוסף המסננים למשאבי ה‑PSD של השכבה. אם מדלגים על קריאה זו, המסנן החדש יאבד בעת השמירה.
  7. שמירה – 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}.");
    }
}

הסבר

  1. טעינת הקובץ מחדש – Image.Load פותח את קובץ ה‑PSD שנשמר בצעד הקודם.
  2. איתור שכבת Smart Object – החיפוש המבוסס על סוג זהה משמר את עקביות של שלבי הקריאה והכתיבה.
  3. מציאת המסנן לפי סוג – OfType<DisplaceSmartFilter>().LastOrDefault() מחזיר את מסנן ה‑Displace שהתווסף לאחרונה ולעולם לא גורם להמרה לא חוקית. זה אמין יותר מקריאת האלמנט האחרון במערך והמרתו באמצעות as, שמחזיר null בשקט אם מסנן שונה נמצא במיקום זה.
  4. קריאת מאפיינים – כל הגדרות המסנן זמינות כמאפיינים טיפוסיים, ולכן ניתן לתעד אותן, להשוות ביניהן או לייצא לדוח.
  5. אימות – הפונקציה AssertAreEqual משווה בין ערכים שנשמרו לערכים המקוריים ומפיקה שגיאה עם הודעה תיאורית במקרה של אי‑התאמה.

סיכום

עם המחלקה DisplaceSmartFilter ב‑Aspose.PSD for .NET, מפתחים ב‑C# יכולים להוסיף, להגדיר, לשמור ולקרוא חזרה את מסנני Displace החכמים של Photoshop באופן מלא בקוד. המסנן נשאר בלתי הרסני וניתן לעריכה ב‑Photoshop, מפת ההזזה יכולה לנוע בתוך קובץ ה‑PSD, וה‑API זהה תומך באימות סיבובי. זה מאפשר לבנות בקלות גנרטורים של מודלים, צינורות תבניות, וכלי ביקורת PSD על גבי .NET.

FAQs

  1. איזו גרסה של Aspose.PSD for .NET תומכת במסנן החכם Displace? קריאה וכתיבה של נתוני מסנן החכם Displace הוצגו ב‑Aspose.PSD for .NET 26.8. השתמשו בגרסה 26.8 או מאוחרת יותר כדי לגשת למחלקה DisplaceSmartFilter class.

  2. האם אני יכול להוסיף DisplaceSmartFilter לשכבת רסטר רגילה?
    נתוני הפילטר החכם מאוחסנים עם שכבות Smart Object, ולכן יש להוסיף את הפילטר לאוסף SmartFilters של SmartObjectLayer. אם התוכן שלך נמצא על שכבה רגילה, המר אותה ל‑Smart Object תחילה.

  3. איך לשבץ את מפת ההזזה ב‑PSD? העבר את נתיב מפת ההזזה ואת true לבונה DisplaceSmartFilter. לאחר השמירה, IsDisplacementMapEmbedded מחזיר true ו‑DisplaceMapData מחזיק את נתוני המפה המשובצים.

  4. אילו ערכים ניתן לקבל במאפיין UndefinedAreas? UndefinedAreas תומך ב-WrapAround, שממלא פיקסלים לא מוגדרים בתוכן מהקצה הנגדי של התמונה, וב-RepeatEdgePixels, שמרחיב את הצבעים של פיקסלי הקצה.

  5. מה ההבדל בין DisplacementMethod.Tile ל-DisplacementMethod.Stretch? Tile חוזר על מפת ההזזה על פני השכבה בגודלה המקורי, בעוד Stretch משנה את גודל המפה כדי להתאים לשכבה.

  6. האם עליי לקרוא ל‑UpdateResourceValues אחרי שינוי מסננים חכמים? כן. UpdateResourceValues כותב את אוסף המסננים ששונה לתוך המשאבים של שכבת ה‑Smart Object. ללא זאת, המסנן החדש אינו נשמר בעת השמירה.

קבל רישיון חינם וחקור עוד

הערך את Aspose.PSD for .NET ללא מגבלות על‑ידי בקשת רישיון זמני:

קבל רישיון זמני חינמי

משאבים נוספים לעבודה עם קבצי PSD ב-.NET:

קרא עוד