Edición de máscaras de capa de mapa de bits en archivo PSD a través de API

Descripción general

Para automatizar la edición de formato PSD y cambiar archivos PSD sin Adobe® Photoshop®, puede utilizar la API de Aspose.PSD proporcionada a continuación. Hay fragmentos de código en C# y .NET que pueden ayudarlo a modificar archivos PSD.

Utilizando máscaras de capa y máscaras vectoriales de PSD podemos ocultar y mostrar píxeles de capas sin eliminarlos permanentemente. Las máscaras de mapas de bits también se denominan máscara de capa o máscara de usuario. El acceso a las máscaras de mapa de bits y vectoriales en Aspose.PSD se proporciona a través de la propiedad de capa LayerMaskData, que puede ser una instancia de ‘LayerMaskDataShort’ y ‘LayerMaskDataFull’, que son clases secundarias de la clase abstracta ‘LayerMaskData’. Si una capa tiene tanto máscaras de mapa de bits como vectoriales, se proporciona una instancia LayerMaskDataFull. Si una capa tiene solo una máscara de mapa de bits o una vectorial, se proporciona una instancia LayerMaskDataShort. Si la propiedad LayerMaskData es nula, entonces la capa no tiene máscaras o solo tiene una máscara vectorial deshabilitada.

todo:image_alt_text

Una máscara de mapa de bits y una máscara vectorial deshabilitada LayerMaskDataShort

Una máscara de mapa de bits deshabilitada LayerMaskDataShort

Una máscara de mapa de bits y una máscara vectorial LayerMaskDataFull

Una máscara de mapa de bits LayerMaskDataShort

Una máscara vectorial LayerMaskDataShort

Una máscara vectorial deshabilitada nula (Pero el recurso vectorial está presente)

¿Cómo obtener una máscara de mapa de bits de capa en el archivo PSD?

En primer lugar, debemos averiguar si una capa tiene tanto máscaras vectoriales como de capa:

A continuación, se proporciona un código de ejemplo que demuestra cómo obtener una máscara de mapa de bits de capa.

De lo contrario, el tipo de la propiedad de capa LayerMaskData es LayerMaskDataShort. En este caso, verifiquemos si la capa tiene solo una máscara de mapa de bits comprobando la propiedad Flags. No debe contener LayerMaskFlags.LinkedLayerMask flag, de lo contrario, la máscara es una caché de máscara vectorial.

Fragmento de código para obtener la máscara:

Si necesita extraer una máscara de mapa de bits como LayerMaskDataShort (para más manipulaciones) incluso cuando ambas máscaras están presentes, se debe extraer LayerMaskDataFull y convertirlo en LayerMaskDataShort. El siguiente código puede usarse para ambos casos:

Extrayendo una máscara de mapa de bits de PSD

¿Cómo verificar si una capa en el archivo PSD tiene una máscara de mapa de bits?

El siguiente código C# puede ayudarlo a verificar si una capa tiene una máscara de mapa de bits:

Cómo saber si se aplica una máscara de mapa de bits a la capa PSD

¿Cómo eliminar / añadir / actualizar una máscara de mapa de bits de capa en el archivo PSD?

Simplemente eliminar / añadir / actualizar LayerMaskData no es suficiente para una correcta salvaguarda porque los canales no se actualizan; aunque puede proporcionar una correcta representación. Esto no cambia los canales de la máscara:

Deberíamos usar el método AddLayerMask de la capa para eliminar / añadir / actualizar.

Esto agrega/actualiza tanto la máscara como los canales:

Esto quita tanto la máscara como los canales:

Eliminar una máscara de mapa de bits de capa en la imagen PSD

En primer lugar, comprobamos si la máscara está en formato corto y si no es vectorial, simplemente podemos llamar al método AddLayerMask con nulo para eliminar la máscara de mapa de bits. Pero si está en formato completo, debemos convertirla a un formato corto, dejando así solo la máscara vectorial. Para eliminar una máscara de capa, se puede utilizar este siguiente fragmento de código en C# .NET:

Fragmento de código sobre cómo eliminar una máscara de capa del archivo PSD.

Actualización de una máscara de mapa de bits de capa en la imagen PSD

Esto es directo: si la máscara está en formato corto, debemos cambiar ImageData y MaskRectangle si es necesario, de lo contrario, UserMaskData y UserMaskRectanglese deben cambiar. El siguiente fragmento de código en C# .NET se puede utilizar para actualizar una máscara de capa:

Actualizar máscara de capa PSD con C#

Aquí hay un ejemplo de posibles acciones que cambian una máscara de mapa de bits. Este invierte una máscara de usuario de capa:

Actualizar máscara de capa PSD con C#

Actualización de una máscara vectorial en el archivo PSD cuando una máscara de mapa de bits de capa está presente

Se supone que un usuario ya ha cambiado un recurso de ruta vectorial. Luego puede actualizar la máscara vectorial simplemente llamando al método de capa AddLayerMask:

Actualizar máscara vectorial de capa PSD con C#

Añadir una máscara de mapa de bits de capa en el archivo PSD

Si una capa no tiene máscara, podemos añadir la máscara de mapa de bits dada simplemente llamando al método de capa AddLayerMask.

Si la máscara no tiene la bandera UserMaskFromRenderingOtherData** entonces ya tiene una máscara de mapa de bits y debemos actualizarla como se describe arriba. De lo contrario, si esta máscara está en un formato corto, la convertimos a un formato completo. Si no, la usamos como está. Luego, actualizamos UserMaskData, UserMaskRectangle y otras propiedades con las propiedades de la máscara dada. El siguiente fragmento de código en C# .NET se puede utilizar para agregar (actualizar) una máscara de capa:

Agregar nueva máscara de capa a PSD

¿Cómo verificar si una máscara de capa está habilitada?

Para averiguar el estado habilitado de la máscara de mapa de bits de la capa, podemos verificar el estado de la bandera LayerMaskFlags.Disabled en la propiedad Flags de LayerMaskDataShort o en RealFlags de LayerMaskDataFull. El siguiente fragmento de código en C# .NET se puede utilizar para obtener el estado habilitado de una máscara de capa:

Comprobar si una máscara está habilitada:

¿Cómo habilitar o deshabilitar una máscara de mapa de bits de capa?

Para habilitar o deshabilitar una máscara de mapa de bits de capa, podemos cambiar el estado de la bandera LayerMaskFlags.Disabled en la propiedad Flags de LayerMaskDataShort o en RealFlags de LayerMaskDataFull. El siguiente fragmento de código en C# .NET se puede utilizar para cambiar el estado habilitado de una máscara de capa:

Habilitar o deshabilitar Máscara de Capa de Mapa de Bits: