Aspose.PSD for Python でのShape Layer Manipulation
概要
Shape LayersはAspose.PSD for Pythonの重要な機能であり、PSDイメージ内でベクトル形状を作成および操作することができます。この記事では、Aspose.PSDライブラリを使用してShape Layerを操作する方法について探求します。Shape Layerへのアクセス、パス形状の変更、画像の更新などのトピックをカバーします。
以下は、Aspose.PSD for PythonでShape Layersのさらなる活用例です:
カスタム形状の作成: Shape Layersを使用すると、PSDイメージ内でカスタムベクトル形状を作成できます。ベジエ曲線やアンカーポイントの一連の指定によって、形状のパスを定義できます。これにより、多角形、星、カスタムロゴなど、任意の複雑さの形状を作成できます。
既存形状の修正: Shape Layersを使用すると、既存形状のプロパティを変更することができます。形状の位置、サイズ、回転、および他の属性を変更して、目的のビジュアル効果を得ることができます。例えば、形状のサイズを変更して大きくしたり小さくしたり、任意の角度に回転させたり、透視効果を作成するために傾けたりすることができます。
スタイルとエフェクトの適用: Shape Layersでは、形状に適用できるさまざまなスタイルやエフェクトがサポートされています。グラデーション、ストローク、シャドウなどの視覚効果を追加して、形状の外観を向上させることができます。これにより、Aspose.PSD for Pythonを使用して視覚的に魅力的なデザインやイラストを作成する能力が得られます。
形状の結合: Shape Layersを使用すると、複数の形状を組み合わせてより複雑な構成物を作成することができます。形状を組み合わせて複合形状を作成したり、Boolean演算を使用して形状を引き算、交差、または除外したりすることができます。これにより、簡単な形状を創造的な方法で組み合わせることで、複雑なデザインを作成することができます。
詳細な例はこちらをご確認ください。
例
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 |