การสนับสนุน Fill Layers

การสนับสนุน Fill Layers ด้วยการเติมสี

บทความนี้สาธิตวิธีการเติมเลเยอร์ PSD ด้วยสี โปรดใช้ Aspose.PSD.FileFormats.Psd.Layers.FillLayer เพื่อเพิ่มสีในเลเยอร์ PSD ซึ่งโค้ดตัวอย่างด้านล่างโหลดไฟล์ PSD, เข้าถึงคลาส Filllayer และตั้งค่าสีโดยใช้คุณสมบัติ FillLayer.FillSettings

String dataDir = Utils.getDataDir(ColorFillLayer.class) + "PSD/";
String sourceFileName = dataDir + "ColorFillLayer.psd";
String exportPath = dataDir + "ColorFillLayer_output.psd";
try (PsdImage im = (PsdImage) Image.load(sourceFileName)) {
for (int i = 0; i < im.getLayers().length; i++) {
if (im.getLayers()[i] instanceof FillLayer) {
FillLayer fillLayer = (FillLayer) im.getLayers()[i];
if (fillLayer.getFillSettings().getFillType() != FillType.Color) {
throw new Exception("Wrong Fill Layer");
}
IColorFillSettings settings = (IColorFillSettings) fillLayer.getFillSettings();
settings.setColor(Color.getRed());
fillLayer.update();
im.save(exportPath);
break;
}
}
}

การสนับสนุน Fill Layers ด้วยการเติมแบบ Gradient

บทความนี้สาธิตการใช้งานการเติมแบบ Gradient เพื่อเติม PSD layer Aspose.PSD APIs ประกาศเมทอดที่มีประสิทธิภาพและใช้ง่ายเพื่อบรรลุวัตถุประสงค์นี้ Aspose.PSD ได้เปิดเผยคลาส GradientColorPoint และ GradientTransparencyPoint เพื่อเพิ่มเอฟเฟกต์ Gradient เข้าไปในเลเยอร์

ขั้นตอนในการเติม PSD layer ด้วยการเติมแบบ Gradient ง่ายมากดังต่อไปนี้:

  • โหลดไฟล์ PSD เป็นภาพโดยใช้เมทอด Load ที่เปิดเผยโดย Image class
  • กำหนดค่าคุณสมบัติของออบเจกต์ FillLayer
  • สร้างรายการ ColorPoints พร้อมกับสีที่ต้องการและตำแหน่งของสี
  • สร้างรายการ transparencyPoints พร้อมกับความทึกทึนที่ต้องการและตำแหน่งของจุดความทึกทึน
  • เรียกเมทอด FillLayer.Update
  • บันทึกผลลัพธ์

โค้ดตัวอย่างด้านล่างแสดงวิธีการเพิ่ม Gradient fill เข้าไปในเลเยอร์ PSD

String dataDir = Utils.getDataDir(GradientFillLayer.class) + "PSD/";
String sourceFileName = dataDir + "ComplexGradientFillLayer.psd";
String outputFile = dataDir + "ComplexGradientFillLayer_output.psd";
try (PsdImage image = (PsdImage) Image.load(sourceFileName)) {
for (int i = 0; i < image.getLayers().length; i++) {
if (image.getLayers()[i] instanceof FillLayer) {
FillLayer fillLayer = (FillLayer) image.getLayers()[i];
if (fillLayer.getFillSettings().getFillType() != FillType.Gradient) {
throw new Exception("Wrong Fill Layer");
}
IGradientFillSettings settings = (IGradientFillSettings) fillLayer.getFillSettings();
if (
Math.abs(settings.getAngle() - 45) > 0.25 ||
settings.getDither() != true ||
settings.getAlignWithLayer() != false ||
settings.getReverse() != false ||
Math.abs(settings.getHorizontalOffset() - (-39)) > 0.25 ||
Math.abs(settings.getVerticalOffset() - (-5)) > 0.25 ||
settings.getTransparencyPoints().length != 3 ||
settings.getColorPoints().length != 2 ||
Math.abs(100.0 - settings.getTransparencyPoints()[0].getOpacity()) > 0.25 ||
settings.getTransparencyPoints()[0].getLocation() != 0 ||
settings.getTransparencyPoints()[0].getMedianPointLocation() != 50 ||
settings.getColorPoints()[0].getColor() != Color.fromArgb(203, 64, 140) ||
settings.getColorPoints()[0].getLocation() != 0 ||
settings.getColorPoints()[0].getMedianPointLocation() != 50) {
throw new Exception("Gradient Fill was not read correctly");
}
settings.setAngle(0.0);
settings.setDither(false);
settings.setAlignWithLayer(true);
settings.setReverse(true);
settings.setHorizontalOffset(25);
settings.setVerticalOffset(-15);
List<IGradientColorPoint> colorPoints = new ArrayList<IGradientColorPoint>();
Collections.addAll(colorPoints, settings.getColorPoints());
List<IGradientTransparencyPoint> transparencyPoints = new ArrayList<IGradientTransparencyPoint>();
Collections.addAll(transparencyPoints, settings.getTransparencyPoints());
GradientColorPoint gr1 = new GradientColorPoint();
gr1.setColor(Color.getViolet());
gr1.setLocation(4096);
gr1.setMedianPointLocation(75);
colorPoints.add(gr1);
colorPoints.get(1).setLocation(3000);
GradientTransparencyPoint gr2 = new GradientTransparencyPoint();
gr2.setOpacity(80.0);
gr2.setLocation(4096);
gr2.setMedianPointLocation(25);
transparencyPoints.add(gr2);
transparencyPoints.get(2).setLocation(3000);
settings.setColorPoints(colorPoints.toArray(new IGradientColorPoint[0]));
settings.setTransparencyPoints(transparencyPoints.toArray(new IGradientTransparencyPoint[0]));
fillLayer.update();
image.save(outputFile, new PsdOptions(image));
break;
}
}
}

เอฟเฟกต์ Stroke ด้วยการเติมสี

บทความนี้สาธิตวิธีการสร้างเอฟเฟกต์ Stroke ด้วยการเติมสี การใช้เอฟเฟกต์ Stroke เพื่อเพิ่มเส้นและเส้นขอบเข้าไปในเลเยอร์และรูปทรง สามารถใช้สร้างเส้นสีทึบ, เฉดเทาสีสวยงาม, และขอบลวดลาม

ขั้นตอนในการสร้างเอฟเฟกต์ Stroke ด้วยการเติมสี ง่ายมากดังต่อไปนี้:

  • กำหนดคุณสมบัติ LoadEffectsResource
  • โหลดไฟล์ PSD เป็นภาพโดยใช้เมทอด Load ที่เปิดเผยโดย Image class และกำหนด PsdLoadOptions
  • กำหนดค่าคุณสมบัติของ ColorFillSetting
  • บันทึกผลลัพธ์

โค้ดตัวอย่างด้านล่างแสดงวิธีการสร้างเอฟเฟกต์ Stroke ด้วยการเติมสี

String dataDir = Utils.getDataDir(StrokeEffectWithColorFill.class) + "PSD/";
// Implement rendering of Stroke effect with Color Fill for export
String sourceFileName = dataDir + "StrokeComplex.psd";
String exportPath = dataDir + "StrokeComplexRendering.psd";
String exportPathPng = dataDir + "StrokeComplexRendering.png";
PsdLoadOptions loadOptions = new PsdLoadOptions();
loadOptions.setLoadEffectsResource(true);
try (PsdImage im = (PsdImage) Image.load(sourceFileName, loadOptions)) {
for (int i = 0; i < im.getLayers().length; i++) {
StrokeEffect effect = (StrokeEffect) im.getLayers()[i].getBlendingOptions().getEffects()[0];
ColorFillSettings settings = (ColorFillSettings) effect.getFillSettings();
settings.setColor(Color.getDeepPink());
}
// Save psd
im.save(exportPath, new PsdOptions());
PngOptions option = new PngOptions();
option.setColorType(PngColorType.TruecolorWithAlpha);
// Save png
im.save(exportPathPng, option);
}