Підтримка шарів заповнення

Шари заповнення за допомогою заповнення за шаблоном

Ця стаття демонструє, як заповнити шар 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. API 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:

  • Linear:       У лінійному градієнті колір переходить від початкового відтінку до кінця по прямій лінії.
  • Radial:       У радіальному градієнті кольори розходяться від початкової точки у кільцевому візерунку.
  • Angle:        У градієнті під кутом кольори обертаються за годинниковою стрілкою навколо початкової точки.
  • Reflected: У віддзеркаленому градієнті колір відображається на обох сторонах від початкової точки.
  • 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, отримує доступ до класу Fill layer та встановлює колір, використовуючи властивість 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;
}
}
}