تلاعب طبقة الشكل في Aspose.PSD لـ C#

نظرة عامة

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

تطبيقات طبقات الشكل في Aspose.PSD لـ C#:

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

  • تعديل الأشكال الحالية: تُسمح طبقات الشكل بتعديل خصائص الأشكال الحالية. قم بتغيير الوضعية، الحجم، الدوران، وسمات أخرى لتحقيق التأثير البصري المطلوب. قم بتغيير الحجم، الدوران، أو التفويت (Skew) للأشكال لإنشاء تأثيرات متنوعة.

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

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

للمزيد من الأمثلة التفصيلية والمعلومات، يرجى الرجوع إلى توثيق Aspose.PSD لـ C#.

مثال

// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET
string sourceFileName = "ShapeLayerTest.psd";
string updatedOutput = "ShapeLayerTest_Res_up.psd";
using (PsdImage im = (PsdImage)Image.Load(sourceFileName))
{
foreach (var layer in im.Layers)
{
// Finding Shape Layer
if (layer is ShapeLayer shapeLayer)
{
var path = shapeLayer.Path;
IPathShape[] pathShapes = path.GetItems();
List<BezierKnotRecord> knotsList = new List<BezierKnotRecord>();
foreach (var pathShape in pathShapes)
{
var knots = pathShape.GetItems();
knotsList.AddRange(knots);
}
// Change Path Shape properties
PathShape newShape = new PathShape();
BezierKnotRecord bn1 = new BezierKnotRecord
{
IsLinked = true,
Points = new Point[]
{
PointFToResourcePoint(new PointF(20, 100), shapeLayer.Container.Size),
PointFToResourcePoint(new PointF(20, 100), shapeLayer.Container.Size),
PointFToResourcePoint(new PointF(20, 100), shapeLayer.Container.Size)
}
};
BezierKnotRecord bn2 = new BezierKnotRecord
{
IsLinked = true,
Points = new Point[]
{
PointFToResourcePoint(new PointF(20, 490), shapeLayer.Container.Size),
PointFToResourcePoint(new PointF(20, 490), shapeLayer.Container.Size),
PointFToResourcePoint(new PointF(20, 490), shapeLayer.Container.Size)
}
};
BezierKnotRecord bn3 = new BezierKnotRecord
{
IsLinked = true,
Points = new Point[]
{
PointFToResourcePoint(new PointF(490, 20), shapeLayer.Container.Size),
PointFToResourcePoint(new PointF(490, 20), shapeLayer.Container.Size),
PointFToResourcePoint(new PointF(490, 20), shapeLayer.Container.Size)
}
};
List<BezierKnotRecord> bezierKnots = new List<BezierKnotRecord> { bn1, bn2, bn3 };
newShape.SetItems(bezierKnots.ToArray());
List<IPathShape> newShapes = new List<IPathShape>(pathShapes)
{
newShape
};
path.SetItems(newShapes.ToArray());
shapeLayer.Update();
im.Save(updatedOutput);
break;
}
}
}
Point PointFToResourcePoint(PointF point, Size imageSize)
{
const int ImgToPsdRatio = 256 * 65535;
return new Point((int)(point.Y * (ImgToPsdRatio / imageSize.Height)),
(int)(point.X * (ImgToPsdRatio / imageSize.Width)));
}

للمزيد من المعلومات التفصيلية والأمثلة، يرجى زيارة توثيق Aspose.PSD لـ C#.