Wsparcie warstw wypełnienia
Warstwy wypełnienia wzorem
Ten artykuł demonstruje, jak wypełnić warstwę PSD wzorem. Wzór jest obrazem, kolorem, cieniem lub linią używaną do wypełnienia obszaru obrazu. W celu dodania wzoru do warstwy PSD należy skorzystać z klasy Aspose.PSD.FileFormats.Psd.Layers.FillLayer. Poniższy fragment kodu wczytuje plik PSD, uzyskuje dostęp do klasy Filllayer oraz ustawia wzór za pomocą właściwości 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); | |
} |
Oto kolejny przykład, który demonstruje, jak Aspose.PSD renderuje wzór, korzystając z klas FillLayer oraz 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)); | |
} |
Warstwy wypełnienia gradientem
Ten artykuł demonstruje użycie wypełnienia gradientowego do wypełnienia warstwy PSD. Interfejsy API Aspose.PSD udostępniają efektywne i łatwe w użyciu metody, aby osiągnąć ten cel. Aspose.PSD udostępnia klasy GradientColorPoint oraz GradientTransparencyPoint do dodawania efektu gradientu do warstwy.
`Kroki do wypełnienia warstwy PSD gradientowym wypełnieniem są takie proste, jak poniżej:
- Wczytaj plik PSD jako obraz, korzystając z metody fabrycznej Load udostępnianej przez klasę Image.
- Skonfiguruj właściwości ustawień obiektu FillLayer.
- Utwórz listę ColorPoints z wymaganymi kolorami i pozycjami kolorów.
- Utwórz listę punktów transparentności z wymaganą przezroczystością i pozycją punktu transparentności.
- Wywołaj metodę FillLayer.Update.
- Zapisz wyniki.
Poniższy fragment kodu pokazuje, jak dodać wypełnienie gradientowe do warstwy 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; | |
} | |
} | |
} |
Oto kolejny przykład, który wykorzystuje właściwość GradientFillSettings.GradientType do wypełnienia warstwy PSD gradientowym wypełnieniem. Aspose.PSD obsługuje następujące typy gradientu poprzez wyliczenie GradientType:
- GradientType.Linear: W linearnym gradientzie przejście kolorów odbywa się prosto od początkowego odcienia do końca.
- GradientType.Radial: W radialnym gradientzie kolory rozchodzą się od punktu początkowego w sposób okrężny.
- GradientType.Angle: Gradient kątowy obraca się przeciwnie do ruchu wskazówek zegara wokół punktu początkowego.
- GradientType.Reflected: W odbitym gradientcie kolor jest lustrzany po obu stronach punktu początkowego.
- GradientType.Diamond: Gradient diamentowy tworzy kształt diamentu od punktu początkowego.
// 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 }); | |
} | |
} |
Wsparcie właściwości skalowania warstwy gradientowego wypełnienia
Ten artykuł demonstruje, jak skalować warstwę FillLayer z wypełnieniem gradientowym przy użyciu Aspose.PSD dla .NET. W tym celu dodano nową właściwość Scale w IGradientFillSettings.
Poniżej znajduje się demonstracja kodu pokazująca, jak korzystać z właściwości 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 }); | |
} |
Warstwy wypełnione kolorem
Ten artykuł demonstruje, jak wypełnić warstwę PSD kolorem. Proszę skorzystać z klasy Psd.Layers.FillLayer do dodania koloru w warstwie PSD. Poniższy fragment kodu wczytuje plik PSD, uzyskuje dostęp do klasy Fill layer oraz ustawia kolor korzystając z właściwości 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; | |
} | |
} | |
} |