Обновяване на PSD Пълнителен слой с помощта на Python

Преглед

За да създадете обикновен слой, можете да използвате функцията create_regular_layer, предоставена в кода. Тази функция приема параметрите за лявата, горната, ширината и височината чрез подаване на параметрите, за да определите позицията и размера на слоя. Тя създава нов слой, задава неговите граници и го пълни с определен цвят.

За създаване на слой за цветово пълнене, можете да използвате метода create_instance на класа FillLayer с параметъра FillType.COLOR. След създаване на слоя за пълнене можете да достъпите неговите настройки за пълнене, използвайки свойството fill_settings и да зададете цвета, използвайки свойството color на класа ColorFillSettings. В предоставения код цветът е зададен на Color.coral. Свойството за ограничаване на слоя за пълнене е зададено на 1, което прави слоя да действа като маска за ограничаване.

За създаване на слой с пълнене с градиент, можете да използвате метода create_instance на класа FillLayer с параметъра FillType.GRADIENT. Подобно на слоя за цветово пълнене, можете да достъпите настройките за пълнене, използвайки свойството fill_settings и да зададете цветовите точки за градиента и точките за прозрачност. В предоставения код цветовите точки за градиента се определят чрез класа GradientColorPoint, а точките за прозрачност се определят чрез класа GradientTransparencyPoint. Също така свойството за ограничаване на слоя за пълнене е зададено на 1.

За създаване на слой с пълнене с шаблон, можете да използвате метода create_instance на класа FillLayer с параметъра FillType.PATTERN. Отново можете да достъпите настройките за пълнене, използвайки свойството fill_settings и да зададете данните за шаблона и други свойства. В предоставения код данните за шаблона се определят чрез класа PatternFillSettings, а свойството за ограничаване е зададено на 1.

След като създадете слоевете за пълнене, можете да ги добавите към изображението PSD чрез метода add_layer. Можете също така да указвате името за показване и други свойства за всеки слой за пълнене.

Накрая можете да запазите изображението PSD и съответното PNG изображение, използвайки предоставения код. Опциите за PNG са зададени за използване на truecolor с алфа за прозрачност.

Моля, проверете пълния пример.

Пример

def create_regular_layer(left, top, width, height):
layer = Layer()
layer.left = left
layer.top = top
layer.right = left + width
layer.bottom = top + height
color = Color.aqua.to_argb()
test_data = [color] * width * height
layer.save_argb_32_pixels(layer.bounds, test_data)
return layer
def FillLayerManipulationTest():
outputPng = "all_fill_layers.png"
outputPsd = "all_fill_layers.psd"
with PsdImage(100, 100) as image:
layer1 = create_regular_layer(0, 0, 50, 50)
image.add_layer(layer1)
colorFillLayer = FillLayer.create_instance(FillType.COLOR)
colorFillSettings = cast(ColorFillSettings, colorFillLayer.fill_settings)
colorFillSettings.color = Color.coral
colorFillLayer.clipping = 1
colorFillLayer.display_name = "Color Fill Layer"
image.add_layer(colorFillLayer)
layer2 = create_regular_layer(50, 0, 50, 50)
image.add_layer(layer2)
gradientColorPoints = [
GradientColorPoint(Color.red, 2048, 50),
GradientColorPoint(Color.green, 3072, 50),
GradientColorPoint(Color.blue, 4096, 50)
]
tp1 = GradientTransparencyPoint()
tp1.location = 0
tp1.median_point_location = 50
tp1.opacity = 128
tp2 = GradientTransparencyPoint()
tp2.location = 2048
tp2.median_point_location = 50
tp2.opacity = 176
gradientTransparencyPoints = [tp1, tp2]
gradientFillLayer = FillLayer.create_instance(FillType.GRADIENT)
gradientFillLayer.display_name = "Gradient Fill Layer"
gradientFillSettings = cast(GradientFillSettings, gradientFillLayer.fill_settings)
gradientFillSettings.color_points = gradientColorPoints
gradientFillSettings.angle = -45
gradientFillSettings.transparency_points = gradientTransparencyPoints
gradientFillLayer.clipping = 1
image.add_layer(gradientFillLayer)
layer3 = create_regular_layer(0, 50, 50, 50)
image.add_layer(layer3)
patternFillLayer = FillLayer.create_instance(FillType.PATTERN)
patternFillLayer.display_name = "Pattern Fill Layer"
patternFillLayer.opacity = 50
patternFillLayer.clipping = 1
patternFillSettings = cast(PatternFillSettings, patternFillLayer.fill_settings)
patternFillSettings.pattern_data = [
Color.red.to_argb(), Color.transparent.to_argb(), Color.transparent.to_argb(),
Color.transparent.to_argb(), Color.red.to_argb(), Color.transparent.to_argb(),
Color.transparent.to_argb(), Color.transparent.to_argb(), Color.red.to_argb()
]
patternFillSettings.pattern_width = 3
patternFillSettings.pattern_height = 3
image.add_layer(patternFillLayer)
pngOpt = PngOptions()
pngOpt.color_type = PngColorType.TRUECOLOR_WITH_ALPHA
image.save(outputPng, pngOpt)
image.save(outputPsd)