使用调整图层增强PSD

Contents
[ ]

概览

在本文中,我们将探讨在Aspose.PSD for Python中编辑调整图层。调整图层是图像编辑中的一个强大功能,允许您对图像进行非破坏性更改。Aspose.PSD提供了一套全面的调整图层类,您可以使用这些类修改图像的各个方面。

为了演示调整图层的编辑,我们将使用一个代码示例,在页面的末尾加载一个PSD图像并对其图层应用不同的调整。

在下面的代码示例中,我们首先使用PsdImage.load()方法加载PSD图像。然后设置保存输出PNG文件的选项。PngOptions类允许我们指定输出图像的颜色类型。

接下来,我们遍历PSD图像中的每个图层,并使用is_assignable()方法检查其类型。如果图层属于特定类型,我们使用cast()方法将其转换为该类型,并应用所需的调整。例如,我们调整BrightnessContrastLayer的亮度和对比度,修改LevelsLayer的级别,为CurvesLayer添加曲线点,等等。

您可以添加其他代码以对其各自的图层应用其他调整。Aspose.PSD提供了一系列调整图层类,例如ExposureLayerHueSaturationLayerColorBalanceAdjustmentLayerBlackWhiteAdjustmentLayerPhotoFilterLayerChannelMixerLayerInvertAdjustmentLayerPosterizeLayerThresholdLayerSelectiveColorLayer等等。

最后,我们使用PsdImage类的save()方法保存修改后的图像。

本代码提供了如何在Aspose.PSD for 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)