Работа с прозрачностью в файле XPS | Питон

Прозрачность обычно используется для создания визуальных эффектов, таких как смешивание, затухание или наложение одного изображения или графического элемента на другое. Этого можно достичь с помощью различных методов, включая настройку непрозрачности или альфа-канала объекта, использование режимов наложения или применение масок или наложений. Это ценный инструмент в дизайне, иллюстрации и цифровой композиции, позволяющий создавать многослойные и сложные визуальные композиции.

Добавить прозрачный объект в документ XPS

Aspose.Page для Python через .NET предоставляет класс XpsPath, позволяющий добавлять прозрачные объекты в документ XPS. Для этого необходимо указать PathGeometry и добавить его в XpsPath. Следующий фрагмент кода демонстрирует полную функциональность добавления прозрачного объекта в документ XPS:

 1# The path to the documents directory.
 2        data_dir = Util.get_data_dir_working_with_transparency()
 3        # Create new XPS Document
 4        doc = XpsDocument()
 5        
 6        # Just to demonstrate transparency
 7        doc.add_path(doc.create_path_geometry("M120,0 H400 v1000 H120")).fill = doc.create_solid_color_brush(aspose.pydrawing.Color.gray)
 8        doc.add_path(doc.create_path_geometry("M300,120 h600 V420 h-600")).fill = doc.create_solid_color_brush(aspose.pydrawing.Color.gray)
 9        
10        # Create the path with the closed rectangle geometry
11        path1: XpsPath = doc.create_path(doc.create_path_geometry("M20,20 h200 v200 h-200 z"))
12        # Set a blue solid brush to fill the path1
13        path1.fill = doc.create_solid_color_brush(aspose.pydrawing.Color.blue)
14        # Add it to the current page
15        path2: XpsPath = doc.add_path(path1)
16        
17        # path1 and path2 are the same as soon as path1 hasn't been placed inside any other element
18        # (which means that path1 had no parent element).
19        # Because of that rectangle's color on the page effectively turns to green
20        path2.fill = doc.create_solid_color_brush(aspose.pydrawing.Color.green)
21        
22        # Now add path2 once again. Now path2 has parent. So path3 won't be the same as path2.
23        # Thus a new rectangle is painted on the page ...
24        path3: XpsPath = doc.add_path(path2)
25        # ... and we shift it 300 units lower ...
26        path3.render_transform = doc.create_matrix(1, 0, 0, 1, 0, 300)
27        # ... and set red solid brush to fill it
28        path3.fill = doc.create_solid_color_brush(aspose.pydrawing.Color.red)
29        
30        # Create a new path4 with path2's geometry ...
31        path4: XpsPath = doc.add_path(path2.data)
32        # ... shift it 300 units to the right ...
33        path4.render_transform = doc.create_matrix(1, 0, 0, 1, 300, 0)
34        # ... and set a blue solid fill
35        path4.fill = doc.create_solid_color_brush(aspose.pydrawing.Color.blue)
36        
37        # Add path4 once again.
38        path5: XpsPath = doc.add_path(path4)
39        # path4 and path5 are not the same again ...
40        # (move path5 300 units lower)
41        path5.render_transform = path5.render_transform.clone() # to disconnect RenderTransform value from path4 (see next comment about Fill property)
42        path5.render_transform.translate(0, 300)
43        # ... but if we set the opacity of Fill property, it will take effect on both path5 and path4
44        # because brush is a complex property value which remains the same for path5 and path4
45        path5.fill.opacity = 0.8
46        
47        # Create a new path6 with path2's geometry ...
48        path6: XpsPath = doc.add_path(path2.data)
49        # ... shift it 600 units to the right ...
50        path6.render_transform = doc.create_matrix(1, 0, 0, 1, 600, 0)
51        # ... and set a yellow solid fill
52        path6.fill = doc.create_solid_color_brush(aspose.pydrawing.Color.yellow)
53        
54        # Now add path6's clone ...
55        path7: XpsPath = doc.add_path(path6.clone())
56        # (move path5 300 units lower)
57        path7.render_transform = path7.render_transform.clone()
58        path7.render_transform.translate(0, 300)
59        # ... and set the opacity for path7
60        path7.fill.opacity = 0.8
61        # Now opacity effects independantly as soon as property values are cloned along with the element
62        
63        # The following code block is equivalent to the previous one.
64        # Add path6 itself. path6 and path7 are not the same. Although their Fill property values are the same 
65        #XpsPath path7 = doc.add_path(path6);
66        #path7.RenderTransform = path7.RenderTransform.Clone();
67        #path7.RenderTransform.Translate(0, 300);
68        # To "disconnect" path7's Fill property from path6's Fill property reassign it to its clone (or path6's Fill clone)
69        #path7.Fill = ((XpsSolidColorBrush)path7.Fill).Clone();
70        #path7.Fill.Opacity = 0.8f;
71        
72        # Save the resultant XPS document
73        doc.save(data_dir + "WorkingWithTransparency_out.xps")

См. работу с прозрачностью в документах XPS в .NET, Java и C++.

Результат

Маска непрозрачности

Установить маску непрозрачности

Решение предоставляет свойство set_opacity_mask(), используемое для применения маски непрозрачности к документу XPS. Для этого необходимо создать PathGeometry и добавить его в XpsPath. Изображение можно использовать в качестве маски непрозрачности, где альфа-компонент каждого пикселя определяет уровень прозрачности, применяемой к базовой заливке. В результирующем документе XPS будут отображаться наклонные градиентные полосы, накладывающиеся на исходный файл изображения. Следующий фрагмент кода демонстрирует полную функциональность установки маски непрозрачности:

 1# The path to the documents directory.
 2data_dir = Util.get_data_dir_working_with_transparency()
 3# Create a new XPS Document
 4doc = XpsDocument()
 5#Add Canvas to the XpsDocument instance
 6canvas = doc.add_canvas()
 7# A rectangle with opacity masked by ImageBrush
 8path = canvas.add_path(doc.create_path_geometry("M 10,180 L 228,180 228,285 10,285"))
 9path.fill = doc.create_solid_color_brush(doc.create_color(1.0, 0.0, 0.0))
10imageBrush: XpsImageBrush = doc.create_image_brush(data_dir + "R08SY_NN.tif", aspose.pydrawing.RectangleF(0, 0, 128, 192),
11        aspose.pydrawing.RectangleF(0, 0, 64, 96))
12path.opacity_mask = imageBrush
13imageBrush.tile_mode = XpsTileMode.TILE
14# Save the resultant XPS document
15doc.save(data_dir + "OpacityMask_out.xps")

См. работу с прозрачностью в документах XPS в .NET, Java и C++.

Результат

Работа с прозрачностью

Вы можете загрузить примеры и файлы данных с сайта GitHub.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.