Робота з градієнтом у файлі PS | Java

Додайте градієнт у документ PS

У цій статті ми розглянемо способи використання градієнта в документах PS.

Градієнт - це плавний перехід одного кольору в інший. Він використовується для того, щоб зробити намальовані зображення більш реалістичними. Оскільки градієнт є різновидом фарби, очікується, що в Java він реалізований як підклас java.awt.Paint. Насправді платформа Java має дві такі фарби:

Існує також java.awt.GradientPaint, але це лише окремий випадок java.awt.LinearGradientPaint.

Щоб установити фарбу або обведення в PsDocument, ми повинні передати об’єкт класу java.awt.Paint для малювання та об’єкт java.awt.Stroke для обведення в відповідні методи. Бібліотека Aspose.Page для Java обробляє всі важливі класи, реалізовані java.awt.Paint, які пропонуються платформою Java. Це java.awt.Color, java.awt.TexturePaint, java.awt.LinearGradientPaint і java.awt.RadialGradientPaint. Колір обведення в Java призначається окремо від властивостей обведення в об’єкті java.awt.Stroke із повторним використанням java.awt.Paint. Таким чином, бібліотека Aspose.Page для Java також може використовувати повний набір реалізацій paint також для малювання ліній і окреслення форм і тексту.

Щоб малювати графічні об’єкти градієнтом у бібліотеці Aspose.Page для Java, необхідно створити java.awt.LinearGradientPaint або java.awt.RadialGradientPaint і передати його в setPaint( ) або один із методів fillText() або fillAndStrokeText(), які приймають java.awt.Paint як параметр.

Щоб контурувати графічні об’єкти з градієнтом у Aspose.Page для бібліотеки Java, хтось має передати java.awt.LinearGradientPaint або java.awt.RadialGradientPaint також у setPaint() або один із методів outlineText() або fillAndStrokeText(), який приймає фарбу обведення як параметр.

У наведеному нижче прикладі ми демонструємо, як заповнити фігуру та текст і окреслити текст градієнтом.

Алгоритм розмальовування графічних об’єктів градієнтом у новому документі PS включає наступні кроки:

  1. Створіть вихідний потік для отриманого файлу PS.
  2. Створіть PsSaveOptions.
  3. Створіть PsDocument із уже створеним вихідним потоком і параметрами збереження.
  4. Створіть необхідний графічний шлях або шрифт в залежності від того, який об’єкт ми збираємося заповнити або окреслити.
  5. Створіть об’єкт java.awt.LinearGradientPaint або java.awt.RadialGradientPaint в залежності від бажаної форми градієнта.
  6. Встановіть на цьому пензлі необхідну трансформацію.
  7. Встановіть кисть градієнта як поточну фарбу в PsDocument
  8. Заповніть графічний контур поточною фарбою або заповніть текст. Якщо ми використовуємо один із методів заповнення тексту, який приймає java.awt.Paint як параметр, попередній пункт можна проігнорувати.
  9. Закрийте сторінку.
  10. Збережіть документ.

Якщо нам потрібно обведення (контур) графічних об’єктів із градієнтом замість останніх 4 точок, наступним буде:

  1. Встановіть градієнт як поточну фарбу в PsDocument.
  2. Створіть об’єкт java.awt.Stroke.
  3. Встановіть цей штрих як поточний штрих у PsDocument.
  4. Окресліть контур графіки поточним штрихом або обведіть текст. Якщо ми використовуємо один із методів виділення тексту, який приймає java.awt.Stroke як параметр, попередній пункт можна проігнорувати.
  5. Закрийте сторінку.
  6. Збережіть документ.

Ми пропонуємо 5 окремих фрагментів коду, які демонструють використання різних градієнтів.

У цьому фрагменті коду ми створюємо горизонтальний лінійний градієнт із двох кольорів, заповнюємо прямокутник, заповнюємо текст, обводимо текст цим градієнтом.

 1//Create an output stream for PostScript document
 2FileOutputStream outPsStream = new FileOutputStream(dataDir + "HorizontalGradient_outPS.ps");
 3//Create save options with A4 size
 4PsSaveOptions options = new PsSaveOptions();
 5
 6//Create new PS Document with the page opened
 7PsDocument document = new PsDocument(outPsStream, options, false);
 8
 9//Create a rectangle
10Rectangle2D.Float rectangle = new Rectangle2D.Float(200, 100, 200, 100);
11
12//Create horizontal linear gradient paint. Scale components in the transform must be equal to width і heigh of the rectangle.
13//Translation components are offsets of the rectangle.
14LinearGradientPaint paint = new LinearGradientPaint(new Point2D.Float(0, 0), new Point2D.Float(200, 100),
15		new float [] {0, 1}, new Color [] {new Color(0, 0, 0, 150), new Color(40, 128, 70, 50)},
16		MultipleGradientPaint.CycleMethod.NO_CYCLE, MultipleGradientPaint.ColorSpaceType.SRGB,
17		new AffineTransform(200, 0, 0, 100, 200, 100));
18
19//Set paint
20document.setPaint(paint);
21//Fill the rectangle
22document.fill(rectangle);
23
24//Fill a text with the gradient
25Font font = new Font("Arial", Font.BOLD, 96);
26document.fillAndStrokeText("ABC", font, 200, 300, paint, Color.BLACK, new BasicStroke(2));
27
28//Stroke a text with the gradient
29document.outlineText("ABC", font, 200, 400, paint, new BasicStroke(5));
30
31//Close current page
32document.closePage();
33//Save the document
34document.save();

Результат виконання цього коду виглядає як

Горизонтальний градієнт

У цьому фрагменті коду ми створюємо вертикальний лінійний градієнт із 5 кольорів і заповнюємо цим градієнтом прямокутник.

 1//Create an output stream for PostScript document
 2FileOutputStream outPsStream = new FileOutputStream(dataDir + "VerticalGradient_outPS.ps");
 3//Create save options with A4 size
 4PsSaveOptions options = new PsSaveOptions();
 5
 6//Create new PS Document with the page opened
 7PsDocument document = new PsDocument(outPsStream, options, false);
 8
 9//Create a rectangle
10Rectangle2D.Float rectangle = new Rectangle2D.Float(200, 100, 200, 100);
11
12//Create arrays of colors і fractions for the gradient.
13Color[] colors = { Color.RED, Color.GREEN, Color.BLUE, Color.ORANGE, new Color(85,107,47) };
14float[] fractions = { 0.0f, 0.1873f, 0.492f, 0.734f, 1.0f };
15
16//Create the gradient transform. Scale components in the transform must be equal to width і heigh of the rectangle.
17//Translation components are offsets of the rectangle.
18AffineTransform transform = new AffineTransform(200, 0, 0, 100, 200, 100);
19//Rotate the gradient on 90 degrees around an origin
20transform.rotate(90 * (Math.PI / 180));
21
22//Create vertical linear gradient paint.
23LinearGradientPaint paint = new LinearGradientPaint(new Point2D.Float(0, 0), new Point2D.Float(200, 100),
24		fractions, colors, MultipleGradientPaint.CycleMethod.NO_CYCLE, MultipleGradientPaint.ColorSpaceType.SRGB,
25		transform);
26
27//Set paint
28document.setPaint(paint);
29//Fill the rectangle
30document.fill(rectangle);
31
32//Close current page
33document.closePage();
34//Save the document
35document.save();

Ось і результат

Вертикальний градієнт

У цьому фрагменті коду ми створюємо діагональний лінійний градієнт із 2 кольорів і заповнюємо цим градієнтом прямокутник.

 1//Create an output stream for PostScript document
 2FileOutputStream outPsStream = new FileOutputStream(dataDir + "DiagonalGradient_outPS.ps");
 3//Create save options with A4 size
 4PsSaveOptions options = new PsSaveOptions();
 5
 6// Create new PS Document with the page opened
 7PsDocument document = new PsDocument(outPsStream, options, false);
 8
 9//Create a rectangle
10Rectangle2D.Float rectangle = new Rectangle2D.Float(200, 100, 200, 100);
11
12//Create the gradient transform. Scale components in the transform must be equal to width і heigh of the rectangle.
13//Translation components are offsets of the rectangle.
14AffineTransform transform = new AffineTransform(200, 0, 0, 100, 200, 100);
15//Rotate gradient, than scale і translate to get visible color transition in required rectangle
16transform.rotate(-45 * (Math.PI / 180));
17float hypotenuse = (float) Math.sqrt(200 * 200 + 100 * 100);
18float ratio = hypotenuse / 200;
19transform.scale(-ratio, 1);
20transform.translate(100 / transform.getScaleX(), 0);
21
22//Create diagonal linear gradient paint.
23LinearGradientPaint paint = new LinearGradientPaint(new Point2D.Float(0, 0), new Point2D.Float(200, 100),
24		new float [] {0, 1}, new Color [] {Color.RED, Color.BLUE}, MultipleGradientPaint.CycleMethod.NO_CYCLE,
25		MultipleGradientPaint.ColorSpaceType.SRGB, transform);
26
27//Set paint
28document.setPaint(paint);
29//Fill the rectangle
30document.fill(rectangle);
31
32//Close current page
33document.closePage();
34//Save the document
35document.save();

Ось і результат

Діагональний градієнт

У цьому фрагменті коду ми створюємо радіальний градієнт із 2 кольорів і заповнюємо цим градієнтом коло.

 1//Create an output stream for PostScript document
 2FileOutputStream outPsStream = new FileOutputStream(dataDir + "RadialGradient1_outPS.ps");
 3//Create save options with A4 size
 4PsSaveOptions options = new PsSaveOptions();
 5
 6//Create new PS Document with the page opened
 7PsDocument document = new PsDocument(outPsStream, options, false);
 8
 9//Create a rectangle
10Rectangle2D.Float rectangle = new Rectangle2D.Float(200, 100, 200, 200);
11
12//Create arrays of colors і fractions for the gradient.
13Color[] colors = { Color.GREEN, Color.BLUE, Color.BLACK, Color.YELLOW, new Color(245, 245, 220), Color.RED };
14float[] fractions = { 0.0f, 0.2f, 0.3f, 0.4f, 0.9f, 1.0f };
15
16//Create horizontal linear gradient paint. Scale components in the transform must be equal to width і heigh of the rectangle.
17//Translation components are offsets of the rectangle.
18AffineTransform transform = new AffineTransform(200, 0, 0, 200, 200, 100);
19
20//Create radial gradient paint.
21RadialGradientPaint paint = new RadialGradientPaint(new Point2D.Float(300, 200), 100, new Point2D.Float(300, 200),
22		fractions, colors, MultipleGradientPaint.CycleMethod.NO_CYCLE, MultipleGradientPaint.ColorSpaceType.SRGB,
23		transform);
24
25//Set paint
26document.setPaint(paint);
27//Fill the rectangle
28document.fill(rectangle);
29
30//Close current page
31document.closePage();
32//Save the document
33document.save();

Результат

Зображення радіального градієнта1

У цьому фрагменті коду ми створюємо радіальний градієнт із 6 кольорів і заливаємо цим градієнтом прямокутник.

 1//Create an output stream for PostScript document
 2FileOutputStream outPsStream = new FileOutputStream(dataDir + "RadialGradient2_outPS.ps");
 3//Create save options with A4 size
 4PsSaveOptions options = new PsSaveOptions();
 5
 6//Create new PS Document with the page opened
 7PsDocument document = new PsDocument(outPsStream, options, false);
 8
 9//Create a circle
10Ellipse2D.Float circle = new Ellipse2D.Float(200, 100, 200, 200);
11
12//Create arrays of colors і fractions for the gradient.
13Color[] colors = { Color.WHITE, Color.WHITE, Color.BLUE };
14float[] fractions = { 0.0f, 0.2f, 1.0f };
15
16//Create horizontal linear gradient paint. Scale components in the transform must be equal to width і heigh of the rectangle.
17//Translation components are offsets of the rectangle.
18AffineTransform transform = new AffineTransform(200, 0, 0, 200, 200, 100);
19
20//Create radial gradient paint.
21RadialGradientPaint paint = new RadialGradientPaint(new Point2D.Float(64, 64), 68, new Point2D.Float(24, 24),
22		fractions, colors, MultipleGradientPaint.CycleMethod.NO_CYCLE, MultipleGradientPaint.ColorSpaceType.SRGB,
23		transform);
24
25//Set paint
26document.setPaint(paint);
27//Fill the circle
28document.fill(circle);
29
30//Close current page
31document.closePage();
32//Save the document
33document.save();

Результат

Зображення радіального градієнта 2

Див. роботу з градієнтом у документах PS in .NET.

Ви можете завантажити приклади і файли даних з GitHub.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.