Как сделать вращающуюся картинку на python

от admin

Создание анимации средствами Python 2.7

Эта статья познакомит вас с основами создания анимации с использованием Python и Pyglet. Pyglet разработан для работы с 3D графикой, но в этой статье мы будем использовать его для создания очень простой 2D анимации. В частности, мы познакомимся с базовыми приемами использования Pyglet (разработка кода для создания и воспроизведения анимации) и создадим анимацию с помощью последовательности изображений.

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

УСТАНОВКА PYGLET

Pyglet предоставляет собой API для работы с мультимедийными данными в приложениях, написанных с помощью Python. Это OpenGL библиотека, которая работает на нескольких платформах. Она в основном используется для разработки игровых и других графически насыщенных приложений. Pyglet можно скачать по ссылке: http://www.pyglet.org/download.html. Ставим Pyglet версии 1.1.4 или более поздней, если такая имеется. При установке Pyglet не должно возникнуть никаких трудностей.

Платформа Windows

Скачиваем и устанавливаем дистрибутив Pyglet 1.1.4.msi или более поздней версии.
Python 2.7 должен быть установлен.

Другие платформы

На сайте Pyglet представлен бинарный файл для Mac OS X. Загружаем и установливаем Pyglet-1.1.4.dmg или более поздней версии.

В Linux устанавливаем Pyglet 1.1.4 или более поздней версии, подходящий сборке Вашей системы.
Если таковой отсутствует, библиотека может быть установлена другим способом:

  • Скачайте и распакуйте архив Pyglet-1.1.4.tar.gz или более поздней версии.
  • Убедитесь, что питон настроен на работу в командной строке. В противном случае, установите правильный путь к исполняемому файлу Python в переменной окружения PYTHONPATH.
  • В командной строке, перейдите в распакованный архив, а затем выполните следующую команду:
  • Далее следуем инструкциям, описанным в файлах readme/install, находящихся в папке с библиотекой.
Проверка установки

Прежде чем двигаться дальше, нужно убедиться, что Pyglet установлен правильно. Чтобы это проверить, просто запустите Python из командной строки и введите следующую команду:
Если импорт будет успешным, все готово к работе!

ЗНАКОМСТВО С PYGLET
ВАЖНЫЕ КОМПОНЕНТЫ

Мы кратко обсудим некоторые из наиболее важных модулей и пакетов Pyglet, которые мы будем использовать. Обратите внимание, что это всего лишь крошечная часть Фреймворка Pyglet. Пожалуйста, ознакомьтесь с Pyglet документацией, чтобы узнать больше о всех его возможностях, так как это выходит за рамки данной статьи.

Window (окно)

Модуль pyglet.window.Window предоставляет пользовательский интерфейс. Он используется для создания контекстного окна OpenGL. Класс Window представляет методы API для обработки различных событий, например, тех, что связаны с мышью и клавиатурой. Window можно отображать в обычном или в полноэкранном режиме. Вот простой пример создания экземпляра окна. Вы можете определить размер, указав ширину и высоту в качестве аргументов в конструкторе.

Цвет фона для изображения можно настроить с помощью OpenGL вызвав glClearColor, а именно:

Данный код устанавливает белый цвет фона. Первые три аргумента задают красный, зеленый и синий цвета. Последнее значение представляет собой альфа-канал. Следующий код создаст серый цвет фона.

На следующем рисунке показан скриншот созданного окна с серым цветом фона:

Image (изображение)

Модуль pyglet.image позволяет вывести изображение на экран. В следующем фрагменте кода показан способ вставки и отображения картинки в указанной позиции в пределах окна Pyglet.

В следующем разделе будут рассмотрены некоторые важные операции, поддерживаемые модулем pyglet.image.

Sprite (Спрайт)

Спрайт это конфигурация элементов изображения, определяемая пользователем.
Sprite — еще один важный модуль. Он используется для отображения изображения или кадра анимации в окне Pyglet, описанном ранее. Спрайт позволяет нам позиционировать изображение в любом месте Pyglet окна. Спрайт можно вращать и масштабировать. Можно создать несколько спрайтов одного и того же изображения, разместить их в разных местах или в одном окне с различной ориентацией.

Animation (анимация)

модуль Animation является частью пакета pyglet.image. Как следует из названия, pyglet.image.Animation используется для создания анимации из одного или более кадров изображения. Существуют различные способы создания анимации. Например, он может быть создан из последовательности изображений или при использовании AnimationFrame объектов. Анимация спрайтов может быть создана и отображена в окне Pyglet.

AnimationFrame

Создает отдельный кадр анимации из изображения. Анимация может быть создана из последовательности таких AnimationFrame объектов. Пример:

Clock (время)

Этот модуль используется для планирования функций, которые будут вызываться в указанное время. Например, следующий код вызывает метод moveObjects десять раз в секунду:

ВЫВОД ИЗОБРАЖЕНИЯ

В подразделе Image (изображение), мы научились загружать изображения с помощью image.blit. Тем не менее, использование blit является менее эффективным способом вывода изображения. Существует лучший метод показа изображения в созданном экземпляре Sprite. Несколько Sprite объектов могут быть созданы для вывода одного и того же изображения. Например, необходимо, чтобы одна картинка отображалась в разных местах в пределах окна. Каждому из этих изображений должны быть представлены отдельные экземпляры Sprite. Следующий простой пример просто загружает изображение и отображает экземпляр Sprite, выводя это изображение на экран.

Код в строке 3, загружает изображение с помощью вызова pyglet.image.load.
Sprite, соответствующий этому изображению, создается в строке 4.
Строка 6 устанавливает белый фон для окна.
On_draw представляет API метод, который вызывается, когда окно необходимо перезагрузить.

На следующем рисунке показан пример загрузки изображения в окно Pyglet.


Это окно показывает неподвижное изображение.

УПРАВЛЕНИЕ МЫШЬЮ И КЛАВИАТУРОЙ

Модуль window в Pyglet реализует некоторые API методы, которые позволяют пользователю управлять воспроизведением анимации. API методы, такие как on_mouse_press и on_key_press используются для захвата событий мыши и клавиатуры в процессе воспроизведения анимации. Эти методы могут быть использованы для выполнения определенных задач.

ДОБАВЛЕНИЕ ЗВУКОВЫХ ЭФФЕКТОВ

Pyglet поддерживает воспроизведения аудио и видео контента. Следующий код загружает медиа-файл и воспроизводит его в процессе отображения анимации.

Второй необязательный аргумент, предоставленный в строке 3, целиком декодирует медиа-файл в память во время загрузки. Это может быть важно, если медиа-файл должен проигрываться несколько раз в течение воспроизведения анимации. Метод API play() запускает потоковое воспроизведение медиа-файла.

АНИМАЦИЯ PYGLET

Фреймворк Pyglet предоставляет ряд модулей, необходимых для разработки анимации. Давайте теперь рассмотрим методы для создания 2D-анимации с использованием Pyglet.

ВОСПРОИЗВЕДЕНИЕ СУЩЕСТВУЮЩЕЙ АНИМАЦИИ

Если у вас уже есть файл анимации, например, в формате GIF, он может быть загружен и отображен непосредственно в Pyglet. Для этого используется API метод pyglet.image.load_animation.

ОТОБРАЖЕНИЕ СУЩЕСТВУЮЩЕЙ АНИМАЦИИ

Пример кода, приведенный далее, поможет Вам понять принцип использования Pyglet для просмотра анимации.

  • В строке 3 API метод image.load_animation создает экземпляр класса image.Animation, используя указанный файл анимации.
  • В строке 7 создается спрайт объект для этой анимации.
  • Окно Pyglet, созданное в строке 12, будет использоваться для отображения анимации.
  • animSprite задает высоту и ширину окна.
  • Цвет фона для окна устанавливается с помощью OpenGL вызововом glClearColor.
  • Далее, нам необходимо подключить файл анимации к нашему спрайту в окне Pyglet.
  • Pyglet.window определяет метод API on_draw который вызывается при возникновении события.
  • Чтобы вывести анимацию на экран, в строке 25 производится вызов draw ().
  • Код в строке 27 запускает это приложение.

Этот пример отображает анимацию в окне Pyglet. Вы можете использовать любой файл анимации, просто измените в строке 4 путь.

На следующем рисунке показаны некоторые кадры из файла анимации в различные интервалы времени.

АНИМАЦИЯ С ПОМОЩЬЮ ПОСЛЕДОВАТЕЛЬНОСТИ ИЗОБРАЖЕНИЙ

Animation.from_image_sequence — метод API, позволяющий создавать анимацию, используя множество последовательных изображений. Каждое из изображений последовательно отображается в виде кадра анимации, одно за другим. Время, отображения кадра анимации, указывается в качестве аргумента, при создании анимации объекта, либо оно может быть установлено после создания экземпляра анимации.

Давайте создадим несколько рисунков, последовательное отображение которых и будет анимацией, и выведем их на экран. Каждый из файлов изображений будет отображаться как кадр анимации указанное количество времени. Например, я буду использовать изображения напольных часов с маятником. Анимация заключается в колебании маятника часов. Эта анимация состоит из трех кадров изображений, в двух из них маятник располагается в противоположных сторонах. Вот как выглядят эти изображения:

Оживим маятник в наших часах:

  • Кортеж image_frames содержит пути изображений.
  • Вызов функции map в строке 8 создает объекты pyglet.image, соответствующие каждому из путей к изображениям, и сохраняет их в список.
  • В строке 16, создается анимация с использованием метода API — Animation.from_image_sequence. Этот метод принимает список объектов изображений в качестве первого аргумента. Второй дополнительный аргумент это время отображения каждого кадра в секундах. Установим его равным 0,33 секунды для того, чтобы общее время полного цикла анимации составляло 1 секунду. Таким образом, одно полное колебание маятника, в нашей анимации будет занимать одну секунду.

После запуска нашего примера, вы увидите окно, в котором будут отображены часы с маятником совершающим колебания. Цикл анимации будет продолжаться до того момента, пока окно не будет закрыто.

Анимации с Matplotlib

Используем библиотеку matplotlib для создания интересной анимации.

Изображение имитации дождя выполнено с помощью библиотеки Matplotlib, известной как прародитель пакетов для визуализации данных на python. Matplotlib имитирует капли дождя на поверхности путем анимирования масштаба и непрозрачности 50 точек графика разброса. В этой статье мы рассмотрим анимации в Matplotlib и несколько способов их создания.

Обзор

Matplotlib — это одна из самых известных библиотек Python с двумерной (2D) графикой. Многие начинают путешествие в мир визуализации данных с Matplotlib. С ее помощью можно с легкостью создавать графики, гистограммы, энергетические спектры, столбчатые диаграммы, графики погрешностей, графики разброса и многое другое. Она также интегрируется с такими библиотеками, как Pandas и Seaborn для создания более сложных визуализаций.

Некоторые особенности matplotlib:

  • Она разработана подобно MATLAB, поэтому переключаться между ними довольно просто.
  • Содержит множество расширений для визуализации.
  • Воспроизводит практически все графики (если приложить усилия).
  • Существует более десяти лет, соответственно обладает большой базой пользователей.

Однако в некоторых областях Matplotlib отстает от своих мощных противников.

  • Matplotlib обладает достаточно многословным императивным API.
  • Иногда встречаются слабые по стилю стандартные параметры.
  • Слабая поддержка веб и интерактивных графов.
  • Часто тормозит при наличии большого объема сложных данных.

Освежить знания о базовых функциях поможет шпаргалка по Matplotlib из Datacamp.

Анимации

Базовый класс animation в Matplotlib отвечает за анимацию. Он предоставляет основу, вокруг которой создается функциональность анимации. Для этого есть два основных интерфейса:

FuncAnimation создает анимацию с помощью повторения вызова функции func.

ArtistAnimation: анимация с использованием фиксированного набора объектов Artist .

FuncAnimation является более удобным способом. В документации можно ознакомиться с обоими способами подробнее. В этой статье мы будем использовать только инструмент FuncAnimation .

Требования

  • Установите модули, включая numpy и matplotlib
  • Установите ffmpeg или imagemagick для сохранения анимации в формате mp4 или gif.

Теперь можно перейти к созданию базовой анимации в Jupyter Notebooks. Код доступен в репозитории Github.

Базовая анимация: Движущаяся синусоидальная волна

Создадим базовую анимацию синусоидальной волны, движущейся по экрану, с помощью FuncAnimation . Исходный код для этой анимации взят из Руководства по анимации в Matplotlib. Рассмотрим входные данные, а затем разберем отдельные фрагменты кода.

  • В строках 7–9 создаем фигуру window с одной осью. Затем создаем пустой объект line, единственный из объектов, который будет изменяться в анимации. Объект line будет заполнен данными позже.
  • В строках 11–13 создаем функцию init , осуществляющую анимацию. Функция init инициализирует данные и устанавливает пределы оси.
  • В строках 14–18 определяем функцию, которая принимает количество кадров (i) в качестве параметра и создает синусоидальную волну (или любую другую анимацию), выполняющую движения в зависимости от значения i. Эта функция возвращает кортеж измененных объектов графика, который сообщает фреймворку анимации, какие части графика нужно анимировать.
  • В строке 20 создаем объект animation. Параметр blit гарантирует, что будут перерисованы только измененные части графика.
Читать:
1с какую лицензию выбрать однопользовательскую или многопользовательскую

Это базовый подход к созданию анимации в Matplotlib. При внесении небольших изменений в код можно создать более интересные визуализации. Рассмотрим некоторые из них.

Растущая спираль

Создадим движущуюся спираль, которая будет медленно разматываться, с помощью класса animation в matplotlib. Код схож с кодом графика синусоидальной волны, однако содержит несколько изменений.

График обновления в режиме реального времени

Графики обновления в режиме реального времени пригодятся при построении динамических величин, таких как данные о запасах, данные сенсоров и друге зависящие от времени данные. Создаем базовый граф, который обновляется автоматически при появлении новых данных в системе. Создадим график цен на акции компании за месяц.

Откройте терминал и запустите файл python. Получаем изображенный ниже график, который автоматически обновляется следующим образом:

Интервал составляет 1000 миллисекунд или одну секунду.

Анимация на 3D-графике

Создание 3D-графиков достаточно распространено, однако, что если анимировать угол обзора в этих графиках? Идея заключается в изменении обзора камеры и использовании каждого результирующего изображения для создания анимации. В Python Graph Gallery можно найти раздел, посвященный этой теме.

Создайте папку volcano в одном каталоге с notebook. Все изображения, которые будут использовать в анимации, сохранятся в этой папке.

Этот фрагмент кода создаст несколько файлов PNG в папке Volcano. Теперь используем ImageMagick для создания анимации из этих изображений. Откройте терминал, перейдите к папке Volcano и введите следующую команду:

Анимации с использованием модуля Celluloid

Celluloid — это модуль в Python, упрощающий процесс создания анимации в matplotlib. Эта библиотека создает фигуру matplotlib и Camera из нее. Затем она использует фигуру и делает снимок с камеры после создания каждого фрейма. Наконец создается анимация из всех захваченных фреймов.

Как сделать вращающуюся картинку на python

if flag == 1:
body.draw(win)
wheel1.draw(win)
wheel2.draw(win)
window.draw(win)

if flag == 0:
body.setOutline(‘white’)
body.setFill(‘white’)
wheel1.setFill(«white»)
wheel1.setOutline(‘white’)
wheel2.setFill(«white»)
wheel2.setOutline(‘white’)
window.setOutline(«white»)
window.setFill(«white»)
body.draw(win)
wheel1.draw(win)
wheel2.draw(win)
window.draw(win)

from graphics import *
import time
win = GraphWin(«Окно для графики», 400, 400)
win.setBackground(‘white’)
x = [10, 20, 30]
y = [100, 200, 300]
def car(x, y, color, flag):
body = Polygon(
Point(x, y),
Point(x, y — 10),
Point(x + 10, y — 20),
Point(x + 30, y — 20),
Point(x + 40, y — 10),
Point(x + 50, y — 10),
Point(x + 50, y))
wheel1 = Circle(Point(x + 8, y + 4), 4)
wheel2 = Circle(Point(x + 42, y + 4), 4)
window = Polygon(
Point(x + 20, y — 12),
Point(x + 20, y — 18),
Point(x + 30, y — 18),
Point(x + 36, y — 12))
body.setOutline(color)
body.setFill(color)
wheel1.setFill(«black»)
wheel2.setFill(«black»)
window.setOutline(«cyan»)
window.setFill(«cyan»)

if flag == 1:
body.draw(win)
wheel1.draw(win)
wheel2.draw(win)
window.draw(win)

body.setOutline(‘white’)
body.setFill(‘white’)
wheel1.setFill(«white»)
wheel1.setOutline(‘white’)
wheel2.setFill(«white»)
wheel2.setOutline(‘white’)
window.setOutline(«white»)
window.setFill(«white»)
body.draw(win)
wheel1.draw(win)
wheel2.draw(win)
window.draw(win)

for i in range(20):
car(x[0], y[0], ‘green’, 1)
car(x[1], y[1], ‘green’, 1)
car(x[2], y[2], ‘green’, 1)

time.sleep(1)
car(x[0], y[0], ‘green’, 0)
car(x[1], y[1], ‘green’, 0)
car(x[2], y[2], ‘green’, 0)
x[0] += 10
x[1] += 10
x[2] += 10
win.getMouse()
win.close()

Python Tkinter Animation

In this tutorial, we are going to learn about Python Tkinter Animation. Here we will understand how to create animations using Tkinter in python and we will cover different examples related to animation. And we will also cover these topics

  • Python tkinter animation
  • Python tkinter loading animation
  • Python tkinter timer animation
  • Python tkinter matplotlib animation
  • Python tkinter Simple animation
  • Python tkinter Button animation

Python Tkinter Animation

In this section, we are learning about Python Tkinter Animation. By animation, we mean to create an illusion of moment on any object.

In the following code, we have taken two starting positions of “x” & “y” and give a window some width and height and inside that, we made a ball using canvas and to add a moment to the ball just inside a screen space what we created.

Code:

Here are some of the main highlights of the given code.

  • Canvas.create_oval() is used to give the Oval shape to the ball.
  • Canvas.move() = Motion of the ball
  • time.sleep() it suspends execution for a given number of seconds.

Output:

After running the above code, we can see the following output in which a ball is changing its position. The ball is going up and down and showing an example of animation.

Python Tkinter Loading Animation

In this section, we are learning about python Tkinter loading animation. By loading, we mean the processing of any page or loading any data over the internet.

Code:

In the following code, we made a processing bar that runs after clicking on the run button and it shows us loading in page.

  • Progressbar() is used to display the loading bar.
  • mode=’determinate’ shows an indicator that moves starting point to the ending point.

Output:

After running the following code, we get the following output which shows us how loading is done in python Tkinter. Here in this, we can see when a user clicks on the “Run” button a loading of data is started on a page.

Python tkinter timer animation

In this section, we are learning about python Tkinter timer animation. By timer, we mean to set any time count for our alert to remember our task. The best example to understand about the timer is an alarm which we use in our common routine.

Code:

In the following code, we imported a time library that used to define hours, minutes & seconds. Here a user is setting up some time counter which does works like giving an alert after time is up.

Output:

After running the above code, we can see a user has set some timer for few seconds and it is working as per an order of timer.

Python tkinter matplotlib animation

Matplotlib is a Python library used for plotting graphs. It is an open-source library we can use freely. It is written in Python Language. Here is a tool that is specifically used to work on the function of matplotlib named “MATLAB“. In here Numpy is its numerical mathematical extension used to represent graphical values of its axis.

Code:

  • plt.bar() is used to represent that the bar graph is to be plotted by using X-axis and Y-axis values.
  • ptl.xlabel() is used to represent the x-axis.
  • plt.ylabel() is used to represent the y-axis.
  • plt.title() is used for giving the title to the bar graph.

Output:

After running the following code, we see the bar graph is generated. Here are the months and sales amount variables that represent the x-axis and y-axis values of data points and the bar are representing the total sale in a month. In the following gif, we can see the x-axis and y-axis are giving some values when we hover the mouse on a bar.

Python tkinter Simple animation

In the following section, we are learning about python Tkinter’s simple animation. In this, we have made a button through which clicking on that button changes the background color.

Code:

Ïn the following code we use a random library that gives a random choice to our options and at the top, we added a button with the text “click me” on that which changes the color of the background randomly.

  • random.choice() return a list with randomly select color.
  • ws.title is used for giving a title to the window.
  • Button() is used to run the command to generate random colors in this.

Output:

After running the above code, we can run a simple animation with help of python Tkinter.

Python tkinter Button animation

in this section, we are learning about the Python Tkinter animation button.

We here use button animation as a feature that we can use in any gaming application or any similar application to turn on or to turn off that function. Here button is working like a normal switch which we used in our daily life to have access to switch on the light of the house.

Code:

In the above code, first, we have created a button object “a1” and then, we are using the IF statement to check the state of the button. In the end, we are using the state to change the behavior of the button to get the desired result.

Output:

After running the following code, we get the following output in which we see when we click on them the button will be disabled. And when we click on them again, the button will get enabled.

You may also like to read the following articles.

So, in this tutorial, we discuss Python Tkinter Animation. Here is the list of the examples that we have covered.

  • Python Tkinter animation
  • Python Tkinter animation tutorial
  • Python Tkinter loading animation
  • Python Tkinter timer animation
  • Python Tkinter matplotlib animation
  • Python Tkinter Simple animation
  • Python Tkinter Button animation

Bijay Kumar MVP

Entrepreneur, Founder, Author, Blogger, Trainer, and more. Check out my profile.

Python Tkinter rotate image animation

I have a PhotoImage that I created using PIL and then added to a TKinter canvas. The image shows up fine. However, I can’t get the PIL rotate function to work correctly. Here is my code:

However, the image just does not show up in this case. I want to be able to animate the rotation of an image, but I can’t even get a rotation to work at all! Any suggestions are greatly appreciated.

Edit: correction, the rotation will not work after it’s already been added to the screen

2 Answers 2

Here is an example which rotates an image using Python3:

For a Python2 version, see the revision history.

Here’s unutbu’s answer above, but in Python 3:

It took me a while to get this working, so I figured I would share.

    The Overflow Blog
Linked
Related
Hot Network Questions

Subscribe to RSS

To subscribe to this RSS feed, copy and paste this URL into your RSS reader.

Site design / logo © 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2023.3.13.43307

By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.

Похожие статьи