1050 lines
60 KiB
Python
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
|