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:
- java.awt.LinearGradientPaint
- java.awt.RadialGradientPaint
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:
- Creare un flusso di output per il file PS risultante.
- Creare PsSaveOptions.
- Creare PsDocument con il flusso di output già creato e le opzioni di salvataggio.
- Creare il percorso grafico o il font necessari in base all’oggetto che si desidera riempire o delineare.
- 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.
- Impostare il pennello sfumatura come colore corrente in PsDocument.
- 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.
- Chiudere la pagina.
- Salvare il documento.
Se desideriamo contornare (contornare) gli oggetti grafici con un gradiente invece degli ultimi 4 punti, il seguente sarà:
- Impostare il gradiente come colore corrente in PsDocument.
- Creare l’oggetto java.awt.Stroke.
- Impostare questo tratto come tratto corrente in PsDocument.
- 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.
- Chiudi la pagina.
- 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//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 and 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();
Il risultato dell’esecuzione di questo codice è visualizzato come
In questo frammento di codice creiamo un gradiente lineare verticale da 5 colori e riempiamo un rettangolo con questo gradiente.
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 and 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 and 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();
Ecco il risultato!
In questo frammento di codice creiamo un gradiente lineare diagonale da 2 colori e riempiamo un rettangolo con questo gradiente.
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 and 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 and 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();
Ecco il risultato!
In questo frammento di codice creiamo un gradiente radiale da 2 colori e riempiamo un cerchio con questo gradiente.
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 and 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 and 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();
Il risultato
In questo frammento di codice creiamo un gradiente radiale da 6 colori e riempiamo un rettangolo con questo gradiente.
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 and 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 and 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();
Il risultato
Vedi come lavorare con il gradiente nei documenti PS in .NET.
È possibile scaricare esempi e file di dati da GitHub.