Python Resim Kırpma sorunu

Merhaba,

Üzerinde çalıştığım bir projede yardıma ihtiyacım var. Bir resmi belirli periyotlarla ( mesela 2 sn. ) kırpıp ekranda ( tam ekran olmalı ) göstermem gerekiyor. Örneğin; 11811x11811 çözünürlüğünde bir resmi 1440x900 boyutlarında kırpıp her 2sn de bir yatayda kırptığım bölgeyi değiştirip bunu ekranda göstermem gerekiyor.

Bu arada raspberry pi3 ile çalışıyorum.

Kod:

import tkinter as tk
from PIL import Image, ImageTk
import RPi.GPIO as GPIO
import time

deneme=tk.Tk()
deneme.geometry("1440,900")
denem.attributes("-fullscreen, True")

a=0
b=0

while True:
	resim1=Image.open("/home/pi/Desktop/resim.jpg")
	alan=(a,b,1440+a,900+b)
	resim2=resim1.crop(alan)
	resim3=ImageTk.PhotoImage(resim2)
	goster=tk.Label(deneme, image=resim3)
	goster.place(x=0,y=0,width=1440,height=900)
	a=a+10
	b=0
	time.sleep(2)

Yazdığım kod güncelleme işlemini gerçekleştirmiyor. Bu konuda yardım eder misiniz?

Merhaba,

Ekranda resim göstermek için PyGame kullanmanızı öneririm.
Örnek: https://gist.github.com/laszlokuehl/2e7e7ce213cf87d4e9bf501a688cabd0#file-rd-py-L73-L77

Merhaba.

Sürekli yeni PhotoImage oluşturup ana ekrana eklediğiniz için güncelleme olmuyor olabilir. Şöyle bir kod deneyebilir misiniz, bu kodda her seferinde yeni bir pencere aracı oluşturmak yerine bunu bir kere oluşturup her seferinde sadece image niteliğini güncelliyorum:

import tkinter as tk
from PIL import Image, ImageTk
import RPi.GPIO as GPIO
import time

deneme=tk.Tk()
deneme.geometry("1440,900")
denem.attributes("-fullscreen, True")

a=0
b=0

goster=tk.Label(deneme)
goster.place(x=0,y=0,width=1440,height=900)

while True:
	resim1=Image.open("/home/pi/Desktop/resim.jpg")
	alan=(a,b,1440+a,900+b)
	resim2=resim1.crop(alan)
	resim3=ImageTk.PhotoImage(resim2)
	goster.configure(image=resim3)
	a=a+10
	b=0
	time.sleep(2)

Not: Kodu çalıştırmadım, hata verebilir. Ancak mantık bu şekilde olmalı.

İyi çalışmalar.

Burada sorduktan sonra, programı şu şekilde düzenledim. Sorun çözüldü.

Kod:

import tkinter as tk
from PIL import Image, ImageTk
import RPi.GPIO as GPIO
import time

deneme=tk.Tk()
deneme.geometry("1440,900")
denem.attributes("-fullscreen, True")

a=0
b=0

def reskirp(x1,y1):
    alan=(x1,y1,1440+x1,900+y1)
     
    resim=Image.open("/home/pi/Desktop/resim.jpg")
    kirp=resim.crop(alan)
    son=ImageTk.PhotoImage(kirp)
    return son

def goster(res):
    goruntu=tk.Label(ekran, image=res)
    goruntu.place(x=0,y=0,width=1440,height=900)
    goruntu.update()

while True:
    img=reskirp(a,0)
    goster(img)
    time.sleep(1)
    a=a+50

Anlamadığım bir nokta time.sleep(1) komutu net 1 sn değil daha uzun gibi geldi.

Pygame kütüphanesinin detaylarına da bakacağım teşekkür ederim.

Benzer problemle karşılaşan olursa programı referans olarak görsün diye ekledim.