Оба Image.export_to_png и Image.export_as_image не работают - PullRequest
0 голосов
/ 17 июня 2020

У меня есть следующий код:

from kivy.app import App
from kivy.uix.image import Image

class MyApp(App):

    def build(self):
        my_image = Image(source='test.png')
        with my_image.canvas:
            Triangle(point=(0, 0, 30, 30, 60, 0))
        my_image.export_to_png('test2.png')
        my_image.export_as_image().save('test3.png')
        return my_image

myapp = MyApp().run()

Ожидаемым результатом его выполнения должны быть две копии 'test.png' с именами 'test2.png' и 'test3.png с добавленным треугольником на них. Однако создаются два файла только с треугольниками без исходной текстуры. В чем ошибка и как мне экспортировать виджеты в png?

РЕДАКТИРОВАТЬ: Я провел свое исследование и обнаружил, что это вызвано тем, что эти функции (я уверен только в image.export_to_png но image.export_as_image дает тот же результат) экспортировать не сам виджет, а холст виджета. Это приводит меня к двум вопросам:

1) Как мне экспортировать измененное изображение, но не сами изменения?

2) Как мне просто экспортировать исходное изображение, если никаких изменений не произошло?

1 Ответ

1 голос
/ 17 июня 2020

Похоже, вам просто нужно дождаться следующего кадра, вероятно, по причинам инициализации OpenGL:

from kivy.app import App
from kivy.uix.image import Image
from kivy.graphics import Triangle
from kivy.clock import Clock

class MyApp(App):

    def build(self):
        self.my_image = Image(source='test.png')
        with self.my_image.canvas:
            Triangle(point=(0, 0, 30, 30, 60, 0))

        Clock.schedule_once(self.export, 1)
        return self.my_image

    def export(self, dt):
        self.my_image.export_to_png('test2.png')
        self.my_image.export_as_image().save('test3.png')


myapp = MyApp().run()

РЕДАКТИРОВАТЬ: Я провел свое исследование и обнаружил, что это вызвано тот факт, что эти функции (я уверен только в image.export_to_png, но image.export_as_image дает тот же результат) экспортируют не сам виджет, а холст виджета.

внешний вид виджета кроме что он нарисовал aws на своем холсте.

Я не понимаю ваших последних вопросов.

...