Робота з прозорістю у файлі PS | Python
Додайте прозорість у документ PS
Додати прозорість до документів PS досить складно, оскільки PostScript за своєю суттю не підтримує прозорість при малюванні векторних графічних об’єктів. Проте напівпрозорі зображення можуть бути представлені комбінацією повністю прозорих і повністю непрозорих пікселів, які часто називають масками.
Aspose.Page для Python через .NET надає метод додавання прозорих зображень до документів PS. Для малювання векторної графіки, наприклад форм або тексту, ми використовуємо техніку, відому як “псевдопрозорість”. Це передбачає освітлення кольорів із альфа-компонентом менше 255 шляхом змішування червоного, зеленого та синього компонентів з альфа-1. Хоча “псевдопрозорість” не забезпечує справжню видимість шару під прозорими шарами, вона створює ілюзію прозорості, особливо коли нижній шар білий.
Додайте прозоре зображення до документа PS
Як згадувалося раніше, Aspose.Page для Python через бібліотеку .NET пропонує метод add_transparent_image() для додавання прозорих зображень до документів PS. Цей метод визначає, чи є зображення повністю непрозорим, повністю прозорим чи напівпрозорим. Якщо зображення повністю непрозоре, воно додається за допомогою методу add_image(). Якщо він повністю прозорий, він не додається взагалі. Для напівпрозорих зображень він додається як маска зображення PostScript.
У наведеному нижче прикладі ми проілюструємо різницю між додаванням прозорого зображення в документ PS за допомогою add_image() і add_transparent_image(). Щоб візуалізувати біле напівпрозоре зображення, ми розмістили великий червоний прямокутник під зображеннями.
Щоб додати зображення до нового PsDocument за допомогою Aspose.Page для Python через бібліотеку .NET, виконайте такі дії:
- Створіть вихідний потік для отриманого файлу PS.
- Створіть об’єкт PsSaveOptions із параметрами за замовчуванням.
- Створіть 1-сторінковий PsDocument із уже створеним вихідним потоком і параметрами збереження.
- Створіть новий графічний стан.
- Створіть aspose.pydrawing.Bitmap із файлу зображення.
- Створіть необхідну трансформацію для зображення.
- Додайте зображення до PsDocument як повністю непрозоре (за допомогою методу add_image()), якщо ми впевнені, що зображення непрозоре, або додайте його як прозоре зображення (за допомогою методу add_transparent_image()) якщо ми не впевнені, що зображення непрозоре.
- Вийти з поточного стану графіки на верхній рівень.
- Закрийте сторінку.
- Збережіть документ.
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()
Результатом виконання цього коду є
Додавання прозорого векторного графічного об’єкта
Раніше ми писали, що це API-рішення використовує алгоритм прозорості для прозорих фігур і тексту, який ми назвали “псевдопрозорістю”. У наступному прикладі ми демонструємо різницю між двома фігурами, пофарбованими однаковим кольором, але в першій фігурі він без компонента Alpha, а в другому випадку має компонент tje.
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 і 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()
Результатом виконання цього коду є
Ви можете завантажити приклади і файли даних з GitHub.