Aspose.PSD를 이용한 Python에서의 Shape Layer 조작
개요
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 |