Class SmartObjectLayer

SmartObjectLayer class

Define la clase SmartObjectLayer que contiene incrustado en el archivo PSD o el objeto inteligente vinculado en el archivo externo. Con Objetos inteligentes, puede: Realizar transformaciones no destructivas. Puede escalar, rotar, sesgar, distorsionar, transformar la perspectiva o deformar una capa sin perder los datos o la calidad de la imagen original porque las transformaciones no afectan los datos originales. Trabaje con datos vectoriales, como ilustraciones vectoriales de Illustrator, que de otro modo se rasterizaría. Realice un filtrado no destructivo. Puede editar los filtros aplicados a los objetos inteligentes en cualquier momento. Edite un objeto inteligente y actualice automáticamente todas sus instancias vinculadas. Aplique una máscara de capa que esté vinculada o no vinculada a la capa del objeto inteligente. Pruebe varios diseños con imágenes de marcador de posición de resolución que luego reemplaza con versiones finales. En Adobe� Photoshop�, puede incrustar el contenido de una imagen en un documento PSD. Más información está aquí:https://helpx.adobe.com/photoshop/using/create-smart-objects.html Una capa con un objeto inteligente incrustado contiene recursos colocados (PlLd) y SoLd con propiedades de objeto inteligente. El recurso PlLd puede estar solo para versiones de PSD anteriores a la 10. Estos recursos contienen UniqueId de LiFdDataSource en el Lnk2Resource global con el incrustado filename y otros parámetros, incluido el contenido del archivo incrustado en el formato original como una matriz de bytes.

public class SmartObjectLayer : Layer

Propiedades

NombreDescripción
AutoAdjustPalette { get; set; }Obtiene o establece un valor que indica si la paleta se ajusta automáticamente.
virtual BackgroundColor { get; set; }Obtiene o establece un valor para el color de fondo.
override BitsPerPixel { get; }Obtiene el recuento de bits por píxel de la imagen.
BlendingOptions { get; }Obtiene las opciones de fusión.
virtual BlendModeKey { get; set; }Obtiene o establece la clave del modo de combinación.
BlendModeSignature { get; }Obtiene la firma del modo de mezcla.
Bottom { get; set; }Obtiene o establece la posición de la capa inferior.
Bounds { get; }Obtiene los límites de la imagen.
BufferSizeHint { get; set; }Obtiene o establece la sugerencia de tamaño de búfer que se define como el tamaño máximo permitido para todos los búferes internos.
ChannelInformation { get; set; }Obtiene o establece la información del canal.
ChannelsCount { get; }Obtiene el conteo de canales de la capa.
Clipping { get; set; }Obtiene o establece el recorte de la capa. 0 = base, 1 = no base.
Container { get; }Obtiene elImage contenedor.
Contents { get; set; }Obtiene o establece el contenido de la capa del objeto inteligente. El contenido del objeto inteligente incrustado es el archivo de imagen sin procesar incrustado:Data y sus propiedades. El contenido del objeto inteligente vinculado es el contenido sin procesar del archivo de imagen vinculado si está disponible y sus propiedades:LiFeDataSource . No admitimos la carga desde Adobe� Photoshop� �� Biblioteca de gráficos cuandoIsLibraryLink es verdadero. Para archivos de enlace regulares, al principio, usamosRelativePath para buscar el archivo relativamente en la ruta de la imagen de origenSourceImagePath , si no está disponible miramosFullPath , si no es así entonces buscamos el archivo de enlace en el mismo directorio donde está nuestra imagen:SourceImagePath .
ContentsBounds { get; set; }Obtiene o establece los límites del contenido del objeto inteligente.
ContentsSource { get; set; }Obtiene o establece la fuente del contenido del objeto inteligente.
ContentType { get; }Obtiene el tipo de contenido de la capa del objeto inteligente. El contenido del objeto inteligente incrustado es el archivo de imagen sin procesar incrustado:Data . El contenido del objeto inteligente vinculado es el contenido sin procesar del archivo de imagen vinculado, si está disponible:LiFeDataSource . No admitimos la carga desde Adobe� Photoshop� �� Biblioteca de gráficos cuandoIsLibraryLink es verdadero. Para archivos de enlace regulares, al principio, usamosRelativePath para buscar el archivo relativamente en la ruta de la imagen de origenSourceImagePath , si no está disponible miramosFullPath , si no es así entonces buscamos el archivo de enlace en el mismo directorio donde está nuestra imagen:SourceImagePath .
DataStreamContainer { get; }Obtiene el flujo de datos del objeto.
DisplayName { get; set; }Obtiene o establece el nombre para mostrar de la capa.
Disposed { get; }Obtiene un valor que indica si esta instancia se desecha.
ExtraLength { get; }Obtiene la longitud de la información extra de la capa en bytes.
virtual FileFormat { get; }Obtiene un valor de formato de archivo
Filler { get; set; }Obtiene o establece el relleno de la capa.
FillOpacity { get; set; }Obtiene o establece la opacidad de relleno.
Flags { get; set; }Obtiene o establece los indicadores de capa. bit 0 = transparencia protegida; bit 1 = visible; bit 2 = obsoleto; bit 3 = 1 para Photoshop 5.0 y posterior, indica si el bit 4 tiene información útil; bit 4 = datos de píxeles irrelevantes para la apariencia del documento.
override HasAlpha { get; }Obtiene un valor que indica si esta instancia tiene alfa.
virtual HasBackgroundColor { get; set; }Obtiene o establece un valor que indica si la imagen tiene color de fondo.
virtual HasTransparentColor { get; set; }Obtiene un valor que indica si la imagen tiene color transparente.
override Height { get; }Obtiene la altura de la imagen.
virtual HorizontalResolution { get; set; }Obtiene o establece la resolución horizontal, en píxeles por pulgada, de esteRasterImage .
virtual ImageOpacity { get; }Obtiene la opacidad de esta imagen.
InterruptMonitor { get; set; }Obtiene o establece el monitor de interrupción.
override IsCached { get; }Obtiene un valor que indica si los datos de la imagen se almacenan en caché actualmente.
IsRawDataAvailable { get; }Obtiene un valor que indica si la carga de datos sin procesar está disponible.
IsVisible { get; set; }Obtiene o establece un valor que indica si la capa es visible
virtual IsVisibleInGroup { get; }Obtiene un valor que indica si esta instancia está visible en el grupo (si la capa no está en el grupo, significa grupo raíz).
LayerBlendingRangesData { get; set; }Obtiene o establece los datos de rangos de fusión de capas.
LayerCreationDateTime { get; set; }Obtiene o establece la fecha y hora de creación de la capa.
LayerLock { get; set; }Obtiene o establece el bloqueo de capa. Tenga en cuenta que si se establece el indicador LayerFlags.TransparencyProtected, se sobrescribirá con el indicador de bloqueo de capa. Para devolver el indicador LayerFlags.TransparencyProtected, debe solicitar la opción de capa layer.Flags |= LayerFlags.TransparencyProtected
LayerMaskData { get; set; }Obtiene o establece los datos de la máscara de capa.
LayerOptions { get; }Obtiene las opciones de capa.
Left { get; set; }Obtiene o establece la posición de la capa izquierda.
Length { get; }Obtiene la longitud total de la capa en bytes.
Name { get; set; }Obtiene o establece el nombre de la capa.
Opacity { get; set; }Obtiene o establece la opacidad de la capa. 0 = transparente, 255 = opaco.
Palette { get; set; }Obtiene o establece la paleta de colores. La paleta de colores no se utiliza cuando los píxeles se representan directamente.
virtual PremultiplyComponents { get; set; }Obtiene o establece un valor que indica si los componentes de la imagen se deben premultiplicar.
RawCustomColorConverter { get; set; }Obtiene o establece el convertidor de color personalizado
virtual RawDataFormat { get; }Obtiene el formato de datos sin procesar.
RawDataSettings { get; }Obtiene la configuración actual de datos sin procesar. Tenga en cuenta que al usar esta configuración, los datos se cargan sin conversión.
RawFallbackIndex { get; set; }Obtiene o establece el índice alternativo que se utilizará cuando el índice de la paleta esté fuera de los límites
RawIndexedColorConverter { get; set; }Obtiene o establece el convertidor de color indexado
virtual RawLineSize { get; }Obtiene el tamaño de línea sin formato en bytes.
Resources { get; set; }Obtiene o establece los recursos de la capa.
Right { get; set; }Obtiene o establece la posición correcta de la capa.
SheetColorHighlight { get; set; }Obtiene o establece el resaltado de color de la hoja decorativa en la lista de capas
Size { get; }Obtiene el tamaño de la imagen.
SmartFilters { get; }Obtiene los filtros inteligentes.
SmartObjectProvider { get; }Obtiene el proveedor de objetos inteligentes.
Top { get; set; }Obtiene o establece la posición de la capa superior.
virtual TransparentColor { get; set; }Obtiene la imagen en color transparente.
virtual UpdateXmpData { get; set; }Obtiene o establece un valor que indica si se deben actualizar los metadatos XMP.
virtual UseRawData { get; set; }Obtiene o establece un valor que indica si se debe usar la carga de datos sin procesar cuando la carga de datos sin procesar está disponible.
virtual VerticalResolution { get; set; }Obtiene o establece la resolución vertical, en píxeles por pulgada, de esteRasterImage .
override Width { get; }Obtiene el ancho de la imagen.
virtual XmpData { get; set; }Obtiene o establece los metadatos XMP.

Métodos

NombreDescripción
AddLayerMask(LayerMaskData)Agrega la máscara a la capa actual.
override AdjustBrightness(int)Ajuste de un brillo para la imagen.
override AdjustContrast(float)Contraste de imagen
override AdjustGamma(float)Corrección gamma de una imagen.
override AdjustGamma(float, float, float)Corrección gamma de una imagen.
override BinarizeBradley(double)Binarización de una imagen usando el algoritmo de umbral adaptativo de Bradley usando el umbral de imagen integral
override BinarizeBradley(double, int)Binarización de una imagen usando el algoritmo de umbral adaptativo de Bradley usando el umbral de imagen integral
override BinarizeFixed(byte)Binarización de una imagen con umbral predefinido
override BinarizeOtsu()Binarización de una imagen con umbral Otsu
override CacheData()Almacena en caché los datos y garantiza que no se realizará ninguna carga de datos adicional desde el servidor subyacente.DataStreamContainer .
CanSave(ImageOptionsBase)Determina si la imagen se puede guardar en el formato de archivo especificado representado por las opciones de guardado pasadas.
ConvertToLinked(string)Convierte este objeto inteligente incrustado en un objeto inteligente vinculado.
override Crop(Rectangle)Recortando la imagen.
virtual Crop(int, int, int, int)Recortar imagen con turnos.
Dispose()Elimina la instancia actual.
Dither(DitheringMethod, int)Realiza tramado en la imagen actual.
override Dither(DitheringMethod, int, IColorPalette)Realiza tramado en la imagen actual.
DrawImage(Point, RasterImage)Dibuja la imagen en la capa.
DuplicateLayer()Crea una nueva capa de objeto inteligente copiando esta. Tenga en cuenta que para los objetos inteligentes incrustados se comparte la imagen incrustada. Si desea copiar la imagen incrustada, utiliceNewSmartObjectViaCopy método.
EmbedLinked()Incrusta el objeto inteligente vinculado en esta capa.
ExportContents(string)Exporta el contenido incrustado o vinculado a un archivo.
virtual Filter(Rectangle, FilterOptionsBase)Filtra el rectángulo especificado.
GetArgb32Pixel(int, int)Obtiene una imagen ARGB pixel de 32 bits.
GetDefaultArgb32Pixels(Rectangle)Obtiene la matriz de píxeles ARGB de 32 bits predeterminada.
virtual GetDefaultOptions(object[])Obtiene las opciones predeterminadas.
GetDefaultPixels(Rectangle, IPartialArgb32PixelLoader)Obtiene la matriz de píxeles predeterminada usando un cargador de píxeles parcial.
GetDefaultRawData(Rectangle, RawDataSettings)Obtiene la matriz de datos sin procesar predeterminada.
GetDefaultRawData(Rectangle, IPartialRawDataLoader, RawDataSettings)Obtiene la matriz de datos sin procesar predeterminada mediante el cargador de píxeles parciales.
override GetHashCode()Devuelve un código hash para esta instancia.
virtual GetModifyDate(bool)Obtiene la fecha y la hora en que se modificó por última vez la imagen del recurso.
virtual GetOriginalOptions()Obtiene las opciones basadas en la configuración del archivo original. Esto puede ser útil para mantener sin cambios la profundidad de bits y otros parámetros de la imagen original. Por ejemplo, si cargamos una imagen PNG en blanco y negro con 1 bit por píxel y luego guardarlo usando the Save se producirá la imagen PNG de salida con 8 bits por píxel.Savemétodo como el segundo parámetro.
GetPixel(int, int)Obtiene un píxel de imagen.
GetSkewAngle()Obtiene el ángulo de inclinación. Este método es aplicable a documentos de texto escaneados, para determinar el ángulo de inclinación al escanear.
override Grayscale()Transformación de una imagen a su representación en escala de grises
LoadArgb32Pixels(Rectangle)Carga píxeles ARGB de 32 bits.
LoadArgb64Pixels(Rectangle)Carga píxeles ARGB de 64 bits.
LoadCmyk32Pixels(Rectangle)Carga píxeles en formato CMYK.
LoadContents(LoadOptions)Obtiene el contenido de la imagen incrustada o vinculada de la capa del objeto inteligente.
LoadPartialArgb32Pixels(Rectangle, IPartialArgb32PixelLoader)Carga píxeles ARGB de 32 bits parcialmente por paquetes.
LoadPartialPixels(Rectangle, IPartialPixelLoader)Carga píxeles parcialmente por paquetes.
LoadPixels(Rectangle)Carga píxeles.
LoadRawData(Rectangle, RawDataSettings, IPartialRawDataLoader)Carga datos sin procesar.
LoadRawData(Rectangle, Rectangle, RawDataSettings, IPartialRawDataLoader)Carga datos sin procesar.
virtual MergeLayerTo(Layer)Fusiona la capa con la capa especificada
NewSmartObjectViaCopy()Crea una nueva capa de objeto inteligente copiando esta. Reproduce la funcionalidad Capa -> Objetos inteligentes -> Nuevo objeto inteligente a través de la copia de Adobe� Photoshop�. Tenga en cuenta que está habilitado solo para objetos inteligentes incrustados porque la imagen incrustada también se copia. Si desea compartir la imagen incrustada, useDuplicateLayer método.
NormalizeAngle()Normaliza el ángulo. Este método es aplicable a documentos de texto escaneados para eliminar el escaneo sesgado. Este método utilizaGetSkewAngle yRotate métodos.
virtual NormalizeAngle(bool, Color)Normaliza el ángulo. Este método es aplicable a documentos de texto escaneados para eliminar el escaneo sesgado. Este método utilizaGetSkewAngle yRotate métodos.
ReadArgb32ScanLine(int)Lee toda la línea de escaneo por el índice de línea de escaneo especificado.
ReadScanLine(int)Lee toda la línea de escaneo por el índice de línea de escaneo especificado.
RelinkToFile(string)Vuelve a vincular el objeto inteligente vinculado a un nuevo archivo. No es necesario llamar al método UpdateModifiedContent después.
ReplaceColor(Color, byte, Color)Reemplaza un color por otro con la diferencia permitida y conserva el valor alfa original para guardar bordes suaves.
virtual ReplaceColor(int, byte, int)Reemplaza un color por otro con la diferencia permitida y conserva el valor alfa original para guardar bordes suaves.
ReplaceContents(Image)Reemplaza el contenido del objeto inteligente incrustado en la capa del objeto inteligente.
ReplaceContents(string)Reemplaza el contenido con un archivo. No es necesario llamar al método UpdateModifiedContent después.
ReplaceContents(Image, ResolutionSetting)Reemplaza el contenido del objeto inteligente incrustado en la capa del objeto inteligente.
ReplaceContents(string, ResolutionSetting)Reemplaza el contenido con un archivo. No es necesario llamar al método UpdateModifiedContent después.
ReplaceNonTransparentColors(Color)Reemplaza todos los colores no transparentes con un nuevo color y conserva el valor alfa original para guardar bordes suaves. Nota: si lo usa en imágenes sin transparencia, todos los colores se reemplazarán con uno solo.
virtual ReplaceNonTransparentColors(int)Reemplaza todos los colores no transparentes con un nuevo color y conserva el valor alfa original para guardar bordes suaves. Nota: si lo usa en imágenes sin transparencia, todos los colores se reemplazarán con uno solo.
Resize(int, int)Cambia el tamaño de la imagen. El valor por defectoLeftTopToLeftTopse usa.
override Resize(int, int, ImageResizeSettings)Cambia el tamaño de la imagen.
override Resize(int, int, ResizeType)Cambia el tamaño de la imagen.
ResizeHeightProportionally(int)Cambia el tamaño de la altura proporcionalmente.
virtual ResizeHeightProportionally(int, ImageResizeSettings)Cambia el tamaño de la altura proporcionalmente.
virtual ResizeHeightProportionally(int, ResizeType)Cambia el tamaño de la altura proporcionalmente.
ResizeWidthProportionally(int)Cambia el tamaño del ancho proporcionalmente.
virtual ResizeWidthProportionally(int, ImageResizeSettings)Cambia el tamaño del ancho proporcionalmente.
virtual ResizeWidthProportionally(int, ResizeType)Cambia el tamaño del ancho proporcionalmente.
virtual Rotate(float)Rotar imagen alrededor del centro.
override Rotate(float, bool, Color)Rotar imagen alrededor del centro.
override RotateFlip(RotateFlipType)Gira, voltea o gira y voltea la imagen.
Save()Guarda los datos de la imagen en el flujo subyacente.
override Save(Stream)Guarda los datos del objeto en el flujo especificado.
Save(string)Guarda los datos del objeto en la ubicación de archivo especificada.
Save(Stream, ImageOptionsBase)Guarda los datos de la imagen en el flujo especificado en el formato de archivo especificado según las opciones de guardado.
override Save(string, bool)Guarda los datos del objeto en la ubicación de archivo especificada.
override Save(string, ImageOptionsBase)Guarda los datos del objeto en la ubicación de archivo especificada en el formato de archivo especificado según las opciones de guardado.
override Save(Stream, ImageOptionsBase, Rectangle)Guarda los datos de la imagen en el flujo especificado en el formato de archivo especificado según las opciones de guardado.
override Save(string, ImageOptionsBase, Rectangle)Guarda los datos del objeto en la ubicación de archivo especificada en el formato de archivo especificado según las opciones de guardado.
SaveArgb32Pixels(Rectangle, int[])Guarda los píxeles ARGB de 32 bits.
SaveCmyk32Pixels(Rectangle, int[])Guarda los píxeles.
SavePixels(Rectangle, Color[])Guarda los píxeles.
SaveRawData(byte[], int, Rectangle, RawDataSettings)Guarda los datos sin procesar.
SetArgb32Pixel(int, int, int)Establece un píxel ARGB de 32 bits de imagen para la posición especificada.
override SetPalette(IColorPalette, bool)Establece la paleta de la imagen.
SetPixel(int, int, Color)Establece un píxel de imagen para la posición especificada.
virtual SetResolution(double, double)Establece la resolución para esteRasterImage .
ShallowCopy()Crea una copia superficial de la Capa actual. Por favorhttps://msdn.microsoft.com/ru-ru/library/system.object.memberwiseclone(v=vs.110).aspx para explicación.
virtual ToBitmap()Convierte la imagen ráster al mapa de bits.
UpdateModifiedContent()Actualiza la caché de imágenes de la capa de objeto inteligente con el contenido modificado.
WriteArgb32ScanLine(int, int[])Escribe toda la línea de escaneo en el índice de línea de escaneo especificado.
WriteScanLine(int, Color[])Escribe toda la línea de escaneo en el índice de línea de escaneo especificado.

Ejemplos

El código siguiente demuestra la compatibilidad con los objetos inteligentes integrados.

[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));
    }
}

// Este ejemplo demuestra cómo cambiar la capa del objeto inteligente en el archivo PSD y exportar/actualizar el contenido incrustado original del objeto inteligente.
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);

        // Exportemos la imagen del objeto inteligente incrustado desde la capa de objetos inteligentes PSD
        smartObjectLayer.ExportContents(exportPath);

        // Verifiquemos si la imagen original se guardó correctamente
        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);

            // Vamos a invertir la imagen original del objeto inteligente
            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);

            // Reemplacemos la imagen del objeto inteligente incrustado en la capa PSD
            smartObjectLayer.ReplaceContents(innerImage);
        }

        // Verifiquemos si la imagen actualizada se guardó correctamente
        image.Save(psd2OutputPath, new PsdOptions(image));
        image.Save(png2OutputPath, new PngOptions() { ColorType = PngColorType.TruecolorWithAlpha });
    }
}

Ver también