Trabalhar com Transparência em Arquivo PS | Python

Adicionar transparência no documento PS

Adicionar transparência aos documentos PS é bastante desafiante, uma vez que o PostScript não suporta inerentemente a transparência na pintura de objetos gráficos vetoriais. No entanto, as imagens translúcidas podem ser representadas por uma combinação de pixéis totalmente transparentes e totalmente opacos, frequentemente designados por máscaras.

O Aspose.Page para Python via .NET fornece um método para adicionar imagens transparentes a documentos PS. Para pintar gráficos vectoriais, como formas ou texto, empregamos uma técnica conhecida como “pseudotransparência”. Isto envolve o branqueamento de cores com um componente Alfa inferior a 255, fundindo os componentes Vermelho, Verde e Azul com um Alfa de 1. Embora a “pseudotransparência” não ofereça uma visibilidade real das camadas abaixo das camadas transparentes, cria a ilusão de transparência, especialmente quando a camada inferior é branca.

Adicionar imagem transparente a documento PS

Como referido anteriormente, a biblioteca Aspose.Page para Python via .NET oferece o método add_transparent_image() para adicionar imagens transparentes a documentos PS. Este método distingue se a imagem é totalmente opaca, totalmente transparente ou translúcida. Se a imagem for totalmente opaca, é adicionada através do método add_image(). Se for totalmente transparente, não é adicionada. Para imagens translúcidas, é adicionada como uma máscara de imagem PostScript.

No exemplo abaixo, ilustramos a diferença entre adicionar uma imagem transparente num documento PS utilizando add_image() e add_transparent_image(). Para visualizar a imagem branca translúcida, colocamos um grande retângulo vermelho por baixo das imagens.

Para adicionar uma imagem a um novo PsDocument utilizando o Aspose.Page para Python através da biblioteca .NET, seguimos os seguintes passos:

  1. Crie um fluxo de saída para o ficheiro PS resultante.
  2. Crie um objeto PsSaveOptions com as opções padrão.
  3. Crie um PsDocument de 1 página com um fluxo de saída já criado e opções de guardar.
  4. Crie um novo estado gráfico.
  5. Crie aspose.pydrawing.Bitmap a partir de um ficheiro de imagem.
  6. Crie a transformação necessária para a imagem.
  7. Adicione a imagem ao PsDocument como uma imagem totalmente opaca (utilizando o método add_image()) se tivermos a certeza de que a imagem é opaca ou adicione uma imagem transparente (utilizando o método add_transparent_image()) se não tivermos a certeza de que a imagem é opaca.
  8. Saia do estado gráfico atual para o nível superior.
  9. Feche a página.
  10. Guarde o 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()

Veja como trabalhar com transparência em documentos PS em .NET, Java.

O resultado da execução deste código é

Adicionar Imagem Transparente

Adicionar objeto gráfico vetorial transparente

Anteriormente, escrevemos que esta Solução API utiliza um algoritmo de paleta para formas e texto transparentes, a que chamamos “pseudo-transparência”. No próximo exemplo, demonstramos a diferença entre duas formas pintadas com a mesma cor, mas na primeira forma está sem o componente Alfa e no segundo caso tem o componente.

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

Veja como trabalhar com transparência em documentos PS em .NET, Java.

O resultado da execução deste código é

Mostrar Pseudo Transparência

Pode descarregar exemplos e ficheiros de dados do GitHub.

Have any questions about Aspose.Page?



Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.