Arbeiten mit Transparenz in PS-Datei | Java

Fügen Sie Transparenz im PS-Dokument hinzu

PostScript unterstützt keine Transparenz beim Malen von Vektorgrafikobjekten. Durchscheinende (teilweise transparente) Bilder können jedoch als Satz vollständig transparenter und vollständig undurchsichtiger Pixel gerendert werden. Solche Bilder werden Masken genannt.

Die Aspose.Page for Java-Bibliothek bietet eine Methode, die das transparente Bild zum PS-Dokument hinzufügt. Für das Malen von Vektorgrafiken: Formen oder Text bieten wir „Pseudotransparenz“ an. „Pseudotransparenz“ ist ein Prozess, bei dem Farben verblasst werden, die eine Alpha-Komponente von weniger als 255 haben. Dies wird durch die Mischung von Rot-, Grün- und Blau-Komponenten mit Alpha eins erreicht. „Pseudotransparenz“ ermöglicht es uns natürlich nicht, die untere farbige Schicht unter der oberen transparenten Schicht zu sehen, erzeugt aber eine Illusion von Transparenz, wenn die untere Schicht weiß ist.

Transparentes Bild im PS-Dokument hinzufügen

Wie wir zuvor geschrieben haben, können transparente Bilder als Maske zum PS-Dokument hinzugefügt werden, und die Aspose.Page for Java-Bibliothek bietet zu diesem Zweck eine Methode addTransparentImage(). Diese Methode erkennt, ob das Bild vollständig undurchsichtig oder vollständig transparent bzw. durchscheinend ist. Wenn es vollständig undurchsichtig ist, wird es als undurchsichtiges Bild in der Methode addImage() hinzugefügt. Wenn es vollständig transparent ist, wird es dem Dokument überhaupt nicht hinzugefügt. Wenn es sich um ein durchscheinendes Bild handelt, wird es als PostScript-Bild-Maske hinzugefügt.

Im folgenden Beispiel demonstrieren wir den Unterschied zwischen dem Hinzufügen eines transparenten Bildes in einem PS-Dokument mit addImage() und addTransparentImage(). Um das weiße, durchscheinende Bild zu sehen, haben wir ein großes rotes Rechteck unter die Bilder gelegt.

Um in diesem Beispiel ein beliebiges Bild zu einem neuen PsDocument mit der Aspose.Page für Java-Bibliothek hinzuzufügen, führen wir die folgenden Schritte aus:

  1. Erstellen Sie einen Ausgabestream für die resultierende PS-Datei.
  2. Erstellen Sie ein PsSaveOptions-Objekt mit Standardoptionen.
  3. Erstellen Sie ein einseitiges PsDocument mit einem bereits erstellten Ausgabestream und Speicheroptionen.
  4. Erstellen Sie einen neuen Grafikstatus.
  5. Erstellen Sie java.awt.BufferedImage aus der 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 addImage()), wenn wir sicher sind, dass das Bild undurchsichtig ist, oder fügen Sie eines als transparentes Bild hinzu (mit der Methode addTransparentImage()). wenn wir nicht sicher sind, ob das Bild undurchsichtig ist.
  8. Verlassen Sie den aktuellen Grafikstatus zur oberen Ebene eins.
  9. Schließen Sie die Seite.
  10. Speichern Sie das Dokument.
 1// Add transparent image to PS document.
 2
 3String outputFileName = "AddTransparentImage_outPS.ps";
 4
 5//Create save options with A4 size
 6PsSaveOptions options = new PsSaveOptions();
 7//Set page's background color to see white image on it's own transparent background
 8options.setBackgroundColor(new Color(211, 8, 48));
 9
10// Create new 1-paged PS Document
11PsDocument document = new PsDocument(getOutputDir() + outputFileName, options, false);
12
13//document.setPaint(new Color(211, 8, 48));
14//document.fill(new Rectangle2D.Float(0, 0, (int) options.getPageSize().getWidth(), 300));
15
16document.writeGraphicsSave();
17document.translate(20, 100);
18
19//Create an image from translucent image file
20BufferedImage image = ImageIO.read(new File(getDataDir() + "mask1.png"));
21
22//Add this image to document as usual opaque RGB image
23document.drawImage(image, new AffineTransform(1, 0, 0, 1, 100, 0), null);
24
25//Add this image to document as transparent image
26document.drawTransparentImage(image, new AffineTransform(1, 0, 0, 1, 350, 0), 255);
27
28document.writeGraphicsRestore();
29
30//Close current page
31document.closePage();
32
33//Save the document
34document.save();

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

Das Ergebnis der Ausführung dieses Codes ist das nächste

Transparentes Bild hinzufügen

Hinzufügen eines transparenten Vektorgrafikobjekts

Zuvor haben wir geschrieben, dass die Aspose.Page for Java-Bibliothek einen Paling-Algorithmus für transparente Formen und Text verwendet, den wir „Pseudotransparenz“ nannten.

Im folgenden Beispiel zeigen wir einen Unterschied zwischen zwei Formen, die mit derselben Farbe bemalt sind, jedoch in der ersten Form ohne die Alpha-Komponente und im zweiten Fall mit der Alpha-Komponente.

 1// Apply pseudo-transparency transparent image to PS document.
 2
 3String outputFileName = "ApplyPseudoTranparency_outPS.ps";
 4
 5//Create save options with A4 size
 6PsSaveOptions options = new PsSaveOptions();
 7//Set page's background color to see white image on it's own transparent background
 8options.setBackgroundColor(new Color(211, 8, 48));
 9
10// Create new 1-paged PS Document
11PsDocument document = new PsDocument(getOutputDir() + outputFileName, options, false);
12
13float offsetX = 50;
14float offsetY = 100;
15float width = 200;
16float height = 100;
17
18///////////////////////////////// Create rectangle with opaque gradient fill /////////////////////////////////////////////////////////
19GeneralPath path = new GeneralPath();
20path.append(new Rectangle2D.Float(offsetX, offsetY, width, height), false);
21
22LinearGradientPaint opaquePaint = new LinearGradientPaint(new Point2D.Float(0, 0), new Point2D.Float(200, 100),
23        new float[] {0f, 1f}, new Color[] {new Color(0, 0, 0), new Color(40, 128, 70)} , MultipleGradientPaint.CycleMethod.NO_CYCLE,
24        MultipleGradientPaint.ColorSpaceType.SRGB, new AffineTransform(width, 0, 0, height, offsetX, offsetY));
25
26document.setPaint(opaquePaint);
27document.fill(path);
28
29offsetX = 350;
30
31///////////////////////////////// Create rectangle with translucent gradient fill ///////////////////////////////////////////////////
32path = new GeneralPath();
33path.append(new Rectangle2D.Float(offsetX, offsetY, width, height), false);
34
35LinearGradientPaint translucentPaint = new LinearGradientPaint(new Point2D.Float(0, 0), new Point2D.Float(width, height),
36        new float[] {0f, 1f}, new Color[] {new Color(0, 0, 0, 150), new Color(40, 128, 70, 50)}, MultipleGradientPaint.CycleMethod.NO_CYCLE,
37        MultipleGradientPaint.ColorSpaceType.SRGB, new AffineTransform(width, 0, 0, height, offsetX, offsetY));
38
39document.setPaint(translucentPaint);
40document.fill(path);
41
42//Close current page
43document.closePage();
44
45//Save the document
46document.save();

Weitere Informationen finden Sie unter „Arbeiten mit Transparenz in PS-Dokumenten“ in .NET und C++.

Das Ergebnis der Ausführung dieses Codes wird wie folgt angezeigt:

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.