Class SoLeResource

SoLeResource class

يحدد فئة SoLeResource التي تحتوي على معلومات حول طبقة كائن ذكية في ملف PSD. يستخدم لدعم طبقات الكائنات الذكية مع روابط ملفات خارجية في صور Adobe® Photoshop® .

public class SoLeResource : SmartObjectResource

المنشئون

اسموصف
SoLeResource()يقوم بتهيئة مثيل جديد لملفSoLeResource فئة .
SoLeResource(Guid, bool, bool)يقوم بتهيئة مثيل جديد لملفSoLeResource فئة .

الخصائص

اسموصف
override AntiAliasPolicy { get; set; }الحصول على أو تعيين سياسة مكافحة الاسم المستعار لبيانات طبقة الكائن الذكي في صورة PSD.
Bottom { get; set; }الحصول على أو تحديد الموقع السفلي للطبقة الموضوعة في صورة PSD.
Bounds { get; set; }الحصول على أو تعيين حدود الطبقة الموضوعة في ملف PSD.
Comp { get; set; }الحصول على أو تعيين قيمة comp لبيانات طبقة الكائن الذكي في ملف PSD.تراكبات الطبقة في الكائنات الذكية
CompId { get; set; }الحصول على أو تعيين معرف التركيب المحدد حاليًا للمستند الفرعي ، والذي سيكون -1 إذا لم يتم تحديد أي منها . التركيبات هي تركيبات لتخطيط الصفحة والتي يمكن للمصممين إنشاؤها. باستخدام تركيبات الطبقة ، يمكنك إنشاء إصدارات متعددة من التخطيط وإدارتها وعرضها في ملف Adobe® Photoshop® واحد. تراكب الطبقة هو لقطة لحالة لوحة Layers. تقوم تركيبات الطبقة بحفظ ثلاثة أنواع من خيارات الطبقة ولكن تحصل هذه الخاصية على معرف تحديد تراكب الطبقة لطبقة الكائن الذكي في ملف 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; }الحصول على قيمة أو تعيينها للإشارة إلى ما إذا كان نمط التواء في المثيل مخصصًا أم لا. إذا تم الضبط على خطأ ، فإنه يمحو نقاط الشبكة.
override Items { get; set; }الحصول على أو تعيين عناصر واصف بيانات طبقة الكائن الذكي في ملف PSD.
override Key { get; }يحصل على مفتاح مورد طبقة الكائن الذكي الوحيد.
Left { get; set; }الحصول على أو تحديد الموقع الأيسر للطبقة الموضوعة في ملف PSD.
override Length { get; }الحصول على طول مورد الكائن الذكي بالبايت.
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 الذي يمثل هذا المثال.

مجالات

اسموصف
const TypeToolKeyمفتاح معلومات أداة النوع: “SoLE” .

أمثلة

يوضح الكود التالي دعم موارد 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;
                }
            }
        }
    }
}

أنظر أيضا