From 46574fc422647534e7a68aa379a4c017bf9a543d Mon Sep 17 00:00:00 2001 From: decoded Date: Fri, 17 Feb 2023 13:46:06 -0600 Subject: [PATCH] dev/mid_example --- dr1p1m4g3_dev.py | 1049 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1049 insertions(+) create mode 100644 dr1p1m4g3_dev.py diff --git a/dr1p1m4g3_dev.py b/dr1p1m4g3_dev.py new file mode 100644 index 0000000..05d8818 --- /dev/null +++ b/dr1p1m4g3_dev.py @@ -0,0 +1,1049 @@ +####################################################################################################################################### 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("",self.shuffling) + self.canvas.bind("",self.autogrid) + self.canvas.bind("",self.grid) + self.canvas.bind("",self.GRID) + self.canvas.bind("",self.gridx) + self.canvas.bind("",self.gridy) + self.canvas.bind("",self.gridX) + self.canvas.bind("",self.gridY) + self.canvas.bind("",self.markedlist) + self.canvas.bind("

",self.autopump) + self.canvas.bind("",self.redimension) + self.canvas.bind("",self.fliptext) + self.canvas.bind("",self.up) + self.canvas.bind("",self.down) + self.canvas.bind("",self.left) + self.canvas.bind("",self.right) + self.canvas.bind("",self.up) + self.canvas.bind("",self.down) + self.canvas.bind("",self.left) + self.canvas.bind("",self.right) + self.canvas.bind("",self.grid_cell_up_x) + self.canvas.bind("",self.grid_cell_down_x) + self.canvas.bind("",self.grid_cell_up_y) + self.canvas.bind("",self.grid_cell_down_y) + self.canvas.bind("",self.randofontcolors) + self.canvas.bind("",self.isave) + self.canvas.bind("",self.idrop) + self.canvas.bind("",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