Travailler avec la transparence dans le fichier PS | Python

Ajouter de la transparence dans le document PS

L’ajout de transparence aux documents PS est assez difficile car PostScript ne prend pas automatiquement en charge la transparence lors de la peinture d’objets graphiques vectoriels. Cependant, les images translucides peuvent être représentées par une combinaison de pixels entièrement transparents et entièrement opaques, souvent appelés masques.

Aspose.Page pour Python via .NET fournit une méthode pour ajouter des images transparentes aux documents PS. Pour peindre des graphiques vectoriels tels que des formes ou du texte, nous utilisons une technique connue sous le nom de “pseudo-transparence”. Cela implique d’éclaircir les couleurs avec un composant Alpha inférieur à 255 en mélangeant les composants rouge, vert et bleu avec un Alpha de un. Bien que la “pseudo-transparence” n’offre pas une véritable visibilité sous les calques transparents, elle crée l’illusion de transparence, en particulier lorsque le calque inférieur est blanc.

Ajouter une image transparente au document PS

Comme mentionné précédemment, Aspose.Page pour Python via la bibliothèque .NET propose la méthode add_transparent_image() pour ajouter des images transparentes aux documents PS. Cette méthode permet de déterminer si l’image est totalement opaque, entièrement transparente ou translucide. Si l’image est entièrement opaque, elle est ajoutée à l’aide de la méthode add_image(). S’il est entièrement transparent, il n’est pas ajouté du tout. Pour les images translucides, il est ajouté sous forme de masque d’image PostScript.

Dans l’exemple ci-dessous, nous illustrons la distinction entre l’ajout d’une image transparente dans un document PS en utilisant à la fois add_image() et add_transparent_image(). Pour visualiser l’image blanche translucide, nous avons placé un grand rectangle rouge sous les images.

Pour ajouter une image à un nouveau PsDocument à l’aide d’Aspose.Page pour Python via la bibliothèque .NET, nous suivons ces étapes :

  1. Créez un flux de sortie pour le fichier PS résultant.
  2. Créez un objet PsSaveOptions avec les options par défaut.
  3. Créez un PsDocument d’une page avec un flux de sortie déjà créé et enregistrez les options.
  4. Créez un nouvel état graphique.
  5. Créez aspose.pydrawing.Bitmap à partir d’un fichier image.
  6. Créez la transformation nécessaire pour l’image.
  7. Ajoutez l’image à PsDocument en tant qu’image entièrement opaque (en utilisant la méthode add_image()) si nous sommes sûrs que l’image est opaque ou ajoutez-en une en tant qu’image transparente (en utilisant la méthode add_transparent_image()) si nous ne sommes pas sûrs que l’image soit opaque.
  8. Quittez l’état graphique actuel pour passer à celui du niveau supérieur.
  9. Fermez la page.
  10. Enregistrez le document.
 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()

Voir comment travailler avec la transparence dans un document PS dans .NET, Java.

Le résultat de l’exécution de ce code est

Ajouter une image transparente

Ajout d’un objet graphique vectoriel transparent

Plus tôt, nous avons écrit que cette solution API utilise un algorithme de pâleur pour les formes et le texte transparents, que nous avons appelé “pseudo-transparence”. Dans l’exemple suivant, nous démontrons une différence entre deux formes peintes avec la même couleur, mais dans la première forme, elle est sans le composant Alpha et dans le second cas, elle a le composant.

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

Voir Travailler avec la transparence dans les documents PS dans .NET, Java.

Le résultat de l’exécution de ce code est

Afficher la pseudo-transparence

Vous pouvez télécharger des exemples et des fichiers de données à partir de GitHub.

Have any questions about Aspose.Page?



Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.