def erosion(canvas): ''' #TODO: Write what function does. ''' covertGray(canvas) canvas.data.colourPopToHappen = False canvas.data.cropPopToHappen = False canvas.data.drawOn = False if canvas.data.image != None: print(type(canvas.data.image)) # Taking a matrix of size 5 as the kernel image_data = np.asarray(canvas.data.image) kernel = np.ones((5,5), np.uint8) # The first parameter is the original image, # kernel is the matrix with which image is # convolved and third parameter is the number # of iterations, which will determine how much # you want to erode/dilate a given image. dilated_image = cv2.erode(image_data, kernel, iterations=1) print(type(dilated_image)) canvas.data.image = Image.fromarray(dilated_image) print(type(canvas.data.image)) file_op.save(canvas) canvas.data.undoQueue.append(canvas.data.image.copy()) canvas.data.imageForTk=draw.makeImageForTk(canvas) draw.drawImage(canvas)
def send(thing): if 'username' in session: nowuser = session['username'] else: nowuser = '******' m.append(f'{nowuser}:{thing}') file.save(m, 'message.lwf') print(f'{nowuser}:{thing}') return redirect('/')
def flip(canvas): canvas.data.colourPopToHappen = False canvas.data.cropPopToHappen = False canvas.data.drawOn = False if canvas.data.image != None: canvas.data.image = ImageOps.flip(canvas.data.image) file_op.save(canvas) canvas.data.undoQueue.append(canvas.data.image.copy()) canvas.data.imageForTk = draw.makeImageForTk(canvas) draw.drawImage(canvas)
def reset(canvas): canvas.data.colourPopToHappen = False canvas.data.cropPopToHappen = False canvas.data.drawOn = False ### change back to original image if canvas.data.image != None: canvas.data.image = canvas.data.originalImage.copy() file_op.save(canvas) canvas.data.undoQueue.append(canvas.data.image.copy()) canvas.data.imageForTk = draw.makeImageForTk(canvas) draw.drawImage(canvas)
def performCrop(event, canvas): canvas.data.image=\ canvas.data.image.crop(\ (int(round((canvas.data.startCropX-canvas.data.imageTopX)*canvas.data.imageScale)), int(round((canvas.data.startCropY-canvas.data.imageTopY)*canvas.data.imageScale)), int(round((canvas.data.endCropX-canvas.data.imageTopX)*canvas.data.imageScale)), int(round((canvas.data.endCropY-canvas.data.imageTopY)*canvas.data.imageScale)))) canvas.data.endCrop = False canvas.data.cropPopToHappen = False file_op.save(canvas) canvas.data.undoQueue.append(canvas.data.image.copy()) canvas.data.imageForTk = draw.makeImageForTk(canvas) draw.drawImage(canvas)
def undo(canvas): if len(canvas.data.undoQueue) > 0: # the last element of the Undo Deque is the # current version of the image lastImage = canvas.data.undoQueue.pop() # we would want the current version if wehit redo after undo canvas.data.redoQueue.appendleft(lastImage) if len(canvas.data.undoQueue) > 0: # the previous version of the image canvas.data.image = canvas.data.undoQueue[-1] file_op.save(canvas) canvas.data.imageForTk = draw.makeImageForTk(canvas) draw.drawImage(canvas)
def register(username, password): if username in userinfo: return f''' <p> <a>用户{username}已存在</a> </p> <p> <a href="/">点击刷新</a> </p> ''' else: userinfo[username] = password file.save(userinfo, 'userinfo.lwf') m.append(f'欢迎:\'{username}\'注册{ltsname}账号') file.save(m, 'message.lwf') return redirect('/')
def login(username, password): if username not in userinfo: return f''' <p> <a>用户{username}不存在</a> </p> <p> <a href="/">点击刷新</a> </p> ''' elif userinfo[username] == password: session['username'] = username m.append(f'欢迎:\'{username}\'来到{ltsname}') file.save(m, 'message.lwf') return redirect('/') else: return f'''
def covertGray(canvas): canvas.data.colourPopToHappen=False canvas.data.cropPopToHappen=False canvas.data.drawOn=False #### The existing method to convert to a grayscale image converts the #### #### image mode, so I used my own function to convert #### # value of each channel of a pixel is set to the average of the original # values of the channels if canvas.data.image!=None: data=[] for col in range(canvas.data.image.size[1]): for row in range(canvas.data.image.size[0]): r, g, b= canvas.data.image.getpixel((row, col)) avg= int(round((r + g + b)/3.0)) R, G, B= avg, avg, avg data.append((R, G, B)) canvas.data.image.putdata(data) file_op.save(canvas) canvas.data.undoQueue.append(canvas.data.image.copy()) canvas.data.imageForTk=draw.makeImageForTk(canvas) draw.drawImage(canvas)
def transpose(canvas): canvas.data.colourPopToHappen = False canvas.data.cropPopToHappen = False canvas.data.drawOn = False # I treated the image as a continuous list of pixel values row-wise # and simply excnaged the rows and the coloums # in oder to make it rotate clockewise, I reversed all the rows if canvas.data.image != None: imageData = list(canvas.data.image.getdata()) newData = [] newimg=Image.new(canvas.data.image.mode,\ (canvas.data.image.size[1], canvas.data.image.size[0])) for i in range(canvas.data.image.size[0]): addrow = [] for j in range(i, len(imageData), canvas.data.image.size[0]): addrow.append(imageData[j]) addrow.reverse() newData += addrow newimg.putdata(newData) canvas.data.image = newimg.copy() file_op.save(canvas) canvas.data.undoQueue.append(canvas.data.image.copy()) canvas.data.imageForTk = draw.makeImageForTk(canvas) draw.drawImage(canvas)
def menu_init(root, canvas): menubar = tk.Menu(root) # File pull-down Menu filemenu = tk.Menu(menubar, tearoff=0) filemenu.add_command(label="New", command=lambda: file_op.newImage(canvas)) filemenu.add_command(label="Save", command=lambda: file_op.save(canvas)) filemenu.add_command(label="Save As", command=lambda: file_op.saveAs(canvas)) menubar.add_cascade(label="File", menu=filemenu) # Edit pull-down Menu editmenu = tk.Menu(menubar, tearoff=0) editmenu.add_command(label="Undo Z", command=lambda: file_op.undo(canvas)) editmenu.add_command(label="Redo Y", command=lambda: file_op.redo(canvas)) menubar.add_cascade(label="Edit", menu=editmenu) root.config(menu=menubar) #Filter menu filtermenu = tk.Menu(menubar, tearoff=0) #Binary Morphology pull-down Menu bmormenu = tk.Menu(menubar, tearoff=0) bmormenu.add_command(label="Grassland", \ command=lambda:filters.identify_grass(canvas)) bmormenu.add_command(label="Black and White", \ command=lambda:filters.covertGray(canvas)) filtermenu.add_cascade(label="Binary-Morphology", menu=bmormenu) #Gray Level Morphology pull-down Menu gmormenu = tk.Menu(menubar, tearoff=0) gmormenu.add_command(label="dilation", \ command=lambda:filters.dilation(canvas)) gmormenu.add_command(label="erosion", \ command=lambda:filters.erosion(canvas)) filtermenu.add_cascade(label="GrayLevel-Morphology", menu=gmormenu) menubar.add_cascade(label="Filter", menu=filtermenu) root.config(menu=menubar)
def closeRotateWindow(canvas): if canvas.data.image != None: file_op.save(canvas) canvas.data.undoQueue.append(canvas.data.image.copy()) canvas.data.rotateWindowClose = True
from flask import * import file_op as file a = Flask(__name__) admin_list = [] try: port = file.read('port.lwf') except Exception: port = int(input('Set port:')) file.save(port, 'port.lwf') try: userinfo = file.read('userinfo.lwf') except Exception: userinfo = {'admin': 'admin'} file.save(userinfo, 'userinfo.lwf') try: m = file.read('message.lwf') except Exception: m = [] file.save(m, 'message.lwf') try: admin_list = file.read('admin_list.lwf') except Exception: admin_list = ['admin'] file.save(admin_list, 'admin_list.lwf') try: ltsname = file.read('ltsname.lwf') except Exception: