Робота з прозорістю у файлі 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, виконайте такі дії:

  1. Створіть вихідний потік для отриманого файлу PS.
  2. Створіть об’єкт PsSaveOptions із параметрами за замовчуванням.
  3. Створіть 1-сторінковий PsDocument із уже створеним вихідним потоком і параметрами збереження.
  4. Створіть новий графічний стан.
  5. Створіть aspose.pydrawing.Bitmap із файлу зображення.
  6. Створіть необхідну трансформацію для зображення.
  7. Додайте зображення до PsDocument як повністю непрозоре (за допомогою методу add_image()), якщо ми впевнені, що зображення непрозоре, або додайте його як прозоре зображення (за допомогою методу add_transparent_image()) якщо ми не впевнені, що зображення непрозоре.
  8. Вийти з поточного стану графіки на верхній рівень.
  9. Закрийте сторінку.
  10. Збережіть документ.
 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()

Дивіться роботу з прозорістю в документі PS у .NET, Java.

Результатом виконання цього коду є

Додати прозоре зображення

Додавання прозорого векторного графічного об’єкта

Раніше ми писали, що це 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()

Дивіться роботу з прозорістю в документах PS у .NET, Java.

Результатом виконання цього коду є

Показати псевдопрозорість

Ви можете завантажити приклади і файли даних з GitHub.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.