Використання Adjustment Layer для покращення PSD

Огляд

У цій статті ми дослідимо редагування adjustment layers в Aspose.PSD для Python. Шари коригування - це потужна функція в редагуванні зображень, яка дозволяє вам вносити недеструктивні зміни до зображень. Aspose.PSD надає повний набір класів adjustment layer, які можна використовувати для модифікації різних аспектів зображень.

Для демонстрації редагування adjustment layers ми використовуємо фрагмент коду на кінці сторінки, який завантажує зображення PSD та застосовує різні корекції до його шарів.

У наведеному нижче фрагменті коду ми починаємо з завантаження зображення PSD за допомогою методу PsdImage.load(). Потім ми налаштовуємо параметри для збереження вихідних файлів PNG. Клас PngOptions дозволяє нам визначити тип кольору для вихідного зображення.

Далі ми перебираємо кожний шар в зображенні PSD та перевіряємо його тип за допомогою методу is_assignable(). Якщо шар є певного типу, ми приводимо його до цього типу за допомогою методу cast() та застосовуємо потрібне коригування. Наприклад, ми налаштовуємо яскравість та контрастність шару BrightnessContrastLayer, модифікуємо рівні шару LevelsLayer, додаємо точку кривої шару CurvesLayer та інше.

Ви можете додати додатковий код для застосування інших коригувань до відповідних шарів. Aspose.PSD надає широкий спектр класів шарів коригування, таких як ExposureLayer, HueSaturationLayer, ColorBalanceAdjustmentLayer, BlackWhiteAdjustmentLayer, PhotoFilterLayer, ChannelMixerLayer, InvertAdjustmentLayer, PosterizeLayer, ThresholdLayer, SelectiveColorLayer та ін.

Наприкінці ми зберігаємо змінене зображення за допомогою методу save() класу PsdImage.

Цей код надає базовий огляд того, як редагувати adjustment layers в Aspose.PSD для Python. Ви можете налаштувати корекції відповідно до своїх вимог та досліджувати різні опції, що доступні в документації API.

Будь ласка, перевірте повний приклад.

Приклад

from aspose.psd import Color
from aspose.psd.fileformats.png import PngColorType
from aspose.psd.fileformats.psd import PsdImage
from aspose.psd.fileformats.psd.layers.adjustmentlayers import BrightnessContrastLayer, LevelsLayer, CurvesLayer, \
ExposureLayer, HueSaturationLayer, ColorBalanceAdjustmentLayer, BlackWhiteAdjustmentLayer, PhotoFilterLayer, \
ChannelMixerLayer, RgbMixerChannel, InvertAdjustmentLayer, PosterizeLayer, ThresholdLayer, SelectiveColorLayer, \
CmykCorrection, SelectiveColorsTypes
from aspose.psd.fileformats.psd.layers.layerresources import CurvesContinuousManager
from aspose.psd.imageoptions import PngOptions
from aspose.pycore import cast, is_assignable
def AdjustmentLayerEnhancementTest():
sourcePsd = "AllAdjustments.psd"
outputOrigPng = "AllAdjustments_orig.png"
outputModPng = "AllAdjustments_mod.png"
pngOpt = PngOptions()
pngOpt.color_type = PngColorType.TRUECOLOR_WITH_ALPHA
with PsdImage.load(sourcePsd) as image:
psdImage = cast(PsdImage, image)
psdImage.save(outputOrigPng, pngOpt)
layers = psdImage.layers
for layer in layers:
if is_assignable(layer, BrightnessContrastLayer):
br = cast(BrightnessContrastLayer, layer)
br.brightness = -br.brightness
br.contrast = -br.contrast
if is_assignable(layer, LevelsLayer):
levels = cast(LevelsLayer, layer)
levels.master_channel.output_shadow_level = 30
levels.master_channel.input_shadow_level = 5
levels.master_channel.input_midtone_level = 2
levels.master_channel.output_highlight_level = 213
levels.master_channel.input_highlight_level = 120
if is_assignable(layer, CurvesLayer):
curves = cast(CurvesLayer, layer)
manager = curves.get_curves_manager()
curveManager = cast(CurvesContinuousManager, manager)
curveManager.add_curve_point(2, 150, 180)
if is_assignable(layer, ExposureLayer):
exp = cast(ExposureLayer, layer)
exp.exposure = exp.exposure + 0.1
if is_assignable(layer, HueSaturationLayer):
hue = cast(HueSaturationLayer, layer)
hue.hue = -15
hue.saturation = 30
if is_assignable(layer, ColorBalanceAdjustmentLayer):
colorBal = cast(ColorBalanceAdjustmentLayer, layer)
colorBal.midtones_cyan_red_balance = 30
if is_assignable(layer, BlackWhiteAdjustmentLayer):
bw = cast(BlackWhiteAdjustmentLayer, layer)
bw.reds = 30
bw.greens = 25
bw.blues = 40
if is_assignable(layer, PhotoFilterLayer):
photoFilter = cast(PhotoFilterLayer, layer)
photoFilter.color = Color.azure
if is_assignable(layer, ChannelMixerLayer):
channelMixer = cast(ChannelMixerLayer, layer)
channel = channelMixer.get_channel_by_index(0)
if is_assignable(channel, RgbMixerChannel):
rgbChannel = cast(RgbMixerChannel, channel)
rgbChannel.green = 120
rgbChannel.red = 50
rgbChannel.blue = 70
rgbChannel.constant += 10
if is_assignable(layer, InvertAdjustmentLayer):
# Here is nothing to do ¯\_(ツ)_/¯ If this layer is presented than all colors will be inverted under it.
# Also, you can add it to the new image
# img = PsdImage(100, 100)
# img.AddInvertAdjustmentLayer()
pass
if is_assignable(layer, PosterizeLayer):
post = cast(PosterizeLayer, layer)
post.levels = 3
if is_assignable(layer, ThresholdLayer):
threshold = cast(ThresholdLayer, layer)
threshold.level = 15
if is_assignable(layer, SelectiveColorLayer):
selectiveColor = cast(SelectiveColorLayer, layer)
correction = CmykCorrection()
correction.cyan = 25
correction.magenta = 10
correction.yellow = -15
correction.black = 5
selectiveColor.set_cmyk_correction(SelectiveColorsTypes.CYANS, correction)
psdImage.save(outputModPng, pngOpt)