Lavorare con la trasparenza in un file PS | Python

Aggiungere trasparenza in un documento PS

Aggiungere trasparenza ai documenti PS è piuttosto impegnativo, poiché PostScript non supporta di per sé la trasparenza nella pittura di oggetti di grafica vettoriale. Tuttavia, le immagini traslucide possono essere rappresentate da una combinazione di pixel completamente trasparenti e completamente opachi, spesso chiamati maschere.

Aspose.Page per Python tramite .NET fornisce un metodo per aggiungere immagini trasparenti ai documenti PS. Per la pittura di grafica vettoriale come forme o testo, utilizziamo una tecnica nota come “pseudo-trasparenza”. Questa tecnica consiste nello schiarire i colori con una componente alfa inferiore a 255, miscelando le componenti rosso, verde e blu con una componente alfa pari a uno. Sebbene la “pseudo-trasparenza” non offra una vera visibilità dei livelli sottostanti i livelli trasparenti, crea l’illusione di trasparenza, soprattutto quando il livello inferiore è bianco.

Aggiungere un’immagine trasparente a un documento PS

Come accennato in precedenza, Aspose.Page per Python tramite la libreria .NET offre il metodo add_transparent_image() per aggiungere immagini trasparenti ai documenti PS. Questo metodo distingue se l’immagine è completamente opaca, completamente trasparente o traslucida. Se l’immagine è completamente opaca, viene aggiunta utilizzando il metodo add_image(). Se è completamente trasparente, non viene aggiunta. Per le immagini traslucide, viene aggiunta come maschera immagine PostScript.

Nell’esempio seguente, illustriamo la distinzione tra l’aggiunta di un’immagine trasparente in un documento PS utilizzando sia add_image() che add_transparent_image(). Per visualizzare l’immagine bianca traslucida, abbiamo posizionato un grande rettangolo rosso sotto le immagini.

Per aggiungere un’immagine a un nuovo PsDocument utilizzando Aspose.Page per Python tramite la libreria .NET, seguiamo questi passaggi:

  1. Creare un flusso di output per il file PS risultante. 2. Creare un oggetto PsSaveOptions con le opzioni predefinite.
  2. Creare un PsDocument a pagina singola con un flusso di output già creato e opzioni di salvataggio.
  3. Creare un nuovo stato grafico.
  4. Creare aspose.pydrawing.Bitmap da un file immagine.
  5. Creare la trasformazione necessaria per l’immagine.
  6. Aggiungere l’immagine a PsDocument come immagine completamente opaca (utilizzando il metodo add_image()) se siamo sicuri che l’immagine sia opaca, oppure aggiungerne una come immagine trasparente (utilizzando il metodo add_transparent_image()) se non siamo sicuri che l’immagine sia opaca.
  7. Uscire dallo stato grafico corrente e passare a quello di livello superiore.
  8. Chiudere la pagina.
  9. Salvare il documento.
 1# The path to the documents directory.
 2data_dir = Util.get_data_dir_working_with_transparency()
 3
 4# Create an output stream for the PostScript document
 5with open(data_dir + "AddTransparentImage_outPS.ps", "wb") as out_ps_stream:
 6    # Create the save options with the A4 size
 7    options = PsSaveOptions()
 8    # Set the page's background color to see a white image on it's own transparent background
 9    options.background_color = aspose.pydrawing.Color.from_argb(211, 8, 48)
10    
11    # Create a new 1-paged PS Document
12    document = PsDocument(out_ps_stream, options, False)
13    
14    
15    document.write_graphics_save()
16    document.translate(20, 100)
17    
18    # Create a bitmap from the translucent image file
19    with aspose.pydrawing.Bitmap(data_dir + "mask1.png") as image:
20        # Add this image to the document as a regular opaque RGB image
21        document.draw_image(image, aspose.pydrawing.drawing2d.Matrix(1., 0., 0., 1., 100., 0.), aspose.pydrawing.Color())
22    
23    # Create another bitmap from the same image file
24    with aspose.pydrawing.Bitmap(data_dir + "mask1.png") as image:
25        # Add this image to the document as a transparent image
26        document.draw_transparent_image(image, aspose.pydrawing.drawing2d.Matrix(1., 0., 0., 1., 350., 0.), 255)
27    
28    document.write_graphics_restore()
29    
30    # Close the current page
31    document.close_page()
32    
33    #Save the document
34    document.save()

Vedi come lavorare con la trasparenza in un documento PS in .NET, Java.

Il risultato dell’esecuzione di questo codice è

Aggiungi immagine trasparente

Aggiunta di un oggetto grafico vettoriale trasparente

In precedenza abbiamo scritto che questa soluzione API utilizza un algoritmo di trasparenza per forme e testo trasparenti, che abbiamo chiamato “pseudo-trasparenza”. Nel prossimo esempio mostriamo una differenza tra due forme dipinte con lo stesso colore, ma nella prima forma è priva del componente Alpha e nel secondo caso lo è.

 1# The path to the documents directory.
 2data_dir = Util.get_data_dir_working_with_transparency()
 3
 4# Create an output stream for the PostScript document
 5with open(data_dir + "ShowPseudoTransparency_outPS.ps", "wb") as out_ps_stream:
 6    # Create the save options with A4 size
 7    options = PsSaveOptions()
 8    
 9    # Create a new 1-paged PS Document
10    document = PsDocument(out_ps_stream, options, False)
11    
12    offset_x = 50.
13    offset_y = 100.
14    width = 200.
15    height = 100.
16    
17    ################################ Create a rectangle with the opaque gradient fill #######################################################
18    path = aspose.pydrawing.drawing2d.GraphicsPath()
19    path.add_rectangle(aspose.pydrawing.RectangleF(offset_x, offset_y, width, height))
20    
21    opaque_brush: aspose.pydrawing.drawing2d.LinearGradientBrush = \
22        GraphicsFactory.create_linear_gradient_brush_by_rect_and_angle(aspose.pydrawing.RectangleF(0, 0, 200, 100), aspose.pydrawing.Color.from_argb(0, 0, 0),
23    aspose.pydrawing.Color.from_argb(40, 128, 70), 0)
24    brush_transform = aspose.pydrawing.drawing2d.Matrix(width, 0., 0., height, offset_x, offset_y)
25    opaque_brush.transform = brush_transform
26    gradient_brush = GradientBrush(opaque_brush)
27    gradient_brush.wrap_mode = aspose.pydrawing.drawing2d.WrapMode.CLAMP
28    
29    document.set_paint(gradient_brush)
30    document.fill(path)
31    ####################################################################################################################################
32    
33    offset_x = 350.
34    
35    ################################ Create a rectangle with the translucent gradient fill ###################################################
36    # Create a graphics path from the first rectangle
37    path = aspose.pydrawing.drawing2d.GraphicsPath()
38    path.add_rectangle(aspose.pydrawing.RectangleF(offset_x, offset_y, width, height))
39    
40    # Create linear gradient brush colors which transparency are not 255, but 150 and 50. So it are translucent.
41    translucent_brush: aspose.pydrawing.drawing2d.LinearGradientBrush = \
42        GraphicsFactory.create_linear_gradient_brush_by_rect_and_angle(aspose.pydrawing.RectangleF(0, 0, width, height),
43                                                                       aspose.pydrawing.Color.from_argb(150, 0, 0, 0),
44    aspose.pydrawing.Color.from_argb(50, 40, 128, 70), 0)
45    # Create a transform for brush.
46    brush_transform = aspose.pydrawing.drawing2d.Matrix(width, 0., 0., height, offset_x, offset_y)
47    # Set the transform
48    translucent_brush.transform = brush_transform
49    # Create a GradientBrush object containing the linear gradient brush
50    gradient_brush = GradientBrush(translucent_brush)
51    gradient_brush.wrap_mode = aspose.pydrawing.drawing2d.WrapMode.CLAMP
52    # Set the paint
53    document.set_paint(gradient_brush)
54    # Fill the rectangle
55    document.fill(path)
56    ####################################################################################################################################
57    
58    # Close the current page
59    document.close_page()
60    
61    # Save the document
62    document.save()

Vedi come lavorare con la trasparenza nei documenti PS in .NET, Java.

Il risultato dell’esecuzione di questo codice è

Mostra pseudo trasparenza

È 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.