تعديل طبقة الشكل في Aspose.PSD للبايثون

نظرة عامة

طبقات الأشكال هي ميزة مهمة في Aspose.PSD للبايثون التي تتيح لك إنشاء وتلاعب بأشكال الفيكتور داخل صورة PSD. في هذا المقال، سنتعرف على كيفية تلاعب طبقة الشكل باستخدام مكتبة Aspose.PSD. سنغطي مواضيع مثل الوصول لطبقة الشكل، تعديل أشكال المسار وتحديث الصورة.

وهنا بعض التطبيقات الأخرى لطبقات الأشكال في Aspose.PSD للبايثون:

إنشاء أشكال مخصصة: تسمح طبقات الأشكال لك بإنشاء أشكال فيكتور مخصصة داخل صورة PSD. يمكنك تعريف مسار الشكل عن طريق تحديد سلسلة من المنحنيات بيزير ونقاط الربط. هذا يمنحك المرونة لإنشاء أشكال ذات أي تعقيد، مثل الأضلاع العديدة، النجوم، أو حتى الشعارات المخصصة.

تعديل الأشكال الحالية: تسمح أطباق الأشكال أيضًا لك بتعديل خصائص الأشكال الحالية. يمكنك تغيير الموضع، الحجم، الدوران، وخصائص أخرى للشكل لتحقيق التأثير البصري المطلوب. على سبيل المثال، يمكنك تغيير حجم شكل ما لجعله أكبر أو أصغر، تدويره لأي زاوية، أو حتى ميله لإنشاء تأثيرات ثلاثية الأبعاد.

تطبيق الأنماط والتأثيرات: تدعم طبقات الأشكال مجموعة متنوعة من الأنماط والتأثيرات التي يمكن تطبيقها على الأشكال. يمكنك إضافة تدرجات، وحدود، وظلال، وتأثيرات بصرية أخرى لتعزيز مظهر الأشكال. هذا يمنحك القدرة على إنشاء تصاميم ورسوم توضيحية مذهلة بصريًا باستخدام Aspose.PSD للبايثون.

دمج الأشكال: مع طبقات الأشكال، يمكنك دمج أشكال متعددة لإنشاء تراكيب أكثر تعقيدًا. يمكنك دمج الأشكال معًا لإنشاء أشكال مركبة أو استخدام العمليات البولية لطرح، تقاطع، أو استثناء الأشكال من بعضها البعض. هذا يتيح لك إنشاء تصاميم معقدة من خلال دمج أشكال بسيطة بطرق إبداعية.

يرجى التحقق من المثال الكامل.

مثال

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