Arbeiten mit Transparenz in PS-Datei | Python

Fügen Sie Transparenz im PS-Dokument hinzu

Das Hinzufügen von Transparenz zu PS-Dokumenten ist eine ziemliche Herausforderung, da PostScript Transparenz beim Malen von Vektorgrafikobjekten nicht grundsätzlich unterstützt. Durchscheinende Bilder können jedoch durch eine Kombination aus vollständig transparenten und vollständig undurchsichtigen Pixeln dargestellt werden, die oft als Masken bezeichnet werden.

Aspose.Page für Python über .NET bietet eine Methode zum Hinzufügen transparenter Bilder zu PS-Dokumenten. Zum Malen von Vektorgrafiken wie Formen oder Text verwenden wir eine Technik, die als „Pseudotransparenz“ bekannt ist. Dabei werden Farben mit einem Alpha-Anteil von weniger als 255 aufgehellt, indem die Rot-, Grün- und Blau-Anteile mit einem Alpha-Wert von eins gemischt werden. Während „Pseudotransparenz“ keine echte Ebenensichtbarkeit unter transparenten Ebenen bietet, erzeugt sie die Illusion von Transparenz, insbesondere wenn die untere Ebene weiß ist.

Fügen Sie dem PS-Dokument ein transparentes Bild hinzu

Wie bereits erwähnt, bietet Aspose.Page für Python über die .NET-Bibliothek die Methode add_transparent_image() zum Hinzufügen transparenter Bilder zu PS-Dokumenten. Diese Methode erkennt, ob das Bild vollständig undurchsichtig, vollständig transparent oder durchscheinend ist. Wenn das Bild vollständig undurchsichtig ist, wird es mit der Methode add_image() hinzugefügt. Wenn es vollständig transparent ist, wird es überhaupt nicht hinzugefügt. Bei durchscheinenden Bildern wird es als PostScript-Bildmaske hinzugefügt.

Im folgenden Beispiel veranschaulichen wir den Unterschied zwischen dem Hinzufügen eines transparenten Bildes in einem PS-Dokument mithilfe von add_image() und add_transparent_image(). Um das weiße, durchscheinende Bild sichtbar zu machen, haben wir ein großes rotes Rechteck unter den Bildern platziert.

Um mit Aspose.Page für Python über die .NET-Bibliothek ein Bild zu einem neuen PsDocument hinzuzufügen, gehen wir folgendermaßen vor:

  1. Erstellen Sie einen Ausgabestream für die resultierende PS-Datei.
  2. Erstellen Sie ein PsSaveOptions-Objekt mit den Standardoptionen.
  3. Erstellen Sie ein einseitiges PsDocument mit einem bereits erstellten Ausgabestream und Speicheroptionen.
  4. Erstellen Sie einen neuen Grafikstatus.
  5. Erstellen Sie aspose.pydrawing.Bitmap aus einer Bilddatei.
  6. Erstellen Sie die erforderliche Transformation für das Bild.
  7. Fügen Sie das Bild als vollständig undurchsichtiges Bild zu PsDocument hinzu (mit der Methode add_image()), wenn wir sicher sind, dass das Bild undurchsichtig ist, oder fügen Sie eines als transparentes Bild hinzu (mit der Methode add_transparent_image()). wenn wir nicht sicher sind, ob das Bild undurchsichtig ist.
  8. Verlassen Sie den aktuellen Grafikstatus zur oberen Ebene.
  9. Schließen Sie die Seite.
  10. Speichern Sie das Dokument.
 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()

Weitere Informationen finden Sie unter „Arbeiten mit Transparenz in PS-Dokumenten“ in .NET, Java.

Das Ergebnis der Ausführung dieses Codes ist

Transparentes Bild hinzufügen

Hinzufügen eines transparenten Vektorgrafikobjekts

Zuvor haben wir geschrieben, dass diese API-Lösung einen Paling-Algorithmus für transparente Formen und Texte verwendet, den wir „Pseudotransparenz“ nannten. Im nächsten Beispiel zeigen wir einen Unterschied zwischen zwei Formen, die mit derselben Farbe bemalt sind, aber in der ersten Form ist sie ohne die Alpha-Komponente und im zweiten Fall hat sie die Tje-Komponente.

 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()

Weitere Informationen finden Sie unter „Arbeiten mit Transparenz in PS-Dokumenten“ in .NET, Java.

Das Ergebnis der Ausführung dieses Codes ist

Pseudotransparenz anzeigen

Sie können Beispiele und Datendateien herunterladen von GitHub.

Have any questions about Aspose.Page?



Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.