Редактирование растровых масок слоев в файле PSD через API

Обзор

Чтобы автоматизировать редактирование формата PSD и изменять файл PSD без Adobe® Photoshop®, можно использовать предоставленный ниже API Aspose.PSD. Для изменения файлов PSD доступны фрагменты кода на C# и .NET.

Используя маски слоев и векторные маски PSD, мы можем скрывать и отображать пиксели слоя без их окончательного удаления. Растровые маски также называются масками слоя или пользовательскими масками. Доступ к растровым и векторным маскам в Aspose.PSD предоставляется через свойство слоя LayerMaskData, которое может быть экземпляром классов ‘LayerMaskDataShort’ и ‘LayerMaskDataFull’, являющихся дочерними классами абстрактного класса ‘LayerMaskData’. Если у слоя есть как растровая, так и векторная маски, то предоставляется экземпляр LayerMaskDataFull . Если у слоя есть только растровая или векторная маска, то предоставляется экземпляр [LayerMaskDataShort ](https://reference.aspose.com/psd/net/aspose.p sd.fileformats.psd.layers/layermaskdatashort). Если свойство LayerMaskData равно null, то у слоя нет масок или только отключенная векторная маска.

todo:image_alt_text

Растровая маска и отключенная векторная маска LayerMaskDataShort

Отключенная растровая маска  LayerMaskDataShort

Растровая маска и векторная маска  LayerMaskDataFull

Растровая маска  LayerMaskDataShort

Векторная маска  LayerMaskDataShort

Отключенная векторная маска null (но ресурс вектора присутствует)

Как получить растровую маску слоя в файле PSD?

Сначала нам нужно определить, есть ли у слоя как векторная, так и растровая маски:

Ниже приведен пример кода, демонстрирующий, как получить растровую маску слоя

В противном случае тип свойства слоя LayerMaskData - LayerMaskDataShort. В этом случае давайте проверим, есть ли у слоя только растровая маска, проверив флаг Flags. Он не должен содержать LayerMaskFlags. Флаг UserMaskFromRenderingOtherData, в противном случае маска - это векторная маска кэш .

Получение фрагмента кода маски:

Если вам нужно извлечь растровую маску как LayerMaskDataShort (для дальнейших манипуляций), даже если присутствуют обе маски, должен быть извлечен LayerMaskDataFull и преобразован в LayerMaskDataShort. Для обоих случаев можно использовать следующий код:

Извлечение растровой маски из PSD

Как проверить, есть ли у слоя в файле PSD растровая маска?

Следующий код на C# может помочь вам проверить, есть ли у слоя растровая маска:

Как узнать, применена ли к растровой маска к слою PSD

Как удалить / добавить / обновить растровую маску слоя в файле PSD?

Просто удаление / добавление / обновление LayerMaskData недостаточно для правильного сохранения, потому что каналы не обновляются; хотя это может обеспечить правильное воспроизведение. Это не изменяет каналы маски:

Мы должны использовать метод AddLayerMask слоя для удаления / добавления / обновления.

Этот метод добавляет/обновляет как маску, так и каналы:

Этот метод удаляет как маску, так и каналы:

Удаление растровой маски слоя в изображении PSD

Сначала мы проверяем, в коротком формате ли маска, и если это не вектор, мы просто вызываем метод AddLayerMask со значением null, чтобы удалить растровую маску. Но если она в полном формате, мы должны преобразовать ее в короткий формат, оставив только векторную маску. Для удаления маски слоя можно использовать следующий фрагмент кода на C# .NET:

Фрагмент кода, как удалить маску слоя из файла PSD.

Обновление растровой маски слоя в изображении PSD

Это просто: если маска в коротком формате, мы должны изменить ImageData и MaskRectangle при необходимости, в противном случае должны быть изменены UserMaskData и UserMaskRectangle . Для обновления маски слоя можно использовать следующий фрагмент кода на C# .NET:

Обновление маски слоя PSD с помощью C#

Вот пример возможных действий, изменяющих растровую маску. Этот инвертирует пользовательскую маску слоя:

Обновление маски слоя PSD с помощью C#

Обновление векторной маски в файле PSD, когда присутствует растровая маска слоя

Предполагается, что пользователь уже изменил ресурс векторного пути. Затем можно обновить векторную маску просто, вызвав AddLayerMask метод слоя:

Обновление PSD Layer Vector Mask с C#

Добавление растровой маски слоя в файл PSD

Если у слоя нет маски, мы можем добавить данную растровую маску, просто вызвав метод слоя AddLayerMask.

Если у маски нет UserMaskFromRenderingOtherData** флага, то у нее уже есть растровая маска, и мы должны обновить ее, как описано выше. В противном случае, если эта маска в коротком формате, мы преобразуем ее в полный формат. Если нет, мы используем ее как есть. Затем обновите UserMaskData, UserMaskRectangle и другие свойства соответствующими свойствами маски. Для добавления (обновления) маски слоя можно использовать следующий фрагмент кода на C# .NET:

Добавление новой маски слоя в PSD

Как узнать, включена ли маска слоя?

Для определения состояния включения растровой маски слоя мы можем проверить состояние флага LayerMaskFlags.Disabled в свойстве Flags для LayerMaskDataShort или в RealFlags для LayerMaskDataFull. Для получения состояния включения маски слоя можно использовать следующий фрагмент кода на C# .NET:

Проверить, включена ли маска:

Как включить или отключить растровую маску слоя?

Чтобы включить или выключить растровую маску слоя, мы можем изменить состояние флага LayerMaskFlags.Disabled в свойстве Flags для LayerMaskDataShort или в RealFlags для LayerMaskDataFull. Для изменения состояния включения маски слоя можно использовать следующий фрагмент кода на C# .NET:

Включить или отключить растровую маску слоя: