Робота з прозорістю у файлі XPS | Python
Прозорість зазвичай використовується для створення візуальних ефектів, таких як змішування, згасання або накладання одного зображення або графічного елемента на інший. Цього можна досягти за допомогою різних прийомів, включаючи налаштування непрозорості або альфа-каналу об’єкта, використання режимів змішування або застосування масок або накладень. Це цінний інструмент у дизайні, ілюстрації та цифровій композиції, що дозволяє створювати багатошарові та складні візуальні композиції.
Додайте прозорий об’єкт до документа 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 і 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 # ... і we shift it 300 units lower ...
26 path3.render_transform = doc.create_matrix(1, 0, 0, 1, 0, 300)
27 # ... і 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 # ... і 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 і 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 і path4
44 # because brush is a complex property value which remains the same for path5 і 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 # ... і 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 # ... і 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 і 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")
Результат
Встановіть маску непрозорості
Рішення надає властивість 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")
Результат
Ви можете завантажити приклади і файли даних з GitHub.