Aspose.PSD를 이용한 Python에서의 Shape Layer 조작

Contents
[ ]

개요

Shape Layers는 Aspose.PSD for Python에서 중요한 기능으로, PSD 이미지 내에서 벡터 모양을 생성하고 조작할 수 있게 합니다. 이 문서에서는 Aspose.PSD 라이브러리를 사용하여 Shape Layer를 조작하는 방법을 살펴봅니다. 모양 레이어에 접근하는 방법, 경로 모양 수정, 이미지 업데이트 등의 주제를 다룰 것입니다.

다음은 Aspose.PSD for Python에서 Shape Layers를 사용하는 몇 가지 예시입니다:

사용자 정의 모양 생성: Shape Layers를 사용하면 PSD 이미지 내에서 사용자 정의 벡터 모양을 생성할 수 있습니다. 베지에 곡선과 앵커 포인트를 지정하여 모양의 경로를 정의할 수 있습니다. 이를 통해 다각형, 별모양 또는 사용자 지정 로고와 같은 어떤 복잡도의 모양도 만들 수 있습니다.

기존 모양 수정: Shape Layers를 사용하면 기존 모양의 속성을 수정할 수 있습니다. 모양의 위치, 크기, 회전 및 다른 속성을 변경하여 원하는 시각적 효과를 얻을 수 있습니다. 예를 들어, 모양의 크기를 늘리거나 줄이거나, 원하는 각도로 회전하거나, 웏근히기를 추가하여 원근 효과를 만들 수 있습니다.

스타일과 효과 적용: Shape Layers는 모양에 적용할 수 있는 다양한 스타일과 효과를 지원합니다. 그러므로 모양의 외관을 향상시키기 위해 그라디언트, 스트로크, 그림자 및 다른 시각적 효과를 추가할 수 있습니다. 이를 통해 Aspose.PSD for Python을 사용하여 시각적으로 뛰어나고 멋진 디자인과 일러스트레이션을 만들 수 있습니다.

모양 결합: Shape Layers를 사용하면 여러 모양을 결합하여 더 복잡한 구성품을 만들 수 있습니다. 모양을 함께 병합하여 복합 모양을 만들거나, 부분적으로, 교차적으로 또는 제외하여 모양을 조작하는 부울 연산을 활용할 수 있습니다. 이를 통해 간단한 모양들을 창의적인 방법으로 결합하여 복잡한 디자인을 만들 수 있습니다.

전체 예시를 확인해 주십시오.

예제

from aspose.psd import Point, Image, PointF
from aspose.psd.fileformats.core.vectorpaths import BezierKnotRecord
from aspose.psd.fileformats.psd import PsdImage
from aspose.psd.fileformats.psd.layers import ShapeLayer
from aspose.psd.fileformats.psd.layers.layerresources import PathShape
from aspose.pycore import cast, is_assignable
def PointFToResourcePoint(point, imageSize):
ImgToPsdRatio = 256 * 65535
return Point(int(point.y * (ImgToPsdRatio / imageSize.height)), int(point.x * (ImgToPsdRatio / imageSize.width)))
def ShapeLayerPathManipulationTest():
sourceFileName = "ShapeLayerTest.psd"
originalOutput = "ShapeLayerTest_Res_or.psd"
updatedOutput = "ShapeLayerTest_Res_up.psd"
with Image.load(sourceFileName) as image:
im = cast(PsdImage, image)
im.save(originalOutput)
for layer in im.layers:
# Finding Shape Layer
if is_assignable(layer, ShapeLayer):
shapeLayer = cast(ShapeLayer, layer)
path = shapeLayer.path
pathShapes = path.get_items()
knotsList = []
for pathShape in pathShapes:
knots = pathShape.get_items()
knotsList.extend(knots)
# Change Path Shape properties
newShape = PathShape()
bn1 = BezierKnotRecord()
bn1.is_linked = True
bn1.points = [
PointFToResourcePoint(PointF(20, 100), shapeLayer.container.size),
PointFToResourcePoint(PointF(20, 100), shapeLayer.container.size),
PointFToResourcePoint(PointF(20, 100), shapeLayer.container.size),
]
bn2 = BezierKnotRecord()
bn2.is_linked = True
bn2.points = [
PointFToResourcePoint(PointF(20, 490), shapeLayer.container.size),
PointFToResourcePoint(PointF(20, 490), shapeLayer.container.size),
PointFToResourcePoint(PointF(20, 490), shapeLayer.container.size),
]
bn3 = BezierKnotRecord()
bn3.is_linked = True
bn3.points = [
PointFToResourcePoint(PointF(490, 20), shapeLayer.container.size),
PointFToResourcePoint(PointF(490, 20), shapeLayer.container.size),
PointFToResourcePoint(PointF(490, 20), shapeLayer.container.size),
]
bezierKnots = [bn1, bn2, bn3]
newShape.set_items(bezierKnots)
newShapes = list(pathShapes)
newShapes.append(newShape)
pathShapeNew = newShapes
path.set_items(pathShapeNew)
shapeLayer.update()
im.save(updatedOutput)
break