dr1p1m4g3/dr1p1m4g3_dev.py

1050 lines
60 KiB
Python

####################################################################################################################################### SOF
import os
import shutil
import sys
from curses import (A_REVERSE, KEY_DOWN, KEY_ENTER, KEY_LEFT, KEY_RIGHT,
KEY_UP, ascii, wrapper)
import curses
from imghdr import what as is_file_an_image
from os import chdir, listdir, path
from pathlib import Path
from random import randint, shuffle
from time import sleep
from tkinter import *
from tkinter import filedialog, ttk, font
from tkinter.filedialog import askopenfile
from PIL import Image, ImageTk
###########################################################################################################################################
class DR1P1M4G3():
#########################################################################################################################################
def __init__(self,USERPATH=None,IMGINDEX=None,RENDMODE=None,PUMPMODE=None,PUMPTIME=None,USERSHUF=None):
#######################################################################################################################################
if USERPATH:
self.DIR_IMAGE_LIST=USERPATH
self.IMAGE_DIR_INDEX=[]
self.USER_USERPATH=USERPATH
else:
self.USER_USERPATH=""
self.IMAGE_DIR="./"
#######################################################################################################################################
if IMGINDEX:
self.IMAGE_INDEX=IMGINDEX
self.USER_IMGINDEX=IMGINDEX
else:
self.USER_IMGINDEX=0
self.IMAGE_INDEX=0
#######################################################################################################################################
if RENDMODE:
self.REDIMENSION=RENDMODE
self.USER_RENDMODE=RENDMODE
else:
self.USER_RENDMODE=0
self.REDIMENSION=0
#######################################################################################################################################
if PUMPMODE:
self.PUMPMODE=PUMPMODE
self.USER_PUMPMODE=PUMPMODE
else:
self.USER_PUMPMODE=False
self.PUMP_AUTO=False
#######################################################################################################################################
if not PUMPTIME==float(0.5):
self.PUMPTIME=PUMPTIME
self.USER_PUMPTIME=PUMPTIME
self.PUMP_INTERVAL=0.5
else:
self.USER_PUMPTIME=0
self.PUMP_INTERVAL=0.5
#######################################################################################################################################
if USERSHUF:
self.USERSHUF=USERSHUF
self.USER_USERSHUF=False
else:
self.USERSHUF=False
self.USER_USERSHUF=False
#######################################################################################################################################
self.REFRESH=0
self.RENDER_TEXT=True
self.LAST_DIRECTION=-1
self.ISAVE_DIRECTORY=[ str(f'{x}_ISAVE') for x in self.DIR_IMAGE_LIST ]
self.IDROP_DIRECTORY=[ str(f'{x}_IDROP') for x in self.DIR_IMAGE_LIST ]
self.IMAGE_LIST=[]
self.MARKED_FILES=[]
self.MARKED=False
self.gx=0
self.gy=0
self.GX=10
self.GY=10
self.xy=[0,0]
self.GRID_MODE=False
self.moverect=''
self.cellrect=[0,[],[]]
self.XX=0
self.YY=0
self.NORMAL_TEXT_COLOR=f'#{hex(randint(0,255))[2:].zfill(2)}{hex(randint(0,255))[2:].zfill(2)}{hex(randint(0,255))[2:].zfill(2)}'
self.NORMAL_TEXT_FONTS=['Academy Engraved LET', 'Al Bayan', 'Al Nile', 'Al Tarikh', 'American Typewriter', 'Andale Mono', 'Apple Braille', 'Apple Chancery', 'Apple Color Emoji', 'Apple SD Gothic Neo', 'Apple Symbols', 'AppleGothic', 'AppleMyungjo', 'Arial', 'Arial Black', 'Arial Hebrew', 'Arial Hebrew Scholar', 'Arial Narrow', 'Arial Rounded MT Bold', 'Arial Unicode MS', 'Avenir', 'Avenir Next', 'Avenir Next Condensed', 'Ayuthaya', 'Baghdad', 'Bangla MN', 'Bangla Sangam MN', 'Baskerville', 'Beirut', 'Big Caslon', 'Bodoni 72', 'Bodoni 72 Oldstyle', 'Bodoni 72 Smallcaps', 'Bodoni Ornaments', 'Bradley Hand', 'Brush Script MT', 'Chalkboard', 'Chalkboard SE', 'Chalkduster', 'Charter', 'Cochin', 'Comic Sans MS', 'Copperplate', 'Corsiva Hebrew', 'Courier New', 'Damascus', 'DecoType Naskh', 'Devanagari MT', 'Devanagari Sangam MN', 'Didot', 'DIN Alternate', 'DIN Condensed', 'Diwan Kufi', 'Diwan Thuluth', 'Euphemia UCAS', 'Farah', 'Farisi', 'FiraCode Nerd Font', 'FiraCode Nerd Font Mono', 'FuraCode Nerd Font', 'FuraCode Nerd Font Mono', 'Futura', 'Galvji', 'GB18030 Bitmap', 'Geeza Pro', 'Geneva', 'Georgia', 'Gill Sans', 'Grantha Sangam MN', 'Gujarati MT', 'Gujarati Sangam MN', 'Gurmukhi MN', 'Gurmukhi MT', 'Gurmukhi Sangam MN', 'Heiti SC', 'Heiti TC', 'Helvetica', 'Helvetica Neue', 'Herculanum', 'Hiragino Maru Gothic ProN', 'Hiragino Mincho ProN', 'Hiragino Sans', 'Hiragino Sans GB', 'Hoefler Text', 'Impact', 'InaiMathi', 'ITF Devanagari', 'ITF Devanagari Marathi', 'Kailasa', 'Kannada MN', 'Kannada Sangam MN', 'Kefa', 'Khmer MN', 'Khmer Sangam MN', 'Kohinoor Bangla', 'Kohinoor Devanagari', 'Kohinoor Gujarati', 'Kohinoor Telugu', 'Kokonor', 'Krungthep', 'KufiStandardGK', 'Lao MN', 'Lao Sangam MN', 'Lucida Grande', 'Luminari', 'Malayalam MN', 'Malayalam Sangam MN', 'Marker Felt', 'Menlo', 'Microsoft Sans Serif', 'Mishafi', 'Mishafi Gold', 'Monaco', 'Mshtakan', 'Mukta Mahee', 'Muna', 'Myanmar MN', 'Myanmar Sangam MN', 'Nadeem', 'New Peninim MT', 'Noteworthy', 'Noto Nastaliq Urdu', 'Noto Sans Kannada', 'Noto Sans Myanmar', 'Noto Sans Oriya', 'Noto Serif Myanmar', 'Optima', 'Oriya MN', 'Oriya Sangam MN', 'Palatino', 'Papyrus', 'Party LET', 'Phosphate', 'PingFang HK', 'PingFang SC', 'PingFang TC', 'Plantagenet Cherokee', 'PT Mono', 'PT Sans', 'PT Sans Caption', 'PT Sans Narrow', 'PT Serif', 'PT Serif Caption', 'Raanana', 'Rockwell', 'Sana', 'Sathu', 'Savoye LET', 'Shree Devanagari 714', 'SignPainter', 'Silom', 'Sinhala MN', 'Sinhala Sangam MN', 'Skia', 'Snell Roundhand', 'Songti SC', 'Songti TC', 'Source Code Pro', 'STIX Two Math', 'STIX Two Text', 'STSong', 'Sukhumvit Set', 'Symbol', 'Tahoma', 'Tamil MN', 'Tamil Sangam MN', 'Telugu MN', 'Telugu Sangam MN', 'Thonburi', 'Times New Roman', 'Trattatello', 'Trebuchet MS', 'Verdana', 'Waseem', 'Webdings', 'Wingdings', 'Wingdings 2', 'Wingdings 3', 'Zapf Dingbats', 'Zapfino']
self.NORMAL_TEXT_FONT=self.NORMAL_TEXT_FONTS[randint(0,len(self.NORMAL_TEXT_FONTS)-1)]
self.NORMAL_TEXT_SIZE=25
self.AUTOCOLOR={'N':[0,0,0],'L':[['blue2','red2','purple2'],['midnight blue','navy blue'],['goldenrod1','goldenrod2','goldenrod3']]}
self.main()
#########################################################################################################################################
def randofontcolors(self,n):
self.NORMAL_TEXT_COLOR=f'#{hex(randint(0,255))[2:].zfill(2)}{hex(randint(0,255))[2:].zfill(2)}{hex(randint(0,255))[2:].zfill(2)}'
self.NORMAL_TEXT_FONTS=list(font.families())
self.NORMAL_TEXT_FONT=self.NORMAL_TEXT_FONTS[randint(0,len(self.NORMAL_TEXT_FONTS)-1)]
self.NORMAL_TEXT_SIZE=randint(15,35)
[ self.canvas.delete(x) for x in self.canvas.find_all() if not 'activeimage' in self.canvas.itemconfig(x) ]
Buffer = 'filename: {}\nredimension: {} - screen: {}x{} - image: {}x{} - diff: {}x{} - resize: {}x{}\nfile: {}/{} - interval: {}'.format(self.IMAGE_LIST[self.IMAGE_INDEX],self.REDIMENSION,self.root.winfo_screenwidth(),self.root.winfo_screenheight(),self.image.width,self.image.height,self.root.winfo_screenwidth()-self.image.width,self.root.winfo_screenheight()-self.image.height,self.XX,self.YY,self.IMAGE_INDEX,len(self.IMAGE_LIST)-1,self.PUMP_INTERVAL)
Buffer+= f'\n{self.xy[0]}x{self.GX} / {self.xy[1]}y{self.GY}'
[ self.canvas.delete(x) for x in self.canvas.find_all() if not 'activeimage' in self.canvas.itemconfig(x) ]
self.texting=self.canvas.create_text(self.root.winfo_screenwidth()/2, 85, text=Buffer,fill=self.NORMAL_TEXT_COLOR,justify='center',font=(self.NORMAL_TEXT_FONT, self.NORMAL_TEXT_SIZE))
self.root.title(Buffer)
self.root.update()
#########################################################################################################################################
def autocolor(self,n):
try:
self.AUTOCOLOR['N'][n]+=1
if self.AUTOCOLOR['N'][n]>=len(self.AUTOCOLOR['L'][n]): self.AUTOCOLOR['N'][n]=0
return self.AUTOCOLOR['L'][n][self.AUTOCOLOR['N'][n]]
except:
return -1.666
#########################################################################################################################################
def fliptext(self,s):
self.RENDER_TEXT=not self.RENDER_TEXT
if self.RENDER_TEXT:
print(f"<<<<< text rendering enabled >>>>>")
self.canvas.delete('all')
self.loadimage()
else:
print(f"<<<<< text rendering disabled >>>>>")
self.canvas.delete('all')
self.loadimage()
#########################################################################################################################################
def isave(self,s):
if not self.MARKED:
if self.MARKED_FILES[self.IMAGE_INDEX]==1:
print(f"<<<<< unmarking from save {self.IMAGE_LIST[self.IMAGE_INDEX]} >>>>>")
self.MARKED_FILES[self.IMAGE_INDEX]=0
self.loadimage()
return
else:
print(f"<<<<< marked to save {self.IMAGE_LIST[self.IMAGE_INDEX]} >>>>>")
self.MARKED_FILES[self.IMAGE_INDEX]=1
if self.LAST_DIRECTION:
self.right(self)
else:
self.left(self)
else:
for SIN,VAL in enumerate(self.MARKED_FILES):
if VAL==1:
if not os.path.exists(self.ISAVE_DIRECTORY[self.IMAGE_DIR_INDEX[SIN]]):
os.mkdir(self.ISAVE_DIRECTORY[self.IMAGE_DIR_INDEX[SIN]])
shutil.move(self.IMAGE_LIST[SIN],self.ISAVE_DIRECTORY[self.IMAGE_DIR_INDEX[SIN]])
print(f"<<<<< moved {self.IMAGE_LIST[SIN]} to {self.ISAVE_DIRECTORY[self.IMAGE_DIR_INDEX[SIN]]} >>>>>")
#########################################################################################################################################
def idrop(self,s):
if not self.MARKED:
if self.MARKED_FILES[self.IMAGE_INDEX]==-1:
print(f"<<<<< unmarking from drop {self.IMAGE_LIST[self.IMAGE_INDEX]} >>>>>")
self.MARKED_FILES[self.IMAGE_INDEX]=0
self.loadimage()
return
else:
print(f"<<<<< marked to drop {self.IMAGE_LIST[self.IMAGE_INDEX]} >>>>>")
self.MARKED_FILES[self.IMAGE_INDEX]=-1
if self.LAST_DIRECTION:
self.right(self)
else:
self.left(self)
else:
for DIN,VAL in enumerate(self.MARKED_FILES):
if VAL==-1:
if not os.path.exists(self.IDROP_DIRECTORY[self.IMAGE_DIR_INDEX[DIN]]):
os.mkdir(self.IDROP_DIRECTORY[self.IMAGE_DIR_INDEX[DIN]])
shutil.move(self.IMAGE_LIST[DIN],self.IDROP_DIRECTORY[self.IMAGE_DIR_INDEX[DIN]])
print(f"<<<<< moved {self.IMAGE_LIST[DIN]} to {self.IDROP_DIRECTORY[self.IMAGE_DIR_INDEX[DIN]]} >>>>>")
#########################################################################################################################################
def shuffling(self,s):
self.USER_USERSHUF=not self.USER_USERSHUF
if self.USER_USERSHUF:
self.getfilelist()
self.loadimage()
print(f"<<<<< image shuffling enabled >>>>>")
else:
print(f"<<<<< image shuffling disabled >>>>>")
########################################################################################################################################
def escaped(self,s):
self.root.destroy()
sys.exit(0)
#########################################################################################################################################
def markedlist(self,s):
print(f"<<<<< batch processing marked list >>>>>")
self.MARKED=True
self.isave(self)
self.idrop(self)
self.MARKED=False
self.REFRESH=0
if self.LAST_DIRECTION:
self.right(self)
else:
self.left(self)
#########################################################################################################################################
def autopump(self,s):
self.PUMP_AUTO = not self.PUMP_AUTO
if self.PUMP_AUTO:
while self.PUMP_AUTO:
self.right(self)
if self.PUMP_INTERVAL < 0.01: self.PUMP_INTERVAL+=0.5
sleep(self.PUMP_INTERVAL)
print(self.PUMP_AUTO)
#########################################################################################################################################
def redimension(self,s):
self.canvas.delete('all')
self.REDIMENSION+=1
if self.REDIMENSION>4: self.REDIMENSION=0
self.loadimage()
#########################################################################################################################################
def loadimage(self):
self.canvas.delete('all')
try:
try:
self.image=Image.open(self.IMAGE_LIST[self.IMAGE_INDEX])
except:
pass
IMG_X_OG=self.image.width
IMG_Y_OG=self.image.height
x=self.root.winfo_screenwidth()
y=self.root.winfo_screenheight()
xx=self.image.width
yy=self.image.height
REDIMENSION=""
#####################################################################################################################################
if self.REDIMENSION==0:
self.canvas.delete('all')
if xx>yy:
rr=xx/yy
if xx>x:
REDIMENSION="[ image x screen-constrained ]"
xx=x
yy=int(x*rr)
if yy>y:
REDIMENSION="[ image y screen-constrained ]"
yy=y
xx=int(y*rr)
else:
rr=yy/xx
if yy>y:
REDIMENSION="[ image y screen-constrained ]"
yy=y
xx=int(y*rr)
if xx>x:
REDIMENSION="[ image x screen-constrained ]"
xx=x
yy=int(x*rr)
try:
self.resized_image=self.image.resize((xx,yy),Image.Resampling.LANCZOS)
self.photo_resized=ImageTk.PhotoImage(self.resized_image)
self.canvas.create_image(x/2-xx/2,0,anchor=NW,image=self.photo_resized)
except:
if self.LAST_DIRECTION:
self.right(self)
else:
self.left(self)
self.XX=xx; self.YY=yy
Buffer = 'filename: {}\nredimension: {} - screen: {}x{} - image: {}x{} - diff: {}x{} - resize: {}x{}\nfile: {}/{} - interval: {}'.format(self.IMAGE_LIST[self.IMAGE_INDEX],REDIMENSION,self.root.winfo_screenwidth(),self.root.winfo_screenheight(),self.image.width,self.image.height,x-IMG_X_OG,y-IMG_Y_OG,xx,yy,self.IMAGE_INDEX,len(self.IMAGE_LIST)-1,self.PUMP_INTERVAL)
Buffer+= f'\n{self.xy[0]}x{self.GX} / {self.xy[1]}y{self.GY}'
if self.RENDER_TEXT:
COLOR=''
if self.MARKED_FILES[self.IMAGE_INDEX]==0:
COLOR=self.NORMAL_TEXT_COLOR
elif self.MARKED_FILES[self.IMAGE_INDEX]==1:
COLOR='green'
self.canvas.create_rectangle(0,0,self.root.winfo_screenwidth(),self.root.winfo_screenheight(), outline=COLOR, width=25,)
elif self.MARKED_FILES[self.IMAGE_INDEX]==-1:
COLOR='red'
self.canvas.create_rectangle(0,0,self.root.winfo_screenwidth(),self.root.winfo_screenheight(), outline=COLOR, width=25,)
self.texting=self.texting=self.canvas.create_text(self.root.winfo_screenwidth()/2, 85, text=Buffer,fill=COLOR,justify='center',font=(self.NORMAL_TEXT_FONT, self.NORMAL_TEXT_SIZE))
self.root.title(Buffer)
self.root.update()
#####################################################################################################################################
elif self.REDIMENSION==1:
self.canvas.delete('all')
REDIMENSION="[ image x screen-constrained ]"
xx=self.image.width
yy=self.image.height
if xx>yy:
rr=xx/yy
if xx>x:
xx=x
yy=int(y*rr)
else:
xx=x
yy=int(x/rr)
else:
rr=xx/yy
xx=x
yy=int(x/rr)
offset=0
if yy>self.root.winfo_screenheight():
for i in range(100):
if not self.REDIMENSION==1:
self.canvas.delete('all')
sleep(0.1)
self.loadimage()
break
offset=int(i*(yy-self.root.winfo_screenheight())/100)
self.resized_image=self.image.resize((xx,yy),Image.LANCZOS)
self.cropped_image=self.resized_image.crop([0,0+offset,x,y+offset])
self.photo_resized=ImageTk.PhotoImage(self.cropped_image)
self.canvas.create_image(0,0,anchor=NW,image=self.photo_resized)
self.canvas.configure(bg='black')
self.XX=xx; self.YY=yy
Buffer = 'filename: {}\nredimension: {} - screen: {}x{} - image: {}x{} - diff: {}x{} - resize: {}x{}\nfile: {}/{} - interval: {}'.format(self.IMAGE_LIST[self.IMAGE_INDEX],REDIMENSION,self.root.winfo_screenwidth(),self.root.winfo_screenheight(),self.image.width,self.image.height,x-IMG_X_OG,y-IMG_Y_OG,xx,yy,self.IMAGE_INDEX,len(self.IMAGE_LIST)-1,self.PUMP_INTERVAL)
Buffer+= f'\n{self.xy[0]}x{self.GX} / {self.xy[1]}y{self.GY}'
if self.RENDER_TEXT:
COLOR=''
if self.MARKED_FILES[self.IMAGE_INDEX]==0:
COLOR=self.NORMAL_TEXT_COLOR
elif self.MARKED_FILES[self.IMAGE_INDEX]==1:
COLOR='green'
self.canvas.create_rectangle(0,0,self.root.winfo_screenwidth(),self.root.winfo_screenheight(), outline=COLOR, width=25,)
elif self.MARKED_FILES[self.IMAGE_INDEX]==-1:
COLOR='red'
self.canvas.create_rectangle(0,0,self.root.winfo_screenwidth(),self.root.winfo_screenheight(), outline=COLOR, width=25,)
self.texting=self.canvas.create_text(self.root.winfo_screenwidth()/2, 85, text=Buffer,fill=COLOR,justify='center',font=("Arial", 25))
self.root.title(Buffer)
print(f"{offset} / {x} - {i}")
self.root.update()
else:
self.resized_image=self.image.resize((xx,yy),Image.LANCZOS)
self.photo_resized=ImageTk.PhotoImage(self.resized_image)
self.canvas.create_image(0,0,anchor=NW,image=self.photo_resized)
self.canvas.delete('all')
self.canvas.configure(bg='black')
self.XX=xx; self.YY=yy
Buffer = 'filename: {}\nredimension: {} - screen: {}x{} - image: {}x{} - diff: {}x{} - resize: {}x{}\nfile: {}/{} - interval: {}'.format(self.IMAGE_LIST[self.IMAGE_INDEX],REDIMENSION,self.root.winfo_screenwidth(),self.root.winfo_screenheight(),self.image.width,self.image.height,x-IMG_X_OG,y-IMG_Y_OG,xx,yy,self.IMAGE_INDEX,len(self.IMAGE_LIST)-1,self.PUMP_INTERVAL)
Buffer+= f'\n{self.xy[0]}x{self.GX} / {self.xy[1]}y{self.GY}'
if self.RENDER_TEXT:
COLOR=''
if self.MARKED_FILES[self.IMAGE_INDEX]==0:
COLOR=self.NORMAL_TEXT_COLOR
elif self.MARKED_FILES[self.IMAGE_INDEX]==1:
COLOR='green'
self.canvas.create_rectangle(0,0,self.root.winfo_screenwidth(),self.root.winfo_screenheight(), outline=COLOR, width=25,)
elif self.MARKED_FILES[self.IMAGE_INDEX]==-1:
COLOR='red'
self.canvas.create_rectangle(0,0,self.root.winfo_screenwidth(),self.root.winfo_screenheight(), outline=COLOR, width=25,)
self.texting=self.canvas.create_text(self.root.winfo_screenwidth()/2, 85, text=Buffer,fill=COLOR,justify='center',font=("Arial", 25))
self.root.title(Buffer)
try:
print(f"{offset} / {x} - {i}")
except:
pass
if self.REDIMENSION==1:
self.root.update()
#####################################################################################################################################
elif self.REDIMENSION==2:
self.canvas.delete('all')
REDIMENSION="[ image x,y screen-stretched ]"
self.resized_image=self.image.resize((self.root.winfo_screenwidth(),self.root.winfo_screenheight()),Image.LANCZOS)
self.photo_resized=ImageTk.PhotoImage(self.resized_image)
self.canvas.create_image(0,0,anchor=NW,image=self.photo_resized)
self.XX=xx; self.YY=yy
Buffer = 'filename: {}\nredimension: {} - screen: {}x{} - image: {}x{} - diff: {}x{} - resize: {}x{}\nfile: {}/{} - interval: {}'.format(self.IMAGE_LIST[self.IMAGE_INDEX],REDIMENSION,self.root.winfo_screenwidth(),self.root.winfo_screenheight(),self.image.width,self.image.height,x-IMG_X_OG,y-IMG_Y_OG,xx,yy,self.IMAGE_INDEX,len(self.IMAGE_LIST)-1,self.PUMP_INTERVAL)
Buffer+= f'\n{self.xy[0]}x{self.GX} / {self.xy[1]}y{self.GY}'
if self.RENDER_TEXT:
COLOR=''
if self.MARKED_FILES[self.IMAGE_INDEX]==0:
COLOR=self.NORMAL_TEXT_COLOR
elif self.MARKED_FILES[self.IMAGE_INDEX]==1:
COLOR='green'
self.canvas.create_rectangle(0,0,self.root.winfo_screenwidth(),self.root.winfo_screenheight(), outline=COLOR, width=25,)
elif self.MARKED_FILES[self.IMAGE_INDEX]==-1:
COLOR='red'
self.canvas.create_rectangle(0,0,self.root.winfo_screenwidth(),self.root.winfo_screenheight(), outline=COLOR, width=25,)
self.texting=self.canvas.create_text(self.root.winfo_screenwidth()/2, 85, text=Buffer,fill=COLOR,justify='center',font=("Arial", 25))
self.root.title(Buffer)
self.root.update()
#####################################################################################################################################
elif self.REDIMENSION==3:
self.canvas.delete('all')
REDIMENSION="[ screen x,y image-thumbnail ]"
self.image.thumbnail((1680,1050),resample=Image.LANCZOS)
self.image.save('thumbnail.jpg')
self.image=Image.open('thumbnail.jpg')
self.photo=ImageTk.PhotoImage(self.image)
xx=self.image.width
yy=self.image.height
self.canvas.create_image(x/2-xx/2,0,anchor=NW,image=self.photo)
self.XX=xx; self.YY=yy
Buffer = 'filename: {}\nredimension: {} - screen: {}x{} - image: {}x{} - diff: {}x{} - resize: {}x{}\nfile: {}/{} - interval: {}'.format(self.IMAGE_LIST[self.IMAGE_INDEX],REDIMENSION,self.root.winfo_screenwidth(),self.root.winfo_screenheight(),self.image.width,self.image.height,x-IMG_X_OG,y-IMG_Y_OG,xx,yy,self.IMAGE_INDEX,len(self.IMAGE_LIST)-1,self.PUMP_INTERVAL)
Buffer+= f'\n{self.xy[0]}x{self.GX} / {self.xy[1]}y{self.GY}'
if self.RENDER_TEXT:
COLOR=''
if self.MARKED_FILES[self.IMAGE_INDEX]==0:
COLOR=self.NORMAL_TEXT_COLOR
elif self.MARKED_FILES[self.IMAGE_INDEX]==1:
COLOR='green'
self.canvas.create_rectangle(0,0,self.root.winfo_screenwidth(),self.root.winfo_screenheight(), outline=COLOR, width=25,)
elif self.MARKED_FILES[self.IMAGE_INDEX]==-1:
COLOR='red'
self.canvas.create_rectangle(0,0,self.root.winfo_screenwidth(),self.root.winfo_screenheight(), outline=COLOR, width=25,)
self.texting=self.canvas.create_text(self.root.winfo_screenwidth()/2, 85, text=Buffer,fill=COLOR,justify='center',font=("Arial", 25))
self.root.title(Buffer)
self.root.update()
#####################################################################################################################################
elif self.REDIMENSION==4:
self.canvas.delete('all')
REDIMENSION="[ image-original ]"
self.photo=ImageTk.PhotoImage(self.image)
self.canvas.create_image(x/2-xx/2,0,anchor=NW,image=self.photo)
self.XX=xx; self.YY=yy
Buffer = 'filename: {}\nredimension: {} - screen: {}x{} - image: {}x{} - diff: {}x{} - resize: {}x{}\nfile: {}/{} - interval: {}'.format(self.IMAGE_LIST[self.IMAGE_INDEX],REDIMENSION,self.root.winfo_screenwidth(),self.root.winfo_screenheight(),self.image.width,self.image.height,x-IMG_X_OG,y-IMG_Y_OG,xx,yy,self.IMAGE_INDEX,len(self.IMAGE_LIST)-1,self.PUMP_INTERVAL)
Buffer+= f'\n{self.xy[0]}x{self.GX} / {self.xy[1]}y{self.GY}'
if self.RENDER_TEXT:
COLOR=''
if self.MARKED_FILES[self.IMAGE_INDEX]==0:
COLOR=self.NORMAL_TEXT_COLOR
elif self.MARKED_FILES[self.IMAGE_INDEX]==1:
COLOR='green'
self.canvas.create_rectangle(0,0,self.root.winfo_screenwidth(),self.root.winfo_screenheight(), outline=COLOR, width=25,)
elif self.MARKED_FILES[self.IMAGE_INDEX]==-1:
COLOR='red'
self.canvas.create_rectangle(0,0,self.root.winfo_screenwidth(),self.root.winfo_screenheight(), outline=COLOR, width=25,)
self.texting=self.canvas.create_text(self.root.winfo_screenwidth()/2, 85, text=Buffer,fill=COLOR,justify='center')
self.root.title(Buffer)
self.root.update()
#####################################################################################################################################
self.canvas.configure(bg='black')
global Name
Name =''
if self.RENDER_TEXT:
COLOR=''
if self.MARKED_FILES[self.IMAGE_INDEX]==0:
COLOR=self.NORMAL_TEXT_COLOR
elif self.MARKED_FILES[self.IMAGE_INDEX]==1:
COLOR='green'
self.canvas.create_rectangle(0,0,self.root.winfo_screenwidth(),self.root.winfo_screenheight(), outline=COLOR, width=25,)
elif self.MARKED_FILES[self.IMAGE_INDEX]==-1:
COLOR='red'
self.canvas.create_rectangle(0,0,self.root.winfo_screenwidth(),self.root.winfo_screenheight(), outline=COLOR, width=25,)
self.texting=self.canvas.create_text(self.root.winfo_screenwidth()/2, 85, text=Name,fill=COLOR,justify='center',font=("Arial", 25))
self.root.title(Name)
self.root.update()
except IOError:
print(f"error: non-picture, skipping past - {self.IMAGE_LIST[self.IMAGE_INDEX]}")
if self.LAST_DIRECTION:
self.right(self)
else:
self.left(self)
print('<< dr1p1m4g3 >> screen: {}x{} - image: {}x{} - file: {}/{} - interval: {} - filename: {}'.format(self.root.winfo_screenwidth(),self.root.winfo_screenheight(),self.image.width,self.image.height,self.IMAGE_INDEX,len(self.IMAGE_LIST)-1,self.PUMP_INTERVAL,self.IMAGE_LIST[self.IMAGE_INDEX]))
#########################################################################################################################################
def getfilelist(self):
# self.IMAGE_LIST=[ x for x in Path(self.IMAGE_DIR+'/').rglob('*') if not str(x).endswith('.txt') and not "intermediates" in x.name ]
if self.REFRESH==0:
self.REFRESH=1
FILE_LIST=[]
self.IMAGE_DIR_INDEX=[]
for i,_ in enumerate(self.DIR_IMAGE_LIST):
print(f'<<< generating image list recursively from base directory: {_}/* >>>')
_FILE_LIST=[ x for x in Path(_+'/').rglob('*') ]
FILE_LIST+=_FILE_LIST
self.IMAGE_DIR_INDEX+=[i]*len(_FILE_LIST)
self.IMAGE_LIST=[]
IMAGE_DIR_INDEX=[]
for i,x in enumerate(FILE_LIST):
try:
if is_file_an_image(str(x)):
self.IMAGE_LIST.append(x)
IMAGE_DIR_INDEX+=[self.IMAGE_DIR_INDEX[i]]
print(f'added: {str(x)}')
except Exception as e:
print(f'skipped: {str(x)} - reason: {e}')
self.IMAGE_DIR_INDEX=IMAGE_DIR_INDEX
self.MARKED_FILES=[0]*len(IMAGE_DIR_INDEX)
if self.USER_USERSHUF:
shuffle(self.IMAGE_LIST)
self.IMAGE_INDEX=randint(0,len(self.IMAGE_LIST)-1)
print(f'index:{self.IMAGE_LIST[self.IMAGE_INDEX]}/{len(self.IMAGE_LIST)} - filename:{self.IMAGE_LIST[self.IMAGE_INDEX]} - size:{self.image.size}: [ width:{self.image.width} / height:{self.image.height} ]')
self.IMAGE_LIST=sorted(self.IMAGE_LIST)
#########################################################################################################################################
def movecell(self):
_x=self.root.winfo_screenwidth()/self.GX
_y=self.root.winfo_screenheight()/self.GY
#########################################
try:
self.canvas.delete(self.moverect)
except:
pass
#######
[ self.canvas.delete(x) for x in self.canvas.find_all() if not 'activeimage' in self.canvas.itemconfig(x) ]
self.moverect = self.canvas.create_rectangle((self.xy[0]*_x)+5,(self.xy[1]*_y)+5,(self.xy[0]*_x)+_x-5,(self.xy[1]*_y)+_y-5,outline=self.autocolor(2),width=8)
_x=self.image.width/self.GX
_y=self.image.height/self.GY
image_gridcell=self.image.crop([ (_x*self.xy[0]),(_y*self.xy[1]),(_x*self.xy[0])+_x,(_y*self.xy[1])+_y ])
self.image_preview=ImageTk.PhotoImage(image_gridcell)
x_x=self.root.winfo_screenwidth()/2
y_y=self.root.winfo_screenheight()/2
self.cellrect[0]=self.canvas.create_rectangle(0,0,self.root.winfo_screenwidth()-1,self.root.winfo_screenheight()-1, outline='red2', width=1)
_x=self.root.winfo_screenwidth()/self.GX; _y=self.root.winfo_screenheight()/self.GY
for Y in range(self.gy+1):
for X in range(self.gx):
self.cellrect[1].append(self.canvas.create_rectangle((_x*X),(_y*Y),(_x*X)+_x,(_y*Y)+_y,outline=self.autocolor(1),width=1))
self.cellrect[2].append(self.canvas.create_rectangle((_x*X)+3,(_y*Y)+3,(_x*X)+_x-2,(_y*Y)+_y-2,outline=self.autocolor(0),width=4))
self.preview=self.canvas.create_image(x_x,y_y,image=self.image_preview)
if self.RENDER_TEXT:
COLOR=''
if self.MARKED_FILES[self.IMAGE_INDEX]==0:
COLOR=self.NORMAL_TEXT_COLOR
elif self.MARKED_FILES[self.IMAGE_INDEX]==1:
COLOR='green'
elif self.MARKED_FILES[self.IMAGE_INDEX]==-1:
COLOR='red'
Buffer = 'filename: {}\nredimension: {} - screen: {}x{} - image: {}x{} - diff: {}x{} - resize: {}x{}\nfile: {}/{} - interval: {}'.format(self.IMAGE_LIST[self.IMAGE_INDEX],self.REDIMENSION,self.root.winfo_screenwidth(),self.root.winfo_screenheight(),self.image.width,self.image.height,self.root.winfo_screenwidth()-self.image.width,self.root.winfo_screenheight()-self.image.height,self.XX,self.YY,self.IMAGE_INDEX,len(self.IMAGE_LIST)-1,self.PUMP_INTERVAL)
Buffer+= f'\n{self.xy[0]}x{self.GX} / {self.xy[1]}y{self.GY} - {self.image.width/self.GX}x{self.image.height/self.GY} '
self.texting=self.canvas.create_text(self.root.winfo_screenwidth()/2, 85, text=Buffer,fill=COLOR,justify='center')
self.root.title(Buffer)
self.root.update()
#########################################################################################################################################
def up(self,s):
if not self.GRID_MODE:
######################
self.PUMP_INTERVAL+=0.01
#####
else:
#####
self.xy[1]-=1
if self.xy[1]<0: self.xy[1]=0
################
self.movecell()
#########################################################################################################################################
def down(self,s):
if not self.GRID_MODE:
######################
self.PUMP_INTERVAL-=0.01
#####
else:
#####
self.xy[1]+=1
if self.xy[1]>self.gy: self.xy[1]=self.gy
######################
self.movecell()
#########################################################################################################################################
def left(self,s):
if not self.GRID_MODE:
######################
self.LAST_DIRECTION=False
self.IMAGE_INDEX-=1
self.getfilelist()
if self.IMAGE_INDEX<0:
self.IMAGE_INDEX=len(self.IMAGE_LIST)-1
self.loadimage()
#####
else:
#####
self.xy[0]-=1
if self.xy[0]<0: self.xy[0]=0
################
self.movecell()
#########################################################################################################################################
def right(self,s):
if not self.GRID_MODE:
######################
self.LAST_DIRECTION=True
self.IMAGE_INDEX+=1
if self.IMAGE_INDEX==len(self.IMAGE_LIST):
self.IMAGE_INDEX=0
self.getfilelist()
self.loadimage()
#####
else:
#####
self.xy[0]+=1
if self.xy[0]>=self.gx: self.xy[0]=self.gx-1
######################
self.movecell()
#########################################################################################################################################
#########################################################################################################################################
# A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - AUTOGRID
# A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - AUTOGRID
# A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - AUTOGRID
# A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - AUTOGRID
# A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - AUTOGRID
#########################################################################################################################################
##################### ###################################################################################################################
##################### ###################################################################################################################
def autogrid(self,s): ###################################################################################################################
##################### ###################################################################################################################
##################### ###################################################################################################################
#######################################################################################################################################
print(f'<<< autogrid mode: enabled >>>')
TABLES={ '1536x1024':512x512','3584x3072':'512x512','2560x2048':'512x512','2048x1536':'512x512','4000x444':'444x444','1760x880':'880x440','3520x2640':'660x660','1760x1760':'880x880','2640x1760':'600x440','6640x9920':'664x992'}
#######################################################################################################################################
if not self.REDIMENSION==2:
self.REDIMENSION=2
self.loadimage()
#######################################################################################################################################
self.gx-=1; print(f'<<< grid mode: removed x grid cell. x={self.gx},y={self.gy} >>>')
self.gy-=1; print(f'<<< grid mode: removed y grid cell. x={self.gx},y={self.gy} >>>')
self.gx+=1; print(f'<<< grid mode: added x grid cell. x={self.gx},y={self.gy} >>>')
self.gy+=1; print(f'<<< grid mode: added y grid cell. x={self.gx},y={self.gy} >>>')
#######################################################################################################################################
self.GX-=1; print(f'<<< grid mode: x division cell height decreased x={self.GX},y={self.GY} >>>')
self.GY-=1; print(f'<<< grid mode: y division cell height decreaded x={self.GX},y={self.GY} >>>')
self.GX+=1; print(f'<<< grid mode: x division cell height increased x={self.GX},y={self.GY} >>>')
self.GY+=1; print(f'<<< grid mode: y division cell height increased x={self.GX},y={self.GY} >>>')
#######################################################################################################################################
self.xy[1]-=1
if self.xy[1]<0: self.xy[1]=0
self.xy[1]+=1
if self.xy[1]>self.gy: self.xy[1]=self.gy
self.xy[0]-=1
if self.xy[0]<0: self.xy[0]=0
self.xy[0]+=1
if self.xy[0]>=self.gx: self.xy[0]=self.gx-1
self.movecell()
#######################################################################################################################################
_x=self.root.winfo_screenwidth()/self.GX
_y=self.root.winfo_screenheight()/self.GY
#######################################################################################################################################
[ self.canvas.delete(x) for x in self.canvas.find_all() if not 'activeimage' in self.canvas.itemconfig(x) ]
#######################################################################################################################################
self.moverect = self.canvas.create_rectangle((self.xy[0]*_x)+5,(self.xy[1]*_y)+5,(self.xy[0]*_x)+_x-5,(self.xy[1]*_y)+_y-5,outline=self.autocolor(2),width=8)
_x=self.image.width/self.GX
_y=self.image.height/self.GY
image_gridcell=self.image.crop([ (_x*self.xy[0]),(_y*self.xy[1]),(_x*self.xy[0])+_x,(_y*self.xy[1])+_y ])
self.image_preview=ImageTk.PhotoImage(image_gridcell)
x_x=self.root.winfo_screenwidth()/2
y_y=self.root.winfo_screenheight()/2
#######################################################################################################################################
self.cellrect[0]=self.canvas.create_rectangle(0,0,self.root.winfo_screenwidth()-1,self.root.winfo_screenheight()-1, outline='red2', width=1)
_x=self.root.winfo_screenwidth()/self.GX; _y=self.root.winfo_screenheight()/self.GY
for Y in range(self.gy+1):
for X in range(self.gx):
self.cellrect[1].append(self.canvas.create_rectangle((_x*X),(_y*Y),(_x*X)+_x,(_y*Y)+_y,outline=self.autocolor(1),width=1))
self.cellrect[2].append(self.canvas.create_rectangle((_x*X)+3,(_y*Y)+3,(_x*X)+_x-2,(_y*Y)+_y-2,outline=self.autocolor(0),width=4))
#######################################################################################################################################
self.preview=self.canvas.create_image(x_x,y_y,image=self.image_preview)
#######################################################################################################################################
if self.RENDER_TEXT:
if self.MARKED_FILES[self.IMAGE_INDEX]==0: COLOR=self.NORMAL_TEXT_COLOR
elif self.MARKED_FILES[self.IMAGE_INDEX]==1: COLOR='green'
elif self.MARKED_FILES[self.IMAGE_INDEX]==-1: COLOR='red'
#####################################################################################################################################
Buffer = f'filename: {self.IMAGE_LIST[self.IMAGE_INDEX]}\n'
Buffer+= f'redimension: {self.IMAGE_LIST[self.IMAGE_INDEX]}' + ' - '
Buffer+= f'screen: {self.REDIMENSION}x{self.root.winfo_screenwidth()}' + ' - '
Buffer+= f'image: {self.root.winfo_screenheight()}x{self.image.width}' + ' - '
Buffer+= f'diff: {self.image.height}x{self.root.winfo_screenwidth()-self.image.width}' + ' - '
Buffer+= f'resize: {self.root.winfo_screenheight()-self.image.height}x{self.XX}\n'
Buffer+= f'file: {self.YY}/{self.IMAGE_INDEX} - interval: {len(self.IMAGE_LIST)-1} - wrong {self.PUMP_INTERVAL}\n'
Buffer+= f'{self.xy[0]}x{self.GX} / {self.xy[1]}y{self.GY} - {self.image.width/self.GX}x{self.image.height/self.GY}'
#####################################################################################################################################
print('break <-> here here here here here here here here here here here here here here here here here here here here here here here')
Buffer = 'filename: {}\nredimension: {} - screen: {}x{} - image: {}x{} - diff: {}x{} - resize: {}x{}\nfile: {}/{} - interval: {}'.format(self.IMAGE_LIST[self.IMAGE_INDEX],self.REDIMENSION,self.root.winfo_screenwidth(),self.root.winfo_screenheight(),self.image.width,self.image.height,self.root.winfo_screenwidth()-self.image.width,self.root.winfo_screenheight()-self.image.height,self.XX,self.YY,self.IMAGE_INDEX,len(self.IMAGE_LIST)-1,self.PUMP_INTERVAL)
print('break <-> here here here here here here here here here here here here here here here here here here here here here here here')
#####################################################################################################################################
self.canvas.create_text(x_x,85,text=Buffer,fill=COLOR,justify='center'); self.root.title(Buffer)
#####################################################################################################################################
#######################################################################################################################################
################## ####################################################################################################################
################## ####################################################################################################################
self.root.update() ####################################################################################################################
################## ####################################################################################################################
################## ####################################################################################################################
#########################################################################################################################################
# A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - AUTOGRID
# A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - AUTOGRID
# A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - AUTOGRID
# A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - AUTOGRID
# A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - A U T O G R I D - AUTOGRID
#########################################################################################################################################
#################
def grid(self,s):
#################
if not self.GRID_MODE:
self.GRID_MODE=True
if not s in ['x','y', 'X', 'Y']:
self.REDIMENSION=2
self.loadimage()
elif s in ['X', 'Y']:
for _ in self.cellrect[1]:
print(f'<<< deleting grid rect: {_} >>>')
self.canvas.delete(_)
for _ in self.cellrect[2]:
print(f'<<< deleting grid rect: {_} >>>')
self.canvas.delete(_)
self.cellrect[0]=self.canvas.create_rectangle(0,0,self.root.winfo_screenwidth()-1,self.root.winfo_screenheight()-1, outline='red2', width=1)
_x=self.root.winfo_screenwidth()/self.GX; _y=self.root.winfo_screenheight()/self.GY
for Y in range(self.gy+1):
for X in range(self.gx):
self.cellrect[1].append(self.canvas.create_rectangle((_x*X),(_y*Y),(_x*X)+_x,(_y*Y)+_y,outline=self.autocolor(1),width=1))
self.cellrect[2].append(self.canvas.create_rectangle((_x*X)+3,(_y*Y)+3,(_x*X)+_x-2,(_y*Y)+_y-2,outline=self.autocolor(0),width=4))
self.root.update()
print(f'<<< grid mode: enabled >>>')
#########################################################################################################################################
def GRID(self,s):
if self.GRID_MODE:
self.GRID_MODE=False
self.xy=[0,0]
self.gy=1
self.gx=0
self.loadimage()
self.root.update()
print(f'<<< grid mode: disabled >>>')
#########################################################################################################################################
def gridx(self,s):
######################
if not self.GRID_MODE:
self.REDIMENSION=2
self.loadimage()
self.GRID_MODE=True
######################
self.gx+=1
self.grid('x')
print(f'<<< grid mode: added x grid cell. x={self.gx},y={self.gy} >>>')
#########################################################################################################################################
def gridy(self,s):
######################
if not self.GRID_MODE:
self.REDIMENSION=2
self.loadimage()
self.GRID_MODE=True
######################
self.gy+=1
self.grid('y')
print(f'<<< grid mode: added y grid cell. x={self.gx},y={self.gy} >>>')
#########################################################################################################################################
def gridX(self,s):
######################
if not self.GRID_MODE:
self.REDIMENSION=2
self.loadimage()
self.GRID_MODE=True
######################
self.gx-=1
if self.gx < 0: self.gx=0
self.grid('X')
print(f'<<< grid mode: removed x cell. x={self.gx},y={self.gy} >>>')
#########################################################################################################################################
def gridY(self,s):
######################
if not self.GRID_MODE:
self.REDIMENSION=2
self.loadimage()
self.GRID_MODE=True
######################
self.gy-=1
if self.gy < 0: self.gy=0
self.grid('Y')
print(f'<<< grid mode: removed y cell. x={self.gx},y={self.gy} >>>')
#########################################################################################################################################
def grid_cell_up_y(self,s):
######################
if not self.GRID_MODE:
self.REDIMENSION=2
self.loadimage()
self.GRID_MODE=True
######################
self.GY+=1
print(f'<<< grid mode: y division cell height increased. x={self.GX},y={self.GY} >>>')
if self.RENDER_TEXT:
COLOR=''
if self.MARKED_FILES[self.IMAGE_INDEX]==0:
COLOR=self.NORMAL_TEXT_COLOR
elif self.MARKED_FILES[self.IMAGE_INDEX]==1:
COLOR='green'
elif self.MARKED_FILES[self.IMAGE_INDEX]==-1:
COLOR='red'
Buffer = 'filename: {}\nredimension: {} - screen: {}x{} - image: {}x{} - diff: {}x{} - resize: {}x{}\nfile: {}/{} - interval: {}'.format(self.IMAGE_LIST[self.IMAGE_INDEX],self.REDIMENSION,self.root.winfo_screenwidth(),self.root.winfo_screenheight(),self.image.width,self.image.height,self.root.winfo_screenwidth()-self.image.width,self.root.winfo_screenheight()-self.image.height,self.XX,self.YY,self.IMAGE_INDEX,len(self.IMAGE_LIST)-1,self.PUMP_INTERVAL)
Buffer+= f'\n{self.xy[0]}x{self.GX} / {self.xy[1]}y{self.GY}'
[ self.canvas.delete(x) for x in self.canvas.find_all() if not 'activeimage' in self.canvas.itemconfig(x) ]
self.texting=self.canvas.create_text(self.root.winfo_screenwidth()/2, 85, text=Buffer,fill=COLOR,justify='center')
self.root.title(Buffer)
self.root.update()
self.grid(self)
#########################################################################################################################################
def grid_cell_down_y(self,s):
######################
if not self.GRID_MODE:
self.REDIMENSION=2
self.loadimage()
self.GRID_MODE=True
######################
self.GY-=1
print(f'<<< grid mode: y division cell height decreased. x={self.GX},y={self.GY} >>>')
if self.RENDER_TEXT:
COLOR=''
if self.MARKED_FILES[self.IMAGE_INDEX]==0:
COLOR=self.NORMAL_TEXT_COLOR
elif self.MARKED_FILES[self.IMAGE_INDEX]==1:
COLOR='green'
elif self.MARKED_FILES[self.IMAGE_INDEX]==-1:
COLOR='red'
Buffer = 'filename: {}\nredimension: {} - screen: {}x{} - image: {}x{} - diff: {}x{} - resize: {}x{}\nfile: {}/{} - interval: {}'.format(self.IMAGE_LIST[self.IMAGE_INDEX],self.REDIMENSION,self.root.winfo_screenwidth(),self.root.winfo_screenheight(),self.image.width,self.image.height,self.root.winfo_screenwidth()-self.image.width,self.root.winfo_screenheight()-self.image.height,self.XX,self.YY,self.IMAGE_INDEX,len(self.IMAGE_LIST)-1,self.PUMP_INTERVAL)
Buffer+= f'\n{self.xy[0]}x{self.GX} / {self.xy[1]}y{self.GY}'
[ self.canvas.delete(x) for x in self.canvas.find_all() if not 'activeimage' in self.canvas.itemconfig(x) ]
self.texting=self.canvas.create_text(self.root.winfo_screenwidth()/2, 85, text=Buffer,fill=COLOR,justify='center')
self.root.title(Buffer)
self.root.update()
self.grid(self)
#########################################################################################################################################
def grid_cell_up_x(self,s):
######################
if not self.GRID_MODE:
self.REDIMENSION=2
self.loadimage()
self.GRID_MODE=True
######################
self.GX-=1
print(f'<<< grid mode: x division cell width decreased. x={self.GX},y={self.GY} >>>')
if self.RENDER_TEXT:
COLOR=''
if self.MARKED_FILES[self.IMAGE_INDEX]==0:
COLOR=self.NORMAL_TEXT_COLOR
elif self.MARKED_FILES[self.IMAGE_INDEX]==1:
COLOR='green'
elif self.MARKED_FILES[self.IMAGE_INDEX]==-1:
COLOR='red'
Buffer = 'filename: {}\nredimension: {} - screen: {}x{} - image: {}x{} - diff: {}x{} - resize: {}x{}\nfile: {}/{} - interval: {}'.format(self.IMAGE_LIST[self.IMAGE_INDEX],self.REDIMENSION,self.root.winfo_screenwidth(),self.root.winfo_screenheight(),self.image.width,self.image.height,self.root.winfo_screenwidth()-self.image.width,self.root.winfo_screenheight()-self.image.height,self.XX,self.YY,self.IMAGE_INDEX,len(self.IMAGE_LIST)-1,self.PUMP_INTERVAL)
Buffer+= f'\n{self.xy[0]}x{self.GX} / {self.xy[1]}y{self.GY} - {self.image.width/self.GX}x{self.image.height/self.GY} '
[ self.canvas.delete(x) for x in self.canvas.find_all() if not 'activeimage' in self.canvas.itemconfig(x) ]
self.texting=self.canvas.create_text(self.root.winfo_screenwidth()/2, 85, text=Buffer,fill=COLOR,justify='center')
self.root.title(Buffer)
self.root.update()
self.grid(self)
#########################################################################################################################################
def grid_cell_down_x(self,s):
######################
if not self.GRID_MODE:
self.REDIMENSION=2
self.loadimage()
self.GRID_MODE=True
######################
self.GX+=1
print(f'<<< grid mode: x division cell width increased. x={self.GX},y={self.GY} >>>')
if self.RENDER_TEXT:
COLOR=''
if self.MARKED_FILES[self.IMAGE_INDEX]==0:
COLOR=self.NORMAL_TEXT_COLOR
elif self.MARKED_FILES[self.IMAGE_INDEX]==1:
COLOR='green'
elif self.MARKED_FILES[self.IMAGE_INDEX]==-1:
COLOR='red'
Buffer = 'filename: {}\nredimension: {} - screen: {}x{} - image: {}x{} - diff: {}x{} - resize: {}x{}\nfile: {}/{} - interval: {}'.format(self.IMAGE_LIST[self.IMAGE_INDEX],self.REDIMENSION,self.root.winfo_screenwidth(),self.root.winfo_screenheight(),self.image.width,self.image.height,self.root.winfo_screenwidth()-self.image.width,self.root.winfo_screenheight()-self.image.height,self.XX,self.YY,self.IMAGE_INDEX,len(self.IMAGE_LIST)-1,self.PUMP_INTERVAL)
Buffer+= f'\n{self.xy[0]}x{self.GX} / {self.xy[1]}y{self.GY}'
[ self.canvas.delete(x) for x in self.canvas.find_all() if not 'activeimage' in self.canvas.itemconfig(x) ]
self.texting=self.canvas.create_text(self.root.winfo_screenwidth()/2, 85, text=Buffer,fill=COLOR,justify='center')
self.root.title(Buffer)
self.root.update()
self.grid(self)
#########################################################################################################################################
def main(self):
#######################################################################################################################################
try:
Name='<< dr1p1m4g3 >>'
self.root=Tk(className=Name)
self.NORMAL_TEXT_FONTS=font.families()
self.root.attributes('-fullscreen',True)
self.root.eval('tk::PlaceWindow . center')
#self.root.overrideredirect(True)
self.root.wm_attributes("-topmost",True)
self.root.wm_attributes("-transparent",True)
self.root.config(bg='systemTransparent')
self.image=Image.new(mode='RGB', size=(self.root.winfo_screenwidth(),self.root.winfo_screenheight()))
self.photo=ImageTk.PhotoImage(self.image)
self.canvas=Canvas(self.root,width=self.root.winfo_screenwidth(),height=self.root.winfo_screenheight(),bd=0,highlightthickness=0)
#self.canvas=Canvas(self.root,width=self.root.winfo_screenwidth(),height=self.root.winfo_screenheight(),bd=2,bg='white',highlightthickness=1,highlightbackground='white')
self.canvas.pack(fill="both",expand=True)
self.REDIMENSION+=self.USER_RENDMODE
self.IMAGE_INDEX=(0+int(self.USER_IMGINDEX))
self.PUMP_AUTO=self.USER_PUMPMODE
self.getfilelist()
self.canvas.bind("<m>",self.shuffling)
self.canvas.bind("<backslash>",self.autogrid)
self.canvas.bind("<g>",self.grid)
self.canvas.bind("<G>",self.GRID)
self.canvas.bind("<x>",self.gridx)
self.canvas.bind("<y>",self.gridy)
self.canvas.bind("<X>",self.gridX)
self.canvas.bind("<Y>",self.gridY)
self.canvas.bind("<i>",self.markedlist)
self.canvas.bind("<p>",self.autopump)
self.canvas.bind("<r>",self.redimension)
self.canvas.bind("<t>",self.fliptext)
self.canvas.bind("<Up>",self.up)
self.canvas.bind("<Down>",self.down)
self.canvas.bind("<Left>",self.left)
self.canvas.bind("<Right>",self.right)
self.canvas.bind("<Up>",self.up)
self.canvas.bind("<Down>",self.down)
self.canvas.bind("<Left>",self.left)
self.canvas.bind("<Right>",self.right)
self.canvas.bind("<comma>",self.grid_cell_up_x)
self.canvas.bind("<period>",self.grid_cell_down_x)
self.canvas.bind("<greater>",self.grid_cell_up_y)
self.canvas.bind("<less>",self.grid_cell_down_y)
self.canvas.bind("<grave>",self.randofontcolors)
self.canvas.bind("<s>",self.isave)
self.canvas.bind("<d>",self.idrop)
self.canvas.bind("<q>",self.escaped)
self.canvas.focus_set()
self.loadimage()
sleep(0.1)
self.root.wm_attributes('-fullscreen', True)
self.root.mainloop()
#######################################################################################################################################
except Exception as err:
print(f"main(): {err}")
###########################################################################################################################################
def main(screen):
DIR_IMAGE_LIST=[]
curses.start_color()
curses.use_default_colors()
curses.init_pair(1,5,0)
curses.init_pair(2,4,0)
curses.init_pair(3,6,0)
curses.init_pair(4,3,0)
ch, first, selected, paths = 0, 0, 0, [ x for x in listdir() if os.path.isdir(x) ]
screen.erase()
try:
screen.addstr(0,0,'SELECT A BASE DIRECTORY',curses.color_pair(2))
screen.addstr(': ',curses.color_pair(1))
screen.addstr('<< ',curses.color_pair(4))
screen.addstr('LEFT',curses.color_pair(3))
screen.addstr('/',curses.color_pair(1))
screen.addstr('RIGHT',curses.color_pair(3))
screen.addstr('/',curses.color_pair(1))
screen.addstr('ENTER',curses.color_pair(3))
screen.addstr(' >>',curses.color_pair(4))
screen.addstr(1,0,'[ ',curses.color_pair(1))
screen.addstr("THE CURRENT DIRECTORY",curses.color_pair(2))
screen.addstr(': ',curses.color_pair(1))
screen.addstr(f"{os.getcwd()}",curses.color_pair(3))
screen.addstr(' ]',curses.color_pair(1))
screen.addstr(2,0,'',curses.color_pair(1))
except Exception as e:
pass
screen.refresh()
sleep(3)
while ch != ascii.ESC:
height, _ = screen.getmaxyx()
screen.erase()
screen.refresh()
try:
paths=sorted(paths)
for y, filename in enumerate(paths[first : first+height]):
screen.addstr(y, 0, filename, A_REVERSE * (selected == first + y))
except:
pass
ch = screen.getch()
selected += (ch == KEY_DOWN) - (ch == KEY_UP)
selected = max(0, min(len(paths)-1, selected))
first += (first <= selected - height) - (first > selected)
if ch in [KEY_LEFT, KEY_RIGHT, KEY_ENTER, 32, 10, 13]:
if not ch==10 and not ch==32:
new_dir = '..' if ch == KEY_LEFT else paths[selected]
if path.isdir(new_dir):
chdir(new_dir)
first, selected, paths = 0, 0, [ x for x in listdir() if os.path.isdir(x) ]
paths=sorted(paths)
elif ch==32:
DIR_IMAGE_LIST.append(os.getcwd())
elif ch==10:
curses.nocbreak()
curses.endwin()
DIR_IMAGE_LIST.append(os.getcwd())
return DIR_IMAGE_LIST
###########################################################################################################################################
if __name__=="__main__":
#########################################################################################################################################
DEBUG=True
if DEBUG:
USERPATH=['/Users/dr1p/dr1p1m4g3/grids'] #wrapper(main)
IMGINDEX=int(0)
RENDMODE=int(1)
PUMPMODE=int(1)
PUMPTIME=10
USERSHUF=True
else:
USERPATH=wrapper(main)
IMGINDEX=int(0)
RENDMODE=int(1)
PUMPMODE=int(0)
PUMPTIME=float(0.5)
USERSHUF=False
#########################################################################################################################################
if not DEBUG:
try:
USERPATH=str(sys.argv[1])
print(f'[ specified user path: {USERPATH} ]')
except:
USERPATH=""
print(f'[ no directory path was specified: defaulting to current directory and recursively ]')
#########################################################################################################################################
if not DEBUG:
try:
IMGINDEX=int(sys.argv[2])
print(f'[ specified user inded: {IMGINDEX} ]')
except:
IMGINDEX=0
print(f'[ no image index was specificed: defaulting to 0 ]')
#########################################################################################################################################
if not DEBUG:
try:
RENDMODE=int(sys.argv[3])
print(f'[ specified rendering mode: {RENDMODE} ]')
except:
RENDMODE=0
print(f'[ no render mode specified: defaulting to image x,y screen-constrained ]')
#########################################################################################################################################
if not DEBUG:
try:
PUMPMODE=int(sys.argv[4])
print(f'[ specified user pump mode: {PUMPMODE} ]')
try:
PUMPTIME=float(sys.argv[5])
print(f'[ specified user pump interval: {PUMPTIME} ]')
except:
PUMPTIME=0
print(f'[ no pump mode interval: default to 0.5 second interval ]')
except:
print(f'[ no pump mode specified: defaulting to being turned off ]')
#########################################################################################################################################
if not DEBUG:
try:
USERSHUF=int(sys.argv[6])
print(f'[ specified user image shuffle mode: {USERSHUF} ]')
except:
USERSHUF=False
print(f'[ no shuffle mode specified: defaulting to being turned off ]')
#########################################################################################################################################
dr1p1m4g3=DR1P1M4G3(USERPATH,IMGINDEX,RENDMODE,PUMPMODE,PUMPTIME,USERSHUF)
#########################################################################################################################################
####################################################################################################################################### EOF