반응형
PySide6에서 GIF 이미지를 반전시키는 방법
📝 소개
PySide6을 사용하여 GUI를 개발할 때, GIF 파일을 동적으로 처리하는 방법이 필요할 수 있습니다. 예를 들어, GIF 애니메이션의 색상을 반전(Invert)하여 표시하고 싶다면 어떻게 해야 할까요? 일반적인 정적 이미지(PNG, JPEG)는 쉽게 반전할 수 있지만, GIF는 여러 개의 프레임으로 구성된 애니메이션이므로 특별한 처리 방법이 필요합니다. 이번 포스팅에서는 PySide6에서 GIF의 각 프레임을 실시간으로 반전하는 방법을 살펴보겠습니다.
🎯 목표
- PySide6에서 GIF 파일을 로드하고 애니메이션으로 표시하는 방법을 이해한다.
- GIF의 각 프레임을 실시간으로 반전하는 방법을 배운다.
- QMovie와 QPixmap, QImage를 활용하는 방법을 익힌다.
📌 GIF 반전 기능 구현하기
GIF의 색상을 반전하려면 다음 단계를 따라야 합니다.
- QMovie를 사용하여 GIF를 로드한다.
- QLabel을 사용하여 GIF를 화면에 표시한다.
- frameChanged 시그널을 이용하여 프레임이 변경될 때마다 반전된 이미지를 적용한다.
- invertPixels()을 사용하여 이미지 색상을 반전한다.
- 반전된 이미지를 QPixmap으로 변환하여 QLabel에 적용한다.
📌 예제 코드
아래는 PySide6을 사용하여 GIF 파일을 로드하고, 각 프레임을 실시간으로 반전하여 표시하는 코드입니다.
from PySide6.QtWidgets import QApplication, QLabel, QMainWindow, QVBoxLayout, QWidget
from PySide6.QtGui import QPixmap, QImage
from PySide6.QtCore import QMovie
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("GIF Inversion Example")
self.resize(400, 400)
# QLabel 생성 (GIF를 표시할 영역)
self.label = QLabel(self)
self.label.setFixedSize(300, 300)
self.label.setScaledContents(True)
# QMovie로 GIF 로드
self.movie = QMovie("example.gif") # <-- 반전할 GIF 파일 경로
self.movie.frameChanged.connect(self.invert_frame) # 프레임 변경 시 반전
self.label.setMovie(self.movie)
# GIF 재생 시작
self.movie.start()
def invert_frame(self):
"""현재 프레임을 가져와 색상을 반전하여 QLabel에 적용"""
current_frame = self.movie.currentPixmap()
if not current_frame.isNull():
image = current_frame.toImage()
image.invertPixels() # 색상 반전
inverted_pixmap = QPixmap.fromImage(image)
self.label.setPixmap(inverted_pixmap) # 반전된 프레임을 QLabel에 표시
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())
반응형
📌 코드 설명
단계내용
1. QMovie 사용 | GIF 파일을 QMovie("example.gif")로 로드하여 QLabel에 적용 |
2. frameChanged 이벤트 사용 | GIF의 프레임이 변경될 때마다 invert_frame 메서드 호출 |
3. 현재 프레임 가져오기 | self.movie.currentPixmap()을 사용하여 현재 프레임을 QPixmap으로 가져옴 |
4. 이미지 반전 | image.invertPixels()을 호출하여 색상을 반전 |
5. 반전된 이미지 적용 | self.label.setPixmap(inverted_pixmap)을 통해 QLabel에 반전된 이미지 표시 |
📌 실행 결과
✅ GIF 파일이 정상적으로 재생되면서, 각 프레임이 실시간으로 반전됩니다.
✅ 사용자가 추가적인 조작 없이 자동으로 반전된 GIF를 볼 수 있습니다.
✅ GIF의 색상을 반전하여 특수 효과를 적용할 수 있습니다.
📌 주의할 점
- GIF 저장 기능 없음
- PySide6은 GIF를 다시 저장하는 기능을 기본적으로 제공하지 않음.
- 반전된 GIF를 저장하려면 PIL(Pillow) 라이브러리를 사용해야 함.
- 성능 고려
- 고해상도 GIF는 프레임마다 실시간 반전되므로 속도가 느려질 수 있음.
- 최적화를 위해 GIF 크기를 줄이거나, 스레드를 사용하여 비동기 처리 가능.
반응형
'코딩취미 > Python' 카테고리의 다른 글
PySide6에서 QTreeView 스타일시트 선택자 정리 및 활용법 (0) | 2025.02.20 |
---|---|
PySide6에서 화면 로딩 중 마우스 포인터 변경하는 방법 (0) | 2025.02.20 |
PySide6를 사용하여 MDI 인터페이스에서 수식 표현하기 (0) | 2025.02.19 |
PySide6에서 sizeHint()와 resizeEvent의 크기 차이 이해하기 (0) | 2025.02.19 |
PySide6 QComboBox 아이템 우측 정렬 적용 방법 (0) | 2025.02.18 |