Class SoLeResource

SoLeResource class

PSD 파일의 스마트 개체 레이어에 대한 정보를 포함하는 SoLeResource 클래스를 정의합니다. 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; }PSD 파일에서 스마트 개체 레이어 데이터의 comp 값을 가져오거나 설정합니다. 스마트 오브젝트의 레이어 구성 요소
CompId { get; set; }자식 문서에 대해 현재 선택된 구성 요소의 ID를 가져오거나 설정합니다. 아무것도 선택하지 않으면 -1이 됩니다. 구성 요소는 디자이너가 만들 수 있는 페이지 레이아웃의 구성 요소입니다. 레이어 구성 요소를 사용하면 단일 Adobe® Photoshop® 파일에서 레이아웃의 여러 버전 을 만들고 관리하고 볼 수 있습니다. 레이어 구성 요소는 레이어 패널 상태의 스냅샷입니다. 레이어 구성 요소는 세 가지 유형의 레이어 옵션을 저장하지만 이 속성은 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; }이 인스턴스 뒤틀기 스타일이 사용자 지정인지 여부를 나타내는 값을 가져오거나 설정합니다. true인 경우 메쉬 포인트를 포함합니다. false로 설정하면 메쉬 점을 지웁니다.
override Items { get; set; }PSD 파일에서 스마트 개체 레이어 데이터의 설명자 항목을 가져오거나 설정합니다.
override Key { get; }유일한 스마트 개체 계층 리소스 키를 가져옵니다.
Left { get; set; }PSD 파일에서 배치된 레이어의 왼쪽 위치를 가져오거나 설정합니다.
override Length { get; }스마트 개체 리소스 길이를 바이트 단위로 가져옵니다.
NonAffineTransformMatrix { get; set; }PSD 파일에서 스마트 개체 레이어 데이터의 비아핀 변환 매트릭스를 가져오거나 설정합니다.
OriginalCompId { get; }하위 문서에 대해 현재 선택한 Comp의 원래 ID를 가져옵니다. 아무것도 선택하지 않은 경우 -1이 됩니다. 이 속성은 PSD 파일의 스마트 개체 레이어에 대한 원래 레이어 Comp 선택 식별자를 가져옵니다. 스마트 오브젝트의 레이어 구성 요소
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; }PSD 파일에 배치된 레이어의 U 순서 값을 가져오거나 설정합니다.
Value { get; set; }PSD 이미지에 배치된 레이어의 워프 값을 가져오거나 설정합니다.
Version { get; }PSD 파일에 배치된 레이어의 버전을 가져옵니다. 일반적으로 3.
VerticalMeshPoints { get; set; }PSD 파일에 배치된 레이어의 수평 메쉬 포인트를 가져오거나 설정합니다.
VerticalMeshPointUnit { get; set; }수직 메쉬 포인트의 측정 단위를 가져오거나 설정합니다.
VOrder { get; set; }PSD 파일에 배치된 레이어의 V 순서 값을 가져오거나 설정합니다.
Width { get; set; }너비를 가져오거나 설정합니다.

행동 양식

이름설명
override Save(StreamContainer, int)스마트 개체 리소스를 지정된 스트림 컨테이너에 저장합니다.
override ToString()반환String 이 instance. 를 나타냅니다.

필드

이름설명
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]; // 삼;
    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];

    // 이 고유 ID는 참조에서 변경되어야 합니다.
    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;

    // 이 고유 ID를 가진 유효한 PlLdResource가 있어야 합니다.
    ////resource.UniqueId = new Guid("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;
                }
            }
        }
    }
}

또한보십시오