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:
- Erstellen Sie einen Ausgabestream für die resultierende PS-Datei.
- Erstellen Sie ein PsSaveOptions-Objekt mit den Standardoptionen.
- Erstellen Sie ein einseitiges PsDocument mit einem bereits erstellten Ausgabestream und Speicheroptionen.
- Erstellen Sie einen neuen Grafikstatus.
- Erstellen Sie aspose.pydrawing.Bitmap aus einer Bilddatei.
- Erstellen Sie die erforderliche Transformation für das Bild.
- 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.
- Verlassen Sie den aktuellen Grafikstatus zur oberen Ebene.
- Schließen Sie die Seite.
- 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()
Das Ergebnis der Ausführung dieses Codes ist
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()
Das Ergebnis der Ausführung dieses Codes ist
Sie können Beispiele und Datendateien herunterladen von GitHub.