Lavorare con il gradiente in un file PS | Java

Aggiungere un gradiente in un documento PS

In questo articolo, consideriamo i modi in cui un gradiente può essere utilizzato nei documenti PS.

Il gradiente è una transizione graduale da un colore all’altro. Viene utilizzato per rendere le immagini disegnate più realistiche. Poiché il gradiente è un tipo di pittura, è prevedibile che in Java sia implementato come sottoclasse di java.awt.Paint. In realtà, la piattaforma Java dispone di due di questi tipi di pittura:

Esiste anche java.awt.GradientPaint, ma è solo un caso particolare di java.awt.LinearGradientPaint.

Per impostare un colore o un tratto in PsDocument, dobbiamo passare un oggetto della classe java.awt.Paint per un disegno e un oggetto della classe java.awt.Stroke per il tratto ai rispettivi metodi. La libreria Aspose.Page per Java elabora tutte le classi importanti implementate da java.awt.Paint offerte dalla piattaforma Java. Queste sono java.awt.Color, java.awt.TexturePaint, java.awt.LinearGradientPaint e java.awt.RadialGradientPaint. Il colore del tratto in Java viene assegnato separatamente dalle proprietà del tratto nell’oggetto java.awt.Stroke, utilizzando nuovamente java.awt.Paint. Pertanto, la libreria Aspose.Page per Java può utilizzare anche un set completo di implementazioni di Paint per disegnare linee e delineare forme e testo.

Per dipingere oggetti grafici con un gradiente nella libreria Aspose.Page per Java è necessario creare java.awt.LinearGradientPaint o java.awt.RadialGradientPaint e passarlo a setPaint() o a uno dei metodi fillText() o fillAndStrokeText() che accettano java.awt.Paint come parametro.

Per delineare oggetti grafici con un gradiente nella libreria Aspose.Page per Java, è necessario passare java.awt.LinearGradientPaint o java.awt.RadialGradientPaint anche a setPaint() o a uno dei metodi outlineText() o fillAndStrokeText() che accettano il pennello come parametro.

Nell’esempio seguente mostriamo come riempire una forma e un testo e come delineare il testo con un gradiente.

Un algoritmo per dipingere oggetti grafici con un gradiente in un nuovo documento PS include i seguenti passaggi:

  1. Creare un flusso di output per il file PS risultante.
  2. Creare PsSaveOptions.
  3. Creare PsDocument con il flusso di output già creato e le opzioni di salvataggio.
  4. Creare il percorso grafico o il font necessari in base all’oggetto che si desidera riempire o delineare.
  5. Creare un oggetto di tipo java.awt.LinearGradientPaint o java.awt.RadialGradientPaint in base alla forma desiderata del gradiente. 6. Impostare la trasformazione necessaria su questo pennello.
  6. Impostare il pennello sfumatura come colore corrente in PsDocument.
  7. Riempire il percorso grafico con il colore corrente o riempire un testo. Se utilizziamo uno dei metodi per riempire il testo che accetta java.awt.Paint come parametro, il punto precedente può essere ignorato.
  8. Chiudere la pagina.
  9. Salvare il documento.

Se desideriamo contornare (contornare) gli oggetti grafici con un gradiente invece degli ultimi 4 punti, il seguente sarà:

  1. Impostare il gradiente come colore corrente in PsDocument.
  2. Creare l’oggetto java.awt.Stroke.
  3. Impostare questo tratto come tratto corrente in PsDocument.
  4. Contornare il percorso grafico con il tratto corrente o contornare il testo. Se utilizziamo uno dei metodi per contornare il testo che accetta java.awt.Stroke come parametro, il punto precedente può essere ignorato.
  5. Chiudi la pagina.
  6. Salva il documento.

Offriamo 5 frammenti di codice separati che illustrano l’utilizzo di diversi gradienti.

In questo frammento di codice creiamo un gradiente lineare orizzontale da due colori, riempiamo un rettangolo, riempiamo un testo e tracciamo un contorno di testo con questo gradiente.

 1// Paint rectangle and text and draw text with horizontal gradient fill in PS document.
 2
 3String outputFileName = "HorizontalGradient_outPS.ps";
 4
 5//Create save options with A4 size
 6PsSaveOptions options = new PsSaveOptions();
 7
 8// Create new 1-paged PS Document
 9PsDocument document = new PsDocument(getOutputDir() + outputFileName, options, false);
10
11float offsetX = 200;
12float offsetY = 100;
13float width = 200;
14float height = 100;
15
16//Create graphics path from the first rectangle
17java.awt.geom.GeneralPath path = new java.awt.geom.GeneralPath();
18path.append(new Rectangle2D.Float(offsetX, offsetY, width, height), false);
19
20//Create linear gradient brush with rectangle as a bounds, start and end colors and transformation matrix
21LinearGradientPaint paint = new LinearGradientPaint(new Point2D.Float(0, 0), new Point2D.Float(200, 100),
22		new float [] {0, 1}, new Color [] {new Color(0, 0, 0, 150), new Color(40, 128, 70, 50)},
23		MultipleGradientPaint.CycleMethod.NO_CYCLE, MultipleGradientPaint.ColorSpaceType.SRGB,
24		new AffineTransform(width, 0, 0, height, offsetX, offsetY));
25
26//Set paint
27document.setPaint(paint);
28
29//Fill the rectangle
30document.fill(path);
31
32//Fill text with gradient
33java.awt.Font font = new java.awt.Font("Arial", java.awt.Font.BOLD, 96);
34document.fillAndStrokeText("ABC", font, 200, 300, paint, Color.BLACK, new java.awt.BasicStroke(2));
35
36//Set current stroke
37document.setStroke(new java.awt.BasicStroke(5));
38//Outline text with gradient
39document.outlineText("ABC", font, 200, 400);
40
41//Close current page
42document.closePage();
43
44//Save the document
45document.save();

Il risultato dell’esecuzione di questo codice è visualizzato come

Gradiente Orizzontale

In questo frammento di codice creiamo un gradiente lineare verticale da 5 colori e riempiamo un rettangolo con questo gradiente.

 1// Paint rectangle with vertical gradient fill in PS document.
 2
 3String outputFileName = "VerticalGradient_outPS.ps";
 4
 5//Create save options with A4 size
 6PsSaveOptions options = new PsSaveOptions();
 7
 8// Create new 1-paged PS Document
 9PsDocument document = new PsDocument(getOutputDir() + outputFileName, options, false);
10
11float offsetX = 200;
12float offsetY = 100;
13float width = 200;
14float height = 100;
15
16//Create graphics path from the first rectangle
17java.awt.geom.GeneralPath path = new java.awt.geom.GeneralPath();
18path.append(new Rectangle2D.Float(offsetX, offsetY, width, height), false);
19
20//Create an array of interpolation colors
21Color[] colors = { Color.RED, Color.GREEN, Color.BLUE, Color.ORANGE, new Color(107, 142, 35) }; // DarkOliveGreen
22float[] positions = { 0.0f, 0.1873f, 0.492f, 0.734f, 1.0f };
23
24//Create the gradient transform. Scale components in the transform must be equal to width and heigh of the rectangle.
25//Translation components are offsets of the rectangle.
26AffineTransform transform = new AffineTransform(width, 0, 0, height, offsetX, offsetY);
27//Rotate the gradient on 90 degrees around an origin
28transform.rotate(Math.toRadians(90));
29
30//Create vertical linear gradient paint.
31LinearGradientPaint paint = new LinearGradientPaint(new Point2D.Float(0, 0), new Point2D.Float(200, 100),
32		positions, colors, MultipleGradientPaint.CycleMethod.NO_CYCLE, MultipleGradientPaint.ColorSpaceType.SRGB,
33		transform);
34
35//Set paint
36document.setPaint(paint);
37
38//Fill the rectangle
39document.fill(path);
40
41//Close current page
42document.closePage();
43
44//Save the document
45document.save();
Ecco il risultato!

Gradiente Verticale

In questo frammento di codice creiamo un gradiente lineare diagonale da 2 colori e riempiamo un rettangolo con questo gradiente.

 1// Paint rectangle with diagonal gradient fill in PS document.
 2
 3String outputFileName = "DiagonalGradient_outPS.ps";
 4
 5//Create save options with A4 size
 6PsSaveOptions options = new PsSaveOptions();
 7
 8// Create new 1-paged PS Document
 9PsDocument document = new PsDocument(getOutputDir() + outputFileName, options, false);
10
11float offsetX = 200;
12float offsetY = 100;
13float width = 200;
14float height = 100;
15
16//Create graphics path from the first rectangle
17java.awt.geom.GeneralPath path = new java.awt.geom.GeneralPath();
18path.append(new Rectangle2D.Float(offsetX, offsetY, width, height), false);
19
20//Create the gradient transform. Scale components in the transform must be equal to width and heigh of the rectangle.
21//Translation components are offsets of the rectangle.
22AffineTransform transform = new AffineTransform(200, 0, 0, 100, 200, 100);
23//Rotate gradient, than scale and translate to get visible color transition in required rectangle
24transform.rotate(-45 * (Math.PI / 180));
25float hypotenuse = (float) Math.sqrt(200 * 200 + 100 * 100);
26float ratio = hypotenuse / 200;
27transform.scale(-ratio, 1);
28transform.translate(100 / transform.getScaleX(), 0);
29
30//Create diagonal linear gradient paint.
31LinearGradientPaint paint = new LinearGradientPaint(new Point2D.Float(0, 0), new Point2D.Float(200, 100),
32		new float [] {0, 1}, new Color [] {Color.RED, Color.BLUE}, MultipleGradientPaint.CycleMethod.NO_CYCLE,
33		MultipleGradientPaint.ColorSpaceType.SRGB, transform);
34
35//Set paint
36document.setPaint(paint);
37
38//Fill the rectangle
39document.fill(path);
40
41//Close current page
42document.closePage();
43
44//Save the document
45document.save();
Ecco il risultato!

Gradiente diagonale

In questo frammento di codice creiamo un gradiente radiale da 2 colori e riempiamo un cerchio con questo gradiente.

 1// Paint rectangle with radial gradient fill in PS document.
 2
 3String outputFileName = "RadialGradient1_outPS.ps";
 4
 5//Create save options with A4 size
 6PsSaveOptions options = new PsSaveOptions();
 7
 8// Create new 1-paged PS Document
 9PsDocument document = new PsDocument(getOutputDir() + outputFileName, options, false);
10
11float offsetX = 200;
12float offsetY = 100;
13float width = 200;
14float height = 100;
15
16//Create a circle
17Ellipse2D.Float circle = new Ellipse2D.Float(offsetX, offsetY, width, height);
18
19//Create arrays of colors and fractions for the gradient.
20Color[] colors = { Color.WHITE, Color.WHITE, Color.BLUE };
21float[] fractions = { 0.0f, 0.2f, 1.0f };
22
23//Create horizontal linear gradient paint. Scale components in the transform must be equal to width and heigh of the rectangle.
24//Translation components are offsets of the rectangle.
25AffineTransform transform = new AffineTransform(width, 0, 0, height, offsetX, offsetY);
26
27//Create radial linear gradient paint.
28RadialGradientPaint paint = new RadialGradientPaint(new Point2D.Float(64, 64), 68, new Point2D.Float(24, 24),
29		fractions, colors, MultipleGradientPaint.CycleMethod.NO_CYCLE, MultipleGradientPaint.ColorSpaceType.SRGB,
30		transform);
31
32//Set paint
33document.setPaint(paint);
34
35//Fill the rectangle
36document.fill(circle);
37
38//Close current page
39document.closePage();
40
41//Save the document
42document.save();

Il risultato

Radial Gradient imag1

In questo frammento di codice creiamo un gradiente radiale da 6 colori e riempiamo un rettangolo con questo gradiente.

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

Il risultato

Immagine 2 con gradiente radiale

Vedi come lavorare con il gradiente nei documenti PS in .NET.

È possibile scaricare esempi e file di dati da GitHub.

Have any questions about Aspose.Page?



Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.