Class SmartObjectResource

SmartObjectResource class

Καθορίζει την κλάση SmartObjectResource που περιέχει πληροφορίες σχετικά με ένα επίπεδο έξυπνου αντικειμένου σε ένα αρχείο PSD. Is είναι η βασική κλάση για πόρους Sold και Sole που χρησιμοποιείται για την υποστήριξη επιπέδων έξυπνων αντικειμένων στις εικόνες Adobe® Photoshop®.

public abstract class SmartObjectResource : PlacedResource, ISmartObjectLayerResource

Ιδιότητες

ΟνομαΠεριγραφή
override AntiAliasPolicy { get; set; }Λαμβάνει ή ορίζει την πολιτική κατά του ψευδωνύμου των δεδομένων επιπέδου έξυπνου αντικειμένου στην εικόνα PSD.
Bottom { get; set; }Λαμβάνει ή ορίζει την κάτω θέση του τοποθετημένου στρώματος στην εικόνα PSD.
Bounds { get; set; }Λαμβάνει ή ορίζει τα όρια του τοποθετημένου επιπέδου στο αρχείο PSD.
Comp { get; set; }Λαμβάνει ή ορίζει την τιμή comp των δεδομένων επιπέδου έξυπνου αντικειμένου στο αρχείο PSD. Σύνθεση επιπέδων σε Έξυπνα Αντικείμενα
CompId { get; set; }Λαμβάνει ή ορίζει το αναγνωριστικό του τρέχοντος επιλεγμένου comp για το θυγατρικό έγγραφο, το οποίο θα είναι -1 εάν δεν επιλεγεί κανένα. Τα Comps είναι συνθέσεις μιας διάταξης σελίδας που μπορούν να δημιουργήσουν οι σχεδιαστές. Χρησιμοποιώντας σύνθετα επίπεδα, μπορείτε να δημιουργήσετε, να διαχειριστείτε και να προβάλετε πολλαπλές εκδόσεις μιας διάταξης σε ένα μόνο αρχείο Adobe® Photoshop®. Ένα επίπεδο comp είναι ένα στιγμιότυπο μιας κατάστασης του πίνακα Layers. Οι comps επιπέδων αποθηκεύουν τρεις τύπους επιλογών επιπέδου, αλλά αυτή η ιδιότητα λαμβάνει το αναγνωριστικό επιλογής Layer Comp για το επίπεδο έξυπνου αντικειμένου στο αρχείο PSD. Σύνθεση επιπέδων σε Έξυπνα Αντικείμενα
Crop { get; set; }Λαμβάνει ή ορίζει την περικοπή των δεδομένων επιπέδου έξυπνου αντικειμένου στην εικόνα PSD.
DurationDenominator { get; set; }Λαμβάνει ή ορίζει τον παρονομαστή της διάρκειας.
DurationNumerator { get; set; }Λαμβάνει ή ορίζει τον αριθμητή διάρκειας.
FrameCount { get; set; }Λαμβάνει ή ορίζει τον αριθμό καρέ των δεδομένων επιπέδου έξυπνου αντικειμένου στο αρχείο PSD.
FrameStepDenominator { get; set; }Λαμβάνει ή ορίζει τον παρονομαστή του βήματος του πλαισίου.
FrameStepNumerator { get; set; }Λαμβάνει ή ορίζει τον αριθμητή βημάτων πλαισίου.
Height { get; set; }Παίρνει ή ρυθμίζει το ύψος.
HorizontalMeshPoints { get; set; }Λαμβάνει ή ορίζει τα οριζόντια σημεία πλέγματος του τοποθετημένου στρώματος στο αρχείο PSD.
HorizontalMeshPointUnit { get; set; }Λαμβάνει ή ορίζει τη μονάδα μέτρησης των οριζόντιων σημείων πλέγματος.
IsCustom { get; set; }Λαμβάνει ή ορίζει μια τιμή που υποδεικνύει εάν αυτό το στιλ παραμόρφωσης της παρουσίας είναι προσαρμοσμένο. Εάν είναι αληθές, περιέχει σημεία πλέγματος. Εάν οριστεί σε false, διαγράφει σημεία πλέγματος.
override Items { get; set; }Λαμβάνει ή ορίζει τα στοιχεία περιγραφής των δεδομένων επιπέδου έξυπνου αντικειμένου στο αρχείο PSD.
abstract Key { get; }Λαμβάνει το κλειδί πόρων επιπέδου.
Left { get; set; }Λαμβάνει ή ορίζει την αριστερή θέση του τοποθετημένου επιπέδου στο αρχείο PSD.
override Length { get; }Λαμβάνει το μήκος πόρων έξυπνου αντικειμένου σε byte.
NonAffineTransformMatrix { get; set; }Λαμβάνει ή ορίζει τον μη συγγενικό πίνακα μετασχηματισμού των δεδομένων επιπέδου έξυπνου αντικειμένου στο αρχείο PSD.
OriginalCompId { get; }Λαμβάνει το αρχικό αναγνωριστικό του τρέχοντος επιλεγμένου Comp για το θυγατρικό έγγραφο, το οποίο θα είναι -1 εάν δεν επιλεγεί κανένα. Αυτή η ιδιότητα λαμβάνει το αρχικό αναγνωριστικό επιλογής επιπέδου Comp για το επίπεδο έξυπνου αντικειμένου στο αρχείο PSD. Σύνθεση επιπέδων σε Έξυπνα Αντικείμενα
override PageNumber { get; set; }Λαμβάνει ή ορίζει τον αριθμό σελίδας των δεδομένων επιπέδου έξυπνου αντικειμένου στο αρχείο PSD.
Perspective { get; set; }Λαμβάνει ή ορίζει την προοπτική τιμή του τοποθετημένου επιπέδου στο αρχείο PSD.
PerspectiveOther { get; set; }Λαμβάνει ή ορίζει την άλλη τιμή προοπτικής του τοποθετημένου επιπέδου στο αρχείο PSD.
PlacedId { get; set; }Λαμβάνει ή ορίζει το μοναδικό αναγνωριστικό αυτού του επιπέδου δεδομένων έξυπνου αντικειμένου στην εικόνα PSD.
override PlacedLayerType { get; set; }Λαμβάνει ή ορίζει τον τύπο των δεδομένων επιπέδου έξυπνου αντικειμένου στο αρχείο PSD.
override PsdVersion { get; }Λαμβάνει την ελάχιστη έκδοση psd που απαιτείται για τον πόρο έξυπνου αντικειμένου. Το 0 δεν υποδηλώνει περιορισμούς.
Resolution { get; set; }Λαμβάνει ή ορίζει την ανάλυση των δεδομένων επιπέδου έξυπνου αντικειμένου στο αρχείο PSD.
ResolutionUnit { get; set; }Λαμβάνει ή ορίζει τη μονάδα μέτρησης ανάλυσης των δεδομένων επιπέδου έξυπνου αντικειμένου στο αρχείο PSD.
Right { get; set; }Λαμβάνει ή ορίζει τη σωστή θέση του τοποθετημένου επιπέδου στο αρχείο PSD.
override Signature { get; }Αποκτά την υπογραφή πόρων έξυπνου αντικειμένου.
Top { get; set; }Λαμβάνει ή ορίζει την επάνω θέση του τοποθετημένου στρώματος στην εικόνα PSD.
override TotalPages { get; set; }Λαμβάνει ή ορίζει τον συνολικό αριθμό σελίδων των δεδομένων επιπέδου έξυπνου αντικειμένου στο αρχείο PSD.
override TransformMatrix { get; set; }Λαμβάνει ή ορίζει τη μήτρα μετασχηματισμού των δεδομένων επιπέδου έξυπνου αντικειμένου στο αρχείο PSD.
override UniqueId { get; set; }Λαμβάνει ή ορίζει το καθολικό μοναδικό αναγνωριστικό των δεδομένων του επιπέδου έξυπνου αντικειμένουSmartObjectResource στην εικόνα PSD.
UOrder { get; set; }Λαμβάνει ή ορίζει την τιμή σειράς U του τοποθετημένου επιπέδου στο αρχείο PSD.
Value { get; set; }Λαμβάνει ή ορίζει την τιμή στημόνι του τοποθετημένου στρώματος στην εικόνα PSD.
Version { get; }Λαμβάνει την έκδοση του τοποθετημένου επιπέδου στο αρχείο PSD, συνήθως 3.
VerticalMeshPoints { get; set; }Λαμβάνει ή ορίζει τα οριζόντια σημεία πλέγματος του τοποθετημένου στρώματος στο αρχείο PSD.
VerticalMeshPointUnit { get; set; }Λαμβάνει ή ορίζει τη μονάδα μέτρησης των κατακόρυφων σημείων πλέγματος.
VOrder { get; set; }Λαμβάνει ή ορίζει την τιμή τάξης V του τοποθετημένου επιπέδου στο αρχείο PSD.
Width { get; set; }Λαμβάνει ή ορίζει το πλάτος.

Μέθοδοι

ΟνομαΠεριγραφή
override Save(StreamContainer, int)Αποθηκεύει τον πόρο έξυπνου αντικειμένου στο καθορισμένο κοντέινερ ροής.
override ToString()Επιστρέφει αString που αντιπροσωπεύει αυτήν την περίπτωση.

Παραδείγματα

Ο παρακάτω κώδικας δείχνει την υποστήριξη των πόρων SoLEResource, SmartObjectResource και PlacedResource.

[C#]

void AssertIsTrue(bool condition)
{
    if (!condition)
    {
        throw new FormatException(string.Format("Expected true"));
    }
}

void AssertAreEqual(object actual, object expected)
{
    var areEqual = object.Equals(actual, expected);
    if (!areEqual && actual is Array && expected is Array)
    {
        var actualArray = (Array)actual;
        var expectedArray = (Array)actual;
        if (actualArray.Length == expectedArray.Length)
        {
            for (int i = 0; i < actualArray.Length; i++)
            {
                if (!object.Equals(actualArray.GetValue(i), expectedArray.GetValue(i)))
                {
                    break;
                }
            }

            areEqual = true;
        }
    }

    if (!areEqual)
    {
        throw new FormatException(
            string.Format("Actual value {0} are not equal to expected {1}.", actual, expected));
    }
}

void CheckSmartObjectResourceValues(object[] expectedValue, SmartObjectResource resource)
{
    AssertAreEqual(expectedValue[0], resource.IsCustom);
    AssertAreEqual(expectedValue[2], resource.PageNumber);
    AssertAreEqual(expectedValue[3], resource.TotalPages);
    AssertAreEqual(expectedValue[4], resource.AntiAliasPolicy);
    AssertAreEqual(expectedValue[5], resource.PlacedLayerType);
    AssertAreEqual(8, resource.TransformMatrix.Length);
    AssertAreEqual((double[])expectedValue[6], resource.TransformMatrix);
    AssertAreEqual(expectedValue[7], resource.Value);
    AssertAreEqual(expectedValue[8], resource.Perspective);
    AssertAreEqual(expectedValue[9], resource.PerspectiveOther);
    AssertAreEqual(expectedValue[10], resource.Top);
    AssertAreEqual(expectedValue[11], resource.Left);
    AssertAreEqual(expectedValue[12], resource.Bottom);
    AssertAreEqual(expectedValue[13], resource.Right);
    AssertAreEqual(expectedValue[14], resource.UOrder);
    AssertAreEqual(expectedValue[15], resource.VOrder);

    AssertAreEqual(expectedValue[16], resource.Crop);
    AssertAreEqual(expectedValue[17], resource.FrameStepNumerator);
    AssertAreEqual(expectedValue[18], resource.FrameStepDenominator);
    AssertAreEqual(expectedValue[19], resource.DurationNumerator);
    AssertAreEqual(expectedValue[20], resource.DurationDenominator);
    AssertAreEqual(expectedValue[21], resource.FrameCount);
    AssertAreEqual(expectedValue[22], resource.Width);
    AssertAreEqual(expectedValue[23], resource.Height);
    AssertAreEqual(expectedValue[24], resource.Resolution);
    AssertAreEqual(expectedValue[25], resource.ResolutionUnit);
    AssertAreEqual(expectedValue[26], resource.Comp);
    AssertAreEqual(expectedValue[27], resource.CompId);
    AssertAreEqual(expectedValue[28], resource.OriginalCompId);
    AssertAreEqual(expectedValue[29], resource.PlacedId.ToString());
    AssertAreEqual(expectedValue[30], resource.NonAffineTransformMatrix);
    if (resource.IsCustom)
    {
        AssertAreEqual(expectedValue[31], resource.HorizontalMeshPointUnit);
        AssertAreEqual((double[])expectedValue[32], resource.HorizontalMeshPoints);
        AssertAreEqual(expectedValue[33], resource.VerticalMeshPointUnit);
        AssertAreEqual((double[])expectedValue[34], resource.VerticalMeshPoints);
    }
}

void SetNewSmartValues(SmartObjectResource resource, object[] newValues)
{
    // Αυτές οι τιμές δεν αλλάζουμε στον πόρο
    newValues[0] = resource.IsCustom;
    newValues[1] = resource.UniqueId.ToString();
    newValues[5] = resource.PlacedLayerType;
    newValues[14] = resource.UOrder;
    newValues[15] = resource.VOrder;
    newValues[28] = resource.OriginalCompId;

    // Αυτές οι τιμές πρέπει να αλλάξουν και στο PlLdResource (με το καθορισμένο UniqueId)
    // και μερικά από αυτά πρέπει να είναι σε συμφωνία με το υπογραμμιζόμενο έξυπνο αντικείμενο στο LinkDataSource
    resource.PageNumber = (int)newValues[2]; // 2;
    resource.TotalPages = (int)newValues[3]; // 3;
    resource.AntiAliasPolicy = (int)newValues[4]; // 0;
    resource.TransformMatrix = (double[])newValues[6];
    resource.Value = (double)newValues[7]; // 1.23456789;
    resource.Perspective = (double)newValues[8]; // 0,123456789;
    resource.PerspectiveOther = (double)newValues[9]; // 0,987654321;
    resource.Top = (double)newValues[10]; // -126;
    resource.Left = (double)newValues[11]; // -215;
    resource.Bottom = (double)newValues[12]; // 248;
    resource.Right = (double)newValues[13]; // 145;
    resource.Crop = (int)newValues[16]; // 5;
    resource.FrameStepNumerator = (int)newValues[17]; // 1;
    resource.FrameStepDenominator = (int)newValues[18]; // 601;
    resource.DurationNumerator = (int)newValues[19]; // 2;
    resource.DurationDenominator = (int)newValues[20]; // 602;
    resource.FrameCount = (int)newValues[21]; // 11;
    resource.Width = (double)newValues[22]; // 541;
    resource.Height = (double)newValues[23]; // 249;
    resource.Resolution = (double)newValues[24]; // 144;
    resource.ResolutionUnit = (UnitTypes)newValues[25];
    resource.Comp = (int)newValues[26]; // 21;
    resource.CompId = (int)newValues[27]; // 22;
    resource.NonAffineTransformMatrix = (double[])newValues[30];

    // Αυτό το μοναδικό αναγνωριστικό θα πρέπει να αλλάξει σε αναφορές εάν υπάρχουν
    resource.PlacedId = new Guid((string)newValues[29]);  // "12345678-9abc-def0-9876-54321fecba98");
    if (resource.IsCustom)
    {
        resource.HorizontalMeshPointUnit = (UnitTypes)newValues[31];
        resource.HorizontalMeshPoints = (double[])newValues[32];
        resource.VerticalMeshPointUnit = (UnitTypes)newValues[33];
        resource.VerticalMeshPoints = (double[])newValues[34];
    }

    // Να είστε προσεκτικοί με ορισμένες παραμέτρους: η αποθηκευμένη εικόνα ενδέχεται να μην είναι αναγνώσιμη από το Adobe® Photoshop®
    ////resource.UOrder = 6;
    ////resource.VOrder = 9;

    // Μην το αλλάξετε αυτό, διαφορετικά δεν θα μπορείτε να χρησιμοποιήσετε τον ελεύθερο μετασχηματισμό
    // ή αλλάξτε το έξυπνο αντικείμενο υπογράμμισης σε διανυσματικό τύπο
    ////resource.PlacedLayerType = PlacedLayerType.Vector;

    // Θα πρέπει να υπάρχει έγκυρος PlLdResource με αυτό το μοναδικό αναγνωριστικό
    ////resource.UniqueId = νέος οδηγός("98765432-10fe-cba0-1234-56789abcdef0");
}

object[] newSmartValues = new object[]
{
    true,
    null,
    2,
    3,
    0,
    PlacedLayerType.ImageStack,
    new double[8]
    {
        12.937922786050663,
        19.419959734187131,
        2.85445817782261,
        1.0540625423957124,
        7.20861031651307,
        14.634102808208553,
        17.292074924741144,
        4
    },
    1.23456789,
    0.123456789,
    0.987654321,
    -126d,
    -215d,
    248d,
    145d,
    4,
    4,
    5,
    1,
    601,
    2,
    602,
    11,
    541d,
    249d,
    144d,
    UnitTypes.Percent,
    21,
    22,
    23,
    "12345678-9abc-def0-9876-54321fecba98",
    new double[8]
    {
        129.937922786050663,
        195.419959734187131,
        26.85445817782261,
        12.0540625423957124,
        72.20861031651307,
        147.634102808208553,
        175.292074924741144,
        42
    },
    UnitTypes.Points,
    new double[16]
    {
        0.01d, 103.33333333333433d, 206.66686666666666d, 310.02d,
        0.20d, 103.33333333333533d, 206.69666666666666d, 310.03d,
        30.06d, 103.33333333336333d, 206.66660666666666d, 310.04d,
        04.05d, 103.33333333373333d, 206.66666166666666d, 310.05d
    },
    UnitTypes.Distance,
    new double[16]
    {
        0.06d, 0.07d, 0.08d, 0.09d,
        49.066666666666664d, 49.266666666666664d, 49.566666666666664d, 49.766666666666664d,
        99.133333333333329d, 99.433333333333329d, 99.633333333333329d, 99.833333333333329d,
        140, 141, 142, 143,
    },
};

object[] expectedValues = new object[]
{
    new object[]
    {
        false,
        "5867318f-3174-9f41-abca-22f56a75247e",
        1,
        1,
        0x10,
        PlacedLayerType.Raster,
        new double[8]
        {
            0, 0, 2, 0, 2, 2, 0, 2
        },
        0d,
        0d,
        0d,
        0d,
        0d,
        2d,
        2d,
        4,
        4,
        1,
        0,
        600,
        0,
        600,
        1,
        2d,
        2d,
        72d,
        UnitTypes.Density,
        -1,
        -1,
        -1,
        "64b3997c-06e0-be40-a349-41acf397c897",
        new double[8]
        {
            0, 0, 2, 0, 2, 2, 0, 2
        },
    }
};

var sourceFilePath = "rgb8_2x2_linked.psd";
var outputPath = "rgb8_2x2_linked_output.psd";
using (PsdImage image = (PsdImage)Image.Load(sourceFilePath))
{
    SoLeResource soleResource = null;
    int index = 0;
    foreach (Layer imageLayer in image.Layers)
    {
        foreach (var imageResource in imageLayer.Resources)
        {
            var resource = imageResource as SoLeResource;
            if (resource != null)
            {
                soleResource = resource;
                var expectedValue = (object[])expectedValues[index++];
                AssertAreEqual(expectedValue[1], resource.UniqueId.ToString());
                CheckSmartObjectResourceValues(expectedValue, resource);
                SetNewSmartValues(resource, newSmartValues);

                break;
            }
        }
    }

    AssertIsTrue(soleResource != null);
    image.Save(outputPath, new PsdOptions(image));
    using (PsdImage savedImage = (PsdImage)Image.Load(outputPath))
    {
        foreach (Layer imageLayer in savedImage.Layers)
        {
            foreach (var imageResource in imageLayer.Resources)
            {
                var resource = imageResource as SoLeResource;
                if (resource != null)
                {
                    CheckSmartObjectResourceValues(newSmartValues, resource);

                    break;
                }
            }
        }
    }
}

Δείτε επίσης