SmartObjectLayer

SmartObjectLayer class

Определяет класс SmartObjectLayer, который содержит встроенный в файл PSD или связанный смарт-объект во внешнем файле. С помощью смарт-объектов вы можете: выполнять неразрушающие преобразования. Вы можете масштабировать, вращать, наклонять, искажать, преобразовывать перспективу или деформировать слой без потери исходных данных изображения или качества, поскольку преобразования не влияют на исходные данные. Работайте с векторными данными, такими как векторные рисунки из Illustrator, которые в противном случае будет растеризован. Выполнить неразрушающую фильтрацию. Фильтры, применяемые к смарт-объектам, можно редактировать в любое время. Редактируйте один смарт-объект и автоматически обновляйте все его связанные экземпляры. Применяйте маску слоя, связанную или не связанную со слоем смарт-объекта. Пробуйте различные дизайны с низким изображения-заполнители разрешения, которые вы позже замените окончательными версиями. В Adobe� Photoshop� вы можете встроить содержимое изображения в документ PSD. Дополнительная информация здесь:https://helpx.adobe.com/photoshop/using/create-smart-objects.html Слой со встроенным смарт-объектом содержит размещенные (PlLd) и ресурсы SoLd со свойствами смарт-объекта. Ресурс PlLd может быть один для версий PSD старше 10. Эти ресурсы содержат UniqueId LiFdDataSource в глобальном Lnk2Resource со встроенным имя_файла и другие параметры, включая встроенное содержимое файла в исходном формате в виде массива байтов.

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 искать файл относительно пути к исходному изображениюSourceImagePath , если нет в наличии смотримFullPath , если нет то ищем файл ссылки в той же директории где наш образ:SourceImagePath .
ContentsBounds { get; set; } Получает или задает границы содержимого смарт-объекта.
ContentsSource { get; set; } Получает или задает источник содержимого смарт-объекта.
ContentType { get; } Получает тип содержимого слоя смарт-объекта. Содержимое встроенного смарт-объекта представляет собой встроенный файл необработанного изображения:Data . Содержимое связанного смарт-объекта — это необработанное содержимое связанного файла изображения, если оно доступно:LiFeDataSource . Мы не поддерживаем загрузку из графической библиотеки Adobe� Photoshop� � приIsLibraryLink верно. Для обычных файлов ссылок сначала используетсяRelativePath искать файл относительно пути к исходному изображению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; } Получает значение, указывающее, есть ли у этого экземпляра альфа.
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; } Получает или устанавливает блокировку слоя. Обратите внимание, что если флаг 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) Бинаризация изображения с использованием алгоритма адаптивной пороговой обработки Брэдли с использованием интегрального порогового значения изображения
override BinarizeBradley(double, int) Бинаризация изображения с использованием алгоритма адаптивной пороговой обработки Брэдли с использованием интегрального порогового значения изображения
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() Получает параметры, основанные на настройках исходного файла. Это может быть полезно для сохранения без изменений битовой глубины и других параметров исходного изображения. Например, если мы загружаем черно-белое изображение PNG с 1 битом на пиксель, а затем сохраните его, используя the Save будет создано выходное изображение PNG с 8 битами на пиксель. Чтобы избежать этого и сохранить изображение PNG с 1 битом на пиксель, используйте этот метод, чтобы получить соответствующие параметры сохранения и передать их 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) Объединяет слой с указанным layer
NewSmartObjectViaCopy() Создает новый слой смарт-объекта, копируя этот слой. Воспроизводит функцию «Слой -> Смарт-объекты -> Новый смарт-объект через копирование» Adobe Photoshop. также копируется. Если вы хотите поделиться встроенным изображением, используйтеDuplicateLayer метод.
NormalizeAngle() Нормализует угол. Этот метод применим к отсканированным текстовым документам, чтобы избавиться от перекоса сканирования. Этот метод используетGetSkewAngle а такжеRotate методы.
virtual NormalizeAngle(bool, Color) Нормализует угол. Этот метод применим к отсканированным текстовым документам, чтобы избавиться от перекоса сканирования. Этот метод используетGetSkewAngle а такжеRotate методы.
ReadArgb32ScanLine(int) Считывает всю строку сканирования по указанному индексу строки сканирования.
ReadScanLine(int) Считывает всю строку сканирования по указанному индексу строки сканирования.
RelinkToFile(string) Повторно связывает связанный смарт-объект с новым файлом. После этого нет необходимости вызывать метод UpdateModifiedContent.
ReplaceColor(Color, byte, Color) Заменяет один цвет другим с допустимой разницей и сохраняет исходное значение альфа-канала для сохранения сглаженных краев.
virtual ReplaceColor(int, byte, int) Заменяет один цвет другим с допустимой разницей и сохраняет исходное значение альфа-канала для сохранения сглаженных краев.
ReplaceContents(Image) Заменяет содержимое смарт-объекта, встроенное в слой смарт-объекта.
ReplaceContents(string) Заменяет содержимое файлом. После этого нет необходимости вызывать метод UpdateModifiedContent.
ReplaceContents(Image, ResolutionSetting) Заменяет содержимое смарт-объекта, встроенное в слой смарт-объекта.
ReplaceContents(string, ResolutionSetting) Заменяет содержимое файлом. После этого нет необходимости вызывать метод UpdateModifiedContent.
ReplaceNonTransparentColors(Color) Заменяет все непрозрачные цвета новым цветом и сохраняет исходное значение альфа-канала для сохранения гладких краев. Примечание: если вы используете его на изображениях без прозрачности, все цвета будут заменены одним цветом.
virtual ReplaceNonTransparentColors(int) Заменяет все непрозрачные цвета новым цветом и сохраняет исходное значение альфа-канала для сохранения гладких краев. Примечание: если вы используете его на изображениях без прозрачности, все цвета будут заменены одним цветом.
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() Сохраняет данные изображения в базовый поток.
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 });
    }
}

Смотрите также