Class SmartObjectLayer

SmartObjectLayer class

定义包含嵌入 PSD 文件或外部文件中链接智能对象的 SmartObjectLayer 类。 使用智能对象,您可以: 执行非破坏性变换。您可以缩放、旋转、倾斜、扭曲、透视变换或扭曲 layer 而不会丢失原始图像数据或质量,因为变换不会影响原始数据。 使用矢量数据,例如 Illustrator 中的矢量图,否则将被光栅化。 执行无损过滤。您可以随时编辑应用于智能对象的滤镜。 编辑一个智能对象并自动更新其所有链接的实例。 应用链接或未链接到智能对象层的图层蒙版。 尝试各种低设计稍后用最终版本替换的分辨率占位符图像。 在 Adobe. Photoshop. 中,您可以将图像的内容嵌入到 PSD 文档中。 此处有更多信息:https://helpx.adobe.com/photoshop/using/create-smart-objects.html 具有嵌入式智能对象的层包含具有智能对象属性的放置 (PlLd) 和 SoLd 资源。 PlLd 资源可以单独用于早于 10 的 PSD 版本。 这些资源包含全局 Lnk2Resource 中 LiFdDataSource 的 UniqueId,具有嵌入式filename 等参数,包括原始格式的嵌入文件内容为字节数组.

public class SmartObjectLayer : Layer

特性

姓名描述
AutoAdjustPalette { get; set; }获取或设置一个值,指示是否自动调整调色板。
virtual BackgroundColor { get; set; }获取或设置背景颜色的值。
override BitsPerPixel { get; }获取每像素计数的图像位数。
BlendingOptions { get; }获取混合选项。
virtual BlendModeKey { get; set; }获取或设置混合模式键。
BlendModeSignature { get; }获取混合模式签名。
Bottom { get; set; }获取或设置底层位置。
Bounds { get; }获取图像边界。
BufferSizeHint { get; set; }获取或设置缓冲区大小提示,它是为所有内部缓冲区定义的最大允许大小。
ChannelInformation { get; set; }获取或设置频道信息。
ChannelsCount { get; }获取层的通道数。
Clipping { get; set; }获取或设置图层裁剪。 0 = 基础,1 = 非基础.
Container { get; }获取Image容器.
Contents { get; set; }获取或设置智能对象图层内容。 嵌入的智能对象内容为嵌入的原始图像文件:Data及其属性。 链接的智能对象内容是链接图像文件的原始内容(如果可用)及其属性:LiFeDataSource . 我们不支持从 Adobe. Photoshop. . 图形库加载时IsLibraryLink是真的。 对于常规链接文件,首先,我们使用RelativePath在源图像路径中查找文件 relatively SourceImagePath , 如果不可用我们看看FullPath, 如果不是,那么我们在图像所在的同一目录中查找链接文件:SourceImagePath .
ContentsBounds { get; set; }获取或设置智能对象内容的边界。
ContentsSource { get; set; }获取或设置智能对象内容的来源。
ContentType { get; }获取智能对象图层内容的类型。 嵌入的智能对象内容为嵌入的原始图像文件:Data . 链接的智能对象内容是链接图像文件的原始内容(如果可用):LiFeDataSource . 我们不支持从 Adobe. Photoshop. . 图形库加载时IsLibraryLink是真的。 对于常规链接文件,首先,我们使用RelativePath在源图像路径中查找文件 relatively SourceImagePath , 如果不可用我们看看FullPath, 如果不是,那么我们在图像所在的同一目录中查找链接文件:SourceImagePath .
DataStreamContainer { get; }获取对象的数据流。
DisplayName { get; set; }获取或设置图层的显示名称。
Disposed { get; }获取一个值,该值表示该实例是否被释放。
ExtraLength { get; }获取以字节为单位的层额外信息长度。
virtual FileFormat { get; }获取文件格式 的值
Filler { get; set; }获取或设置图层填充。
FillOpacity { get; set; }获取或设置填充不透明度。
Flags { get; set; }获取或设置图层标志。 位 0 = 透明保护; 位 1 = 可见; 位 2 = 过时; 位 3 = 1 对于 Photoshop 5.0 及更高版本,指示位 4 是否有有用的信息; 位 4 =与文档外观无关的像素数据.
override HasAlpha { get; }获取一个值,指示此实例是否具有 alpha.
virtual HasBackgroundColor { get; set; }获取或设置图像是否有背景色的值。
virtual HasTransparentColor { get; set; }获取图像是否有透明色的值。
override Height { get; }获取图像高度。
virtual HorizontalResolution { get; set; }获取或设置水平分辨率,以每英寸像素为单位,RasterImage .
virtual ImageOpacity { get; }获取此图像的不透明度。
InterruptMonitor { get; set; }获取或设置中断监视器。
override IsCached { get; }获取当前是否缓存图像数据的值。
IsRawDataAvailable { get; }获取原始数据加载是否可用的值。
IsVisible { get; set; }获取或设置图层是否可见的值
virtual IsVisibleInGroup { get; }获取一个值,指示此实例是否在组中可见(如果图层不在组中,则表示根组)。
LayerBlendingRangesData { get; set; }获取或设置图层混合范围数据。
LayerCreationDateTime { get; set; }获取或设置图层创建日期时间。
LayerLock { get; set; }获取或设置layer lock. 注意如果设置了flag LayerFlags.TransparencyProtected 将被layer lock flag覆盖。 返回LayerFlags.TransparencyProtected flag需要申请layer option layer.Flags |= LayerFlags.TransparencyProtected
LayerMaskData { get; set; }获取或设置图层蒙版数据。
LayerOptions { get; }获取图层选项。
Left { get; set; }获取或设置左图层位置。
Length { get; }获取以字节为单位的总层长度。
Name { get; set; }获取或设置图层名称。
Opacity { get; set; }获取或设置图层不透明度。 0 = 透明,255 = 不透明。
Palette { get; set; }获取或设置调色板。直接表示像素时不使用调色板。
virtual PremultiplyComponents { get; set; }获取或设置一个值,指示图像分量是否必须预乘。
RawCustomColorConverter { get; set; }获取或设置自定义颜色转换器
virtual RawDataFormat { get; }获取原始数据格式。
RawDataSettings { get; }获取当前原始数据设置。请注意,使用这些设置时,数据加载时无需转换。
RawFallbackIndex { get; set; }获取或设置调色板索引超出范围时使用的回退索引
RawIndexedColorConverter { get; set; }获取或设置索引颜色转换器
virtual RawLineSize { get; }获取以字节为单位的原始行大小。
Resources { get; set; }获取或设置图层资源。
Right { get; set; }获取或设置正确的图层位置。
SheetColorHighlight { get; set; }获取或设置图层列表中的装饰板颜色高亮
Size { get; }获取图像大小。
SmartFilters { get; }获取智能过滤器。
SmartObjectProvider { get; }获取智能对象提供者。
Top { get; set; }获取或设置顶层位置。
virtual TransparentColor { get; set; }获取图像透明色。
virtual UpdateXmpData { get; set; }获取或设置一个值,指示是否更新 XMP 元数据。
virtual UseRawData { get; set; }获取或设置当原始数据加载可用时是否使用原始数据加载的值。
virtual VerticalResolution { get; set; }获取或设置垂直分辨率,以每英寸像素为单位,RasterImage .
override Width { get; }获取图像宽度。
virtual XmpData { get; set; }获取或设置 XMP 元数据。

方法

姓名描述
AddLayerMask(LayerMaskData)将蒙版添加到当前层。
override AdjustBrightness(int)调整图像的亮度。
override AdjustContrast(float)图像对比
override AdjustGamma(float)图像的伽马校正。
override AdjustGamma(float, float, float)图像的伽马校正。
override BinarizeBradley(double)使用 Bradley 自适应阈值算法对图像进行二值化,使用积分图像阈值
override BinarizeBradley(double, int)使用 Bradley 自适应阈值算法对图像进行二值化,使用积分图像阈值
override BinarizeFixed(byte)具有预定义阈值的图像二值化
override BinarizeOtsu()使用 Otsu 阈值对图像进行二值化
override CacheData()缓存数据并确保不会从底层执行额外的数据加载DataStreamContainer .
CanSave(ImageOptionsBase)确定图像是否可以保存为传递的保存选项所代表的指定文件格式。
ConvertToLinked(string)将此嵌入式智能对象转换为链接的智能对象。
override Crop(Rectangle)裁剪图像。
virtual Crop(int, int, int, int)带位移的裁剪图像。
Dispose()处理当前实例。
Dither(DitheringMethod, int)对当前图像执行抖动。
override Dither(DitheringMethod, int, IColorPalette)对当前图像执行抖动。
DrawImage(Point, RasterImage)在图层上绘制图像。
DuplicateLayer()通过复制这个来创建一个新的智能对象层。 请注意,对于嵌入的智能对象,嵌入的图像是共享的。 如果要复制嵌入的图像,请使用NewSmartObjectViaCopy方法.
EmbedLinked()在该层中嵌入链接的智能对象。
ExportContents(string)将嵌入或链接的内容导出到文件。
virtual Filter(Rectangle, FilterOptionsBase)过滤指定矩形。
GetArgb32Pixel(int, int)获取图像 32 位 ARGB 像素。
GetDefaultArgb32Pixels(Rectangle)获取默认的 32 位 ARGB 像素数组。
virtual GetDefaultOptions(object[])获取默认选项。
GetDefaultPixels(Rectangle, IPartialArgb32PixelLoader)使用部分像素加载器获取默认像素数组。
GetDefaultRawData(Rectangle, RawDataSettings)获取默认原始数据数组。
GetDefaultRawData(Rectangle, IPartialRawDataLoader, RawDataSettings)使用部分像素加载器获取默认原始数据数组。
override GetHashCode()返回此实例的哈希码。
virtual GetModifyDate(bool)获取上次修改资源图像的日期和时间。
virtual GetOriginalOptions()获取基于原始文件设置的选项。 这有助于保持原始图像的位深度和其他参数不变。 例如,如果我们加载一个每像素 1 位的黑白 PNG 图像,然后使用 the 保存Save方法,将生成每像素 8 位的输出 PNG 图像。 要避免它并保存每像素 1 位的 PNG 图像,请使用此方法获取相应的保存选项并将它们 传递给Save方法作为第二个参数.
GetPixel(int, int)获取图像像素。
GetSkewAngle()获取倾斜角度。 该方法适用于扫描的文本文档,用于确定扫描时的倾斜角度。
override Grayscale()将图像转换为灰度表示
LoadArgb32Pixels(Rectangle)加载 32 位 ARGB 像素。
LoadArgb64Pixels(Rectangle)加载 64 位 ARGB 像素。
LoadCmyk32Pixels(Rectangle)以 CMYK 格式加载像素。
LoadContents(LoadOptions)获取智能对象层的嵌入或链接图像内容。
LoadPartialArgb32Pixels(Rectangle, IPartialArgb32PixelLoader)按包加载部分 32 位 ARGB 像素。
LoadPartialPixels(Rectangle, IPartialPixelLoader)按包加载部分像素。
LoadPixels(Rectangle)加载像素。
LoadRawData(Rectangle, RawDataSettings, IPartialRawDataLoader)加载原始数据。
LoadRawData(Rectangle, Rectangle, RawDataSettings, IPartialRawDataLoader)加载原始数据。
virtual MergeLayerTo(Layer)将图层合并到指定的图层
NewSmartObjectViaCopy()通过复制此图层创建一个新的智能对象层。 通过 Adobe Photoshop 的复制功能重现“图层 -> 智能对象 -> 新智能对象”。 请注意,它仅对嵌入的智能对象启用,因为嵌入的图像也被复制了。 如果你想分享嵌入的图像使用DuplicateLayer方法.
NormalizeAngle()归一化角度。 此方法适用于扫描的文本文档,以消除倾斜扫描。 此方法使用GetSkewAngleRotate方法.
virtual NormalizeAngle(bool, Color)归一化角度。 此方法适用于扫描的文本文档,以消除倾斜扫描。 此方法使用GetSkewAngleRotate方法.
ReadArgb32ScanLine(int)按指定扫描线索引读取整条扫描线。
ReadScanLine(int)按指定扫描线索引读取整条扫描线。
RelinkToFile(string)将链接的智能对象重新链接到新文件。 之后无需调用 UpdateModifiedContent 方法。
ReplaceColor(Color, byte, Color)将一种颜色替换为具有允许差异的另一种颜色并保留原始 alpha 值以保存平滑的边缘。
virtual ReplaceColor(int, byte, int)将一种颜色替换为具有允许差异的另一种颜色并保留原始 alpha 值以保存平滑的边缘。
ReplaceContents(Image)替换智能对象层中嵌入的智能对象内容。
ReplaceContents(string)用文件替换内容。 之后不需要调用 UpdateModifiedContent 方法。
ReplaceContents(Image, ResolutionSetting)替换智能对象层中嵌入的智能对象内容。
ReplaceContents(string, ResolutionSetting)用文件替换内容。 之后不需要调用 UpdateModifiedContent 方法。
ReplaceNonTransparentColors(Color)用新颜色替换所有非透明颜色并保留原始 alpha 值以保存平滑边缘。 注意:如果您在没有透明度的图像上使用它,所有颜色将被替换为一个颜色。
virtual ReplaceNonTransparentColors(int)用新颜色替换所有非透明颜色并保留原始 alpha 值以保存平滑边缘。 注意:如果您在没有透明度的图像上使用它,所有颜色将被替换为一个颜色。
Resize(int, int)调整图像大小。默认值LeftTopToLeftTop使用.
override Resize(int, int, ImageResizeSettings)调整图像大小。
override Resize(int, int, ResizeType)调整图像大小。
ResizeHeightProportionally(int)按比例调整高度。
virtual ResizeHeightProportionally(int, ImageResizeSettings)按比例调整高度。
virtual ResizeHeightProportionally(int, ResizeType)按比例调整高度。
ResizeWidthProportionally(int)按比例调整宽度。
virtual ResizeWidthProportionally(int, ImageResizeSettings)按比例调整宽度。
virtual ResizeWidthProportionally(int, ResizeType)按比例调整宽度。
virtual Rotate(float)围绕中心旋转图像。
override Rotate(float, bool, Color)围绕中心旋转图像。
override RotateFlip(RotateFlipType)旋转、翻转或旋转并翻转图像。
Save()将图像数据保存到底层流中。
override Save(Stream)将对象的数据保存到指定的流中。
Save(string)将对象的数据保存到指定的文件位置。
Save(Stream, ImageOptionsBase)根据保存选项以指定文件格式将图像数据保存到指定流。
override Save(string, bool)将对象的数据保存到指定的文件位置。
override Save(string, ImageOptionsBase)根据保存选项以指定的文件格式将对象的数据保存到指定的文件位置。
override Save(Stream, ImageOptionsBase, Rectangle)根据保存选项以指定文件格式将图像数据保存到指定流。
override Save(string, ImageOptionsBase, Rectangle)根据保存选项以指定的文件格式将对象的数据保存到指定的文件位置。
SaveArgb32Pixels(Rectangle, int[])保存 32 位 ARGB 像素。
SaveCmyk32Pixels(Rectangle, int[])保存像素。
SavePixels(Rectangle, Color[])保存像素。
SaveRawData(byte[], int, Rectangle, RawDataSettings)保存原始数据。
SetArgb32Pixel(int, int, int)为指定位置设置图像 32 位 ARGB 像素。
override SetPalette(IColorPalette, bool)设置图像调色板。
SetPixel(int, int, Color)为指定位置设置图像像素。
virtual SetResolution(double, double)为此设置分辨率RasterImage .
ShallowCopy()创建当前层的浅表副本。 请https://msdn.microsoft.com/ru-ru/library/system.object.memberwiseclone(v=vs.110).aspx解释.
virtual ToBitmap()将光栅图像转换为位图。
UpdateModifiedContent()使用修改后的内容更新智能对象层图像缓存。
WriteArgb32ScanLine(int, int[])将整个扫描线写入指定的扫描线索引。
WriteScanLine(int, Color[])将整个扫描线写入指定的扫描线索引。

例子

以下代码演示了对嵌入式智能对象的支持。

[C#]

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

// 此示例演示如何更改 PSD 文件中的智能对象层以及导出/更新智能对象原始嵌入内容。
const int left = 0;
const int top = 0;
const int right = 0xb;
const int bottom = 0x10;
FileFormat[] formats = new[]
{
    FileFormat.Png, FileFormat.Psd, FileFormat.Bmp, FileFormat.Jpeg, FileFormat.Gif, FileFormat.Tiff, FileFormat.Jpeg2000
};
foreach (FileFormat format in formats)
{
    string formatString = format.ToString().ToLowerInvariant();
    string formatExt = format == FileFormat.Jpeg2000 ? "jpf" : formatString;
    string fileName = "r-embedded-" + formatString;
    string sourceFilePath = fileName + ".psd";
    string pngOutputPath = fileName + "_output.png";
    string psdOutputPath = fileName + "_output.psd";
    string png2OutputPath = fileName + "_updated.png";
    string psd2OutputPath = fileName + "_updated.psd";
    string exportPath = fileName + "_export." + formatExt;
    using (PsdImage image = (PsdImage)Image.Load(sourceFilePath))
    {
        var smartObjectLayer = (SmartObjectLayer)image.Layers[0];

        AssertAreEqual(left, smartObjectLayer.ContentsBounds.Left);
        AssertAreEqual(top, smartObjectLayer.ContentsBounds.Top);
        AssertAreEqual(right, smartObjectLayer.ContentsBounds.Right);
        AssertAreEqual(bottom, smartObjectLayer.ContentsBounds.Bottom);

        // 让我们从 PSD 智能对象层导出嵌入的智能对象图像
        smartObjectLayer.ExportContents(exportPath);

        // 让我们检查原始图像是否正确保存
        image.Save(psdOutputPath, new PsdOptions(image));
        image.Save(pngOutputPath, new PngOptions() { ColorType = PngColorType.TruecolorWithAlpha });

        using (var innerImage = (RasterImage)smartObjectLayer.LoadContents(null))
        {
            AssertAreEqual(format, innerImage.FileFormat);

            // 让我们反转原始智能对象图像
            var pixels = innerImage.LoadArgb32Pixels(innerImage.Bounds);
            for (int i = 0; i < pixels.Length; i++)
            {
                var pixel = pixels[i];
                var alpha = (int)(pixel & 0xff000000);
                pixels[i] = (~(pixel & 0x00ffffff)) | alpha;
            }

            innerImage.SaveArgb32Pixels(innerImage.Bounds, pixels);

            // 让我们替换 PSD 层中嵌入的智能对象图像
            smartObjectLayer.ReplaceContents(innerImage);
        }

        // 让我们检查更新的图像是否正确保存
        image.Save(psd2OutputPath, new PsdOptions(image));
        image.Save(png2OutputPath, new PngOptions() { ColorType = PngColorType.TruecolorWithAlpha });
    }
}

也可以看看