import matplotlib.pyplot as plt import numpy as np from shiny import App, ui, render app_ui = ui.page_fluid( ui.layout_sidebar( ui.panel_sidebar( ui.input_file("file", "Choose a file to upload:", multiple=False), ui.input_slider("slider", "Choose position:", min=0, max=1, step=0.01, value=0.5), ui.input_switch("switch", "Vertikal - Horizontal:", value=True), ui.input_switch("switch2", "Links - Rechts:", value=True), ), ui.panel_main( ui.output_plot("plot"), ui.output_plot("mirror") ) ) ) def server(input, output, session): @output @render.plot def plot(): # print(input.file()) if input.file() is not None: img = plt.imread(input.file()[0]['datapath']) # print(img) plt.imshow(img) # draw a vertical line at x = 0 that spans the yrange if input.switch(): plt.axvline(input.slider() * img.shape[1], color="black", linestyle="--") else: plt.axhline(input.slider() * img.shape[0], color="black", linestyle="--") @output @render.plot def mirror(): if input.file() is not None: img = plt.imread(input.file()[0]['datapath']) if input.switch(): if input.switch2(): orig = img[:, :int(input.slider() * img.shape[1])] temp = np.fliplr(orig) img = np.concatenate((orig, temp), axis=1) else: orig = img[:, int(input.slider() * img.shape[1]):] temp = np.fliplr(orig) img = np.concatenate((temp, orig), axis=1) else: if input.switch2(): orig = img[:int(input.slider() * img.shape[0]), :] temp = np.flipud(orig) img = np.concatenate((orig, temp), axis=0) else: orig = img[int(input.slider() * img.shape[0]):, :] temp = np.flipud(orig) img = np.concatenate((temp, orig), axis=0) fig, ax = plt.subplots(1) ax.axis('off') fig.subplots_adjust(top=1, bottom=0, right=1, left=0, hspace=0, wspace=0) ax.imshow(img) app = App(app_ui, server)