دعم طبقات التعبئة
تعبئة الطبقات بنمط التعبئة
يوضح هذا المقال كيفية ملء الطبقة PSD بنمط التعبئة. نمط* هو صورة أو لون أو ظل أو خط يُستخدم لملء منطقة في صورة. يرجى استخدام فئة Aspose.PSD.FileFormats.Psd.Layers.FillLayer لإضافة النمط في الطبقة PSD. تحمل مقاطع الكود التالية ملفًا PSD، تصل إلى فئة Filllayer وتعيين النمط باستخدام خصائص PatternFillSettings.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
// Add support of Fill layers: Pattern | |
string sourceFileName = dataDir + "PatternFillLayer.psd"; | |
string exportPath = dataDir + "PatternFillLayer_Edited.psd"; | |
double tolerance = 0.0001; | |
var im = (PsdImage)Image.Load(sourceFileName); | |
using (im) | |
{ | |
foreach (var layer in im.Layers) | |
{ | |
if (layer is FillLayer) | |
{ | |
FillLayer fillLayer = (FillLayer)layer; | |
PatternFillSettings fillSettings = (PatternFillSettings)fillLayer.FillSettings; | |
if (fillSettings.HorizontalOffset != -46 || | |
fillSettings.VerticalOffset != -45 || | |
fillSettings.PatternId != "a6818df2-7532-494e-9615-8fdd6b7f38e5" || | |
fillSettings.PatternName != "$$$/Presets/Patterns/OpticalSquares=Optical Squares" || | |
fillSettings.AlignWithLayer != true || | |
fillSettings.Linked != true || | |
fillSettings.PatternHeight != 64 || | |
fillSettings.PatternWidth != 64 || | |
fillSettings.PatternData.Length != 4096 || | |
Math.Abs(fillSettings.Scale - 50) > tolerance) | |
{ | |
throw new Exception("PSD Image was read wrong"); | |
} | |
// Editing | |
fillSettings.Scale = 300; | |
fillSettings.HorizontalOffset = 2; | |
fillSettings.VerticalOffset = -20; | |
fillSettings.PatternData = new int[] | |
{ | |
Color.Red.ToArgb(), Color.Blue.ToArgb(), Color.Blue.ToArgb(), | |
Color.Blue.ToArgb(), Color.Red.ToArgb(), Color.Blue.ToArgb(), | |
Color.Blue.ToArgb(), Color.Blue.ToArgb(), Color.Red.ToArgb() | |
}; | |
fillSettings.PatternHeight = 3; | |
fillSettings.PatternWidth = 3; | |
fillSettings.AlignWithLayer = false; | |
fillSettings.Linked = false; | |
fillSettings.PatternId = Guid.NewGuid().ToString(); | |
fillLayer.Update(); | |
break; | |
} | |
} | |
im.Save(exportPath); | |
} |
هنا مثال آخر يوضح كيف يقوم Aspose.PSD بعرض النمط باستخدام FillLayer وIPatternFillSettings.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
string destName = dataDir + "PatternFillLayer_out.psd"; | |
// Load an existing image into an instance of PsdImage class | |
using (var image = (PsdImage)Image.Load(sourceFile)) | |
{ | |
foreach (var layer in image.Layers) | |
{ | |
if (layer is FillLayer) | |
{ | |
var fillLayer = (FillLayer)layer; | |
var settings = (IPatternFillSettings)fillLayer.FillSettings; | |
settings.HorizontalOffset = -5; | |
settings.VerticalOffset = 12; | |
settings.Scale = 300; | |
settings.Linked = true; | |
settings.PatternData = new int[] | |
{ | |
Color.Black.ToArgb(), Color.Red.ToArgb(), | |
Color.Green.ToArgb(), Color.Blue.ToArgb(), | |
Color.White.ToArgb(), Color.AliceBlue.ToArgb(), | |
Color.Violet.ToArgb(), Color.Chocolate.ToArgb(), | |
Color.IndianRed.ToArgb(), Color.DarkOliveGreen.ToArgb(), | |
Color.CadetBlue.ToArgb(), Color.YellowGreen.ToArgb(), | |
Color.Black.ToArgb(), Color.Azure.ToArgb(), | |
Color.ForestGreen.ToArgb(), Color.Sienna.ToArgb(), | |
}; | |
settings.PatternHeight = 4; | |
settings.PatternWidth = 4; | |
settings.PatternName = "$$$/Presets/Patterns/ColorfulSquare=Colorful Square New\0"; | |
settings.PatternId = Guid.NewGuid().ToString() + "\0"; | |
fillLayer.Update(); | |
break; | |
} | |
} | |
image.Save(destName, new PsdOptions(image)); | |
} |
تعبئة الطبقات بنمط التدرج
يوضح هذا المقال كيفية استخدام التدرج لملء الطبقة PSD. لقد قامت APIs الخاصة بـAspose.PSD بتعريض طرق فعالة وسهلة لتحقيق هذا الهدف. لقد قامت Aspose.PSD بتعريض فئتي GradientColorPoint وGradientTransparencyPoint لإضافة تأثير التدرج إلى طبقة.
الخطوات لملء طبقة PSD بتدرج التعبئة بسيطة كما يلي:
- قم بتحميل ملف PSD كصورة باستخدام الطريقة المصنعة Load التي توفرها فئة Image.
- قم بتعيين خصائص إعدادات FillLayer.
- قم بإنشاء قائمة من ColorPoints بألوان مطلوبة ومواقع الألوان.
- قم بإنشاء قائمة نقاط الشفافية بشفافية مطلوبة وموقع نقطة الشفافية.
- اتصل بطريقة FillLayer.Update.
- احفظ النتائج.
المقطع البرمجي التالي يظهر لك كيفية إضافة تدرج التعبئة لملء طبقة PSD.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir_PSD(); | |
string sourceFileName = dataDir + "ComplexGradientFillLayer.psd"; | |
string outputFile = dataDir + "ComplexGradientFillLayer_output.psd"; | |
var image = (PsdImage)Image.Load(sourceFileName); | |
using (image) | |
{ | |
foreach (var layer in image.Layers) | |
{ | |
if (layer is FillLayer) | |
{ | |
var fillLayer = (FillLayer)layer; | |
if (fillLayer.FillSettings.FillType != FillType.Gradient) | |
{ | |
throw new Exception("Wrong Fill Layer"); | |
} | |
var settings = (IGradientFillSettings)fillLayer.FillSettings; | |
if ( | |
Math.Abs(settings.Angle - 45) > 0.25 || | |
settings.Dither != true || | |
settings.AlignWithLayer != false || | |
settings.Reverse != false || | |
Math.Abs(settings.HorizontalOffset - (-39)) > 0.25 || | |
Math.Abs(settings.VerticalOffset - (-5)) > 0.25 || | |
settings.TransparencyPoints.Length != 3 || | |
settings.ColorPoints.Length != 2 || | |
Math.Abs(100.0 - settings.TransparencyPoints[0].Opacity) > 0.25 || | |
settings.TransparencyPoints[0].Location != 0 || | |
settings.TransparencyPoints[0].MedianPointLocation != 50 || | |
settings.ColorPoints[0].Color != Color.FromArgb(203, 64, 140) || | |
settings.ColorPoints[0].Location != 0 || | |
settings.ColorPoints[0].MedianPointLocation != 50) | |
{ | |
throw new Exception("Gradient Fill was not read correctly"); | |
} | |
settings.Angle = 0.0; | |
settings.Dither = false; | |
settings.AlignWithLayer = true; | |
settings.Reverse = true; | |
settings.HorizontalOffset = 25; | |
settings.VerticalOffset = -15; | |
var colorPoints = new List<IGradientColorPoint>(settings.ColorPoints); | |
var transparencyPoints = new List<IGradientTransparencyPoint>(settings.TransparencyPoints); | |
colorPoints.Add(new GradientColorPoint() | |
{ | |
Color = Color.Violet, | |
Location = 4096, | |
MedianPointLocation = 75 | |
}); | |
colorPoints[1].Location = 3000; | |
transparencyPoints.Add(new GradientTransparencyPoint() | |
{ | |
Opacity = 80.0, | |
Location = 4096, | |
MedianPointLocation = 25 | |
}); | |
transparencyPoints[2].Location = 3000; | |
settings.ColorPoints = colorPoints.ToArray(); | |
settings.TransparencyPoints = transparencyPoints.ToArray(); | |
fillLayer.Update(); | |
image.Save(outputFile, new PsdOptions(image)); | |
break; | |
} | |
} | |
} |
هنا مثال آخر يستخدم GradientFillSettings.GradientType لملء طبقة PSD بتدرج تعبئة. يدعم Aspose.PSD أنواع التدرج التالية من خلال تعداد GradientType:
- GradientType.Linear: في تدرج خطي، يتحول اللون من اللون البدائي إلى النهاية في خط مستقيم.
- GradientType.Radial: في تدرج شعاعي، تنتشر الألوان من نقطة البداية في نمط دائري.
- GradientType.Angle: في تدرج الزاوية، يتحرك التدرج باتجاه عقارب الساعة حول نقطة البداية.
- GradientType.Reflected: في تدرج معكوس، يتم انعكاس اللون على الجانبين من نقطة البداية.
- GradientType.Diamond: تقوم تدرج الماس بإنشاء شكل ماسي من نقطة البداية.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
string fileName = dataDir + "FillLayerGradient.psd"; | |
GradientType[] gradientTypes = new[] | |
{ | |
GradientType.Linear, GradientType.Radial, GradientType.Angle, GradientType.Reflected, GradientType.Diamond | |
}; | |
using (var image = Image.Load(fileName)) | |
{ | |
PsdImage psdImage = (PsdImage)image; | |
FillLayer fillLayer = (FillLayer)psdImage.Layers[0]; | |
GradientFillSettings fillSettings = (GradientFillSettings)fillLayer.FillSettings; | |
foreach (var gradientType in gradientTypes) | |
{ | |
fillSettings.GradientType = gradientType; | |
fillLayer.Update(); | |
psdImage.Save(fileName + "_" + gradientType.ToString() + ".png", new PngOptions() { ColorType = PngColorType.TruecolorWithAlpha }); | |
} | |
} |
دعم خاصية التدرج لطبقة التعبئة
يوضح هذا المقال كيفية تحجيم طبقة FillLayer بالتدرج بالملء باستخدام Aspose.PSD لـ.NET. لهذا الغرض، تمت إضافة خاصية جديدة Scale في IGradientFillSettings.
فيما يلي عرض الكود الذي يظهر كيفية استخدام خاصية Scale.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
using (var image = (PsdImage)Image.Load(dataDir + "FillLayerGradient.psd")) | |
{ | |
// getting a fill layer | |
FillLayer fillLayer = null; | |
foreach (var layer in image.Layers) | |
{ | |
fillLayer = layer as FillLayer; | |
if (fillLayer != null) | |
{ | |
break; | |
} | |
} | |
var settings = fillLayer.FillSettings as IGradientFillSettings; | |
// update scale value | |
settings.Scale = 200; | |
fillLayer.Update(); // Updates pixels data | |
image.Save(dataDir + "scaledImage.png", new PngOptions() { ColorType = PngColorType.TruecolorWithAlpha }); | |
} |
تعبئة الطبقات باللون
يوضح هذا المقال كيفية ملء الطبقة PSD باللون. يرجى استخدام فئة Psd.Layers.FillLayer لإضافة لون إلى طبقة PSD. مقطع الكود التالي يحمل ملف PSD، يصل إلى فئة الطبقة الخاصة بالملء ويعين اللون باستخدام خاصية FillLayer.FillSettings.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
string sourceFileName = dataDir + "ColorFillLayer.psd"; | |
string exportPath = dataDir + "ColorFillLayer_output.psd"; | |
var im = (PsdImage)Image.Load(sourceFileName); | |
using (im) | |
{ | |
foreach (var layer in im.Layers) | |
{ | |
if (layer is FillLayer) | |
{ | |
var fillLayer = (FillLayer)layer; | |
if (fillLayer.FillSettings.FillType != FillType.Color) | |
{ | |
throw new Exception("Wrong Fill Layer"); | |
} | |
var settings = (IColorFillSettings)fillLayer.FillSettings; | |
settings.Color = Color.Red; | |
fillLayer.Update(); | |
im.Save(exportPath); | |
break; | |
} | |
} | |
} |