使用调整图层增强PSD
概览
在本文中,我们将探讨在Aspose.PSD for Python中编辑调整图层。调整图层是图像编辑中的一个强大功能,允许您对图像进行非破坏性更改。Aspose.PSD提供了一套全面的调整图层类,您可以使用这些类修改图像的各个方面。
为了演示调整图层的编辑,我们将使用一个代码示例,在页面的末尾加载一个PSD图像并对其图层应用不同的调整。
在下面的代码示例中,我们首先使用PsdImage.load()方法加载PSD图像。然后设置保存输出PNG文件的选项。PngOptions类允许我们指定输出图像的颜色类型。
接下来,我们遍历PSD图像中的每个图层,并使用is_assignable()方法检查其类型。如果图层属于特定类型,我们使用cast()方法将其转换为该类型,并应用所需的调整。例如,我们调整BrightnessContrastLayer的亮度和对比度,修改LevelsLayer的级别,为CurvesLayer添加曲线点,等等。
您可以添加其他代码以对其各自的图层应用其他调整。Aspose.PSD提供了一系列调整图层类,例如ExposureLayer,HueSaturationLayer,ColorBalanceAdjustmentLayer,BlackWhiteAdjustmentLayer,PhotoFilterLayer,ChannelMixerLayer,InvertAdjustmentLayer,PosterizeLayer,ThresholdLayer,SelectiveColorLayer等等。
最后,我们使用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) |