Class Lnk3Resource

Lnk3Resource class

채널 이미지당 32비트의 PSD 형식으로 포함된 파일에 대한 정보를 포함하는 클래스를 정의합니다. 링크 리소스는 여러 개를 포함할 수 있습니다.LiFdDataSource indexer. 에서 액세스할 수 있는 인스턴스

public class Lnk3Resource : Lnk2Resource

생성자

이름설명
Lnk3Resource()의 새 인스턴스를 초기화합니다.Lnk3Resource 클래스.

속성

이름설명
DataSourceCount { get; }인덱서에서 액세스할 수 있는 링크 데이터 소스의 수를 가져옵니다.
IsEmpty { get; }이 링크 리소스 인스턴스가 비어 있는지 여부를 나타내는 값을 가져옵니다.
Item { get; }가져오기LiFdDataSource 지정된 index. 에서 (2 indexers)
override Key { get; }레이어 리소스 키를 가져옵니다.
override Length { get; }PSD 전역 링크 리소스 길이를 바이트 단위로 가져옵니다.
override PsdVersion { get; }PSD 형식 버전을 가져옵니다.
override Signature { get; }PSD 전역 링크 리소스 서명을 가져옵니다.

행동 양식

이름설명
override Save(StreamContainer, int)리소스 블록 데이터를 저장합니다.
override ToString()반환String 이 instance. 를 나타냅니다.

필드

이름설명
const TypeToolKey유형 도구 정보 키입니다.

이 예제에서는 Lnk2Resource 및 Lnk3Resource의 속성을 가져오고 설정하는 방법을 보여줍니다.

[C#]

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

object[] Lnk2ResourceSupportCases = new object[]
{
new object[]
{
    "00af34a0-a90b-674d-a821-73ee508c5479",
    "rgb8_2x2.png",
    "png",
    string.Empty,
    0x53,
    0d,
    string.Empty,
    7,
    true,
    0x124L,
    0x74cL
}
};

object[] LayeredLnk2ResourceSupportCases = new object[]
{
new object[]
{
    "69ac1c0d-1b74-fd49-9c7e-34a7aa6299ef",
    "huset.jpg",
    "JPEG",
    string.Empty,
    0x9d46,
    0d,
    "xmp.did:0F94B342065B11E395B1FD506DED6B07",
    7,
    true,
    0x9E60L,
    0xc60cL
},
new object[]
{
    "5a7d1965-0eae-b24e-a82f-98c7646424c2",
    "panama-papers.jpg",
    "JPEG",
    string.Empty,
    0xF56B,
    0d,
    "xmp.did:BDE940CBF51B11E59D759CDA690663E3",
    7,
    true,
    0xF694L,
    0x10dd4L
},
};

object[] LayeredLnk3ResourceSupportCases = new object[]
{
new object[]
{
    "2fd7ba52-0221-de4c-bdc4-1210580c6caa",
    "panama-papers.jpg",
    "JPEG",
    string.Empty,
    0xF56B,
    0d,
    "xmp.did:BDE940CBF51B11E59D759CDA690663E3",
    7,
    true,
    0xF694l,
    0x10dd4L
},
new object[]
{
    "372d52eb-5825-8743-81a7-b6f32d51323d",
    "huset.jpg",
    "JPEG",
    string.Empty,
    0x9d46,
    0d,
    "xmp.did:0F94B342065B11E395B1FD506DED6B07",
    7,
    true,
    0x9E60L,
    0xc60cL
},
};

var basePath = "" + Path.DirectorySeparatorChar;
string Output = "output" + Path.DirectorySeparatorChar;

// PSD 파일에 있는 스마트 오브젝트의 데이터를 파일로 저장합니다.
void SaveSmartObjectData(string prefix, string fileName, byte[] data)
{
    var filePath = basePath + prefix + "_" + fileName;

    using (var container = FileStreamContainer.CreateFileStream(filePath, false))
    {
        container.Write(data);
    }
}

// PSD 파일의 스마트 오브젝트에 대한 새 데이터를 로드합니다.
byte[] LoadNewData(string fileName)
{
    using (var container = FileStreamContainer.OpenFileStream(basePath + fileName))
    {
        return container.ToBytes();
    }
}

// PSD Lnk2 / Lnk3 리소스의 속성과 PSD 이미지의 liFD 데이터 소스를 가져오고 설정합니다.
void ExampleOfLnk2ResourceSupport(
    string fileName,
    int dataSourceCount,
    int length,
    int newLength,
    object[] dataSourceExpectedValues)
{
    using (PsdImage image = (PsdImage)Image.Load(basePath + fileName))
    {
        Lnk2Resource lnk2Resource = null;
        foreach (var resource in image.GlobalLayerResources)
        {
            lnk2Resource = resource as Lnk2Resource;
            if (lnk2Resource != null)
            {
                AssertAreEqual(lnk2Resource.DataSourceCount, dataSourceCount);
                AssertAreEqual(lnk2Resource.Length, length);
                AssertAreEqual(lnk2Resource.IsEmpty, false);

                for (int i = 0; i < lnk2Resource.DataSourceCount; i++)
                {
                    LiFdDataSource lifdSource = lnk2Resource[i];
                    object[] expected = (object[])dataSourceExpectedValues[i];
                    AssertAreEqual(LinkDataSourceType.liFD, lifdSource.Type);
                    AssertAreEqual(new Guid((string)expected[0]), lifdSource.UniqueId);
                    AssertAreEqual(expected[1], lifdSource.OriginalFileName);
                    AssertAreEqual(expected[2], lifdSource.FileType.TrimEnd(' '));
                    AssertAreEqual(expected[3], lifdSource.FileCreator.TrimEnd(' '));
                    AssertAreEqual(expected[4], lifdSource.Data.Length);
                    AssertAreEqual(expected[5], lifdSource.AssetModTime);
                    AssertAreEqual(expected[6], lifdSource.ChildDocId);
                    AssertAreEqual(expected[7], lifdSource.Version);
                    AssertAreEqual((bool)expected[8], lifdSource.HasFileOpenDescriptor);
                    AssertAreEqual(expected[9], lifdSource.Length);

                    if (lifdSource.HasFileOpenDescriptor)
                    {
                        AssertAreEqual(-1, lifdSource.CompId);
                        AssertAreEqual(-1, lifdSource.OriginalCompId);
                        lifdSource.CompId = int.MaxValue;
                    }

                    SaveSmartObjectData(
                        Output + fileName,
                        lifdSource.OriginalFileName,
                        lifdSource.Data);
                    lifdSource.Data = LoadNewData("new_" + lifdSource.OriginalFileName);
                    AssertAreEqual(expected[10], lifdSource.Length);

                    lifdSource.ChildDocId = Guid.NewGuid().ToString();
                    lifdSource.AssetModTime = double.MaxValue;
                    lifdSource.FileType = "test";
                    lifdSource.FileCreator = "me";
                }

                AssertAreEqual(newLength, lnk2Resource.Length);
                break;
            }
        }

        AssertAreEqual(true, lnk2Resource != null);
        if (image.BitsPerChannel < 32) // 채널당 32비트 저장은 아직 지원되지 않습니다.
        {
            image.Save(basePath + Output + fileName, new PsdOptions(image));
        }
    }
}

// 이 예제는 채널당 8비트에 대한 PSD Lnk2 리소스 및 해당 liFD 데이터 소스의 속성을 가져오고 설정하는 방법을 보여줍니다.
ExampleOfLnk2ResourceSupport("rgb8_2x2_embedded_png.psd", 1, 0x12C, 0x0000079c, Lnk2ResourceSupportCases);

// 이 예제는 채널당 32비트에 대한 PSD Lnk3 리소스 및 해당 liFD 데이터 소스의 속성을 가져오고 설정하는 방법을 보여줍니다.
ExampleOfLnk2ResourceSupport("Layered PSD file smart objects.psd", 2, 0x19504, 0x0001d3e0, LayeredLnk3ResourceSupportCases);

// 이 예제는 채널당 16비트에 대한 PSD Lnk2 리소스 및 해당 liFD 데이터 소스의 속성을 가져오고 설정하는 방법을 보여줍니다.
ExampleOfLnk2ResourceSupport("LayeredSmartObjects16bit.psd", 2, 0x19504, 0x0001d3e0, LayeredLnk2ResourceSupportCases);

또한보십시오