Folgendes können Sie in diesem Artikel lesen:
--Betrachter zum Auswählen und Anzeigen von Bildern --Pass-Parameter für die Bildverarbeitung
Eine grundlegende Erklärung zu PySimPleGUI finden Sie unter Wenn Sie Tkinter verwenden, versuchen Sie es mit PySimpleGUI.
Ich habe den Artikel ASCII-Grafik automatisch generieren gesehen, der das obige Bild erstellt hat, und es war interessant, es tatsächlich zu verschieben. Da jedoch die Größe des Bildes und die zu fragenden Zeichen festgelegt wurden, habe ich diesem Teil eine Benutzeroberfläche hinzugefügt. Der Konvertierungsalgorithmus selbst stammt aus dem Originalartikel. Die Datei asci_art_transform.py ist anwendbar. Die Bildanzeige selbst basiert auf dem offiziellen Demo_Img_Viewer. Die Datei 08_asci_Img_.py ist anwendbar.
Es befindet sich auf Github https://github.com/okajun35/for_pycon_shizu/tree/master/example/08_asci_art
#!/usr/bin/env python
import PySimpleGUI as sg
from PIL import Image, ImageTk
import io
import os
import asci_art_transform as asci
"""
Referenz-URL; https://github.com/PySimpleGUI/PySimpleGUI/blob/master/DemoPrograms/Demo_Img_Viewer.py
"""
def get_img_data(f, maxsize=(600, 450), first=False):
"""Generate image data using PIL
"""
print("open file:", f)
img = Image.open(f)
img.thumbnail(maxsize)
if first: # tkinter is inactive the first time
bio = io.BytesIO()
img.save(bio, format="PNG")
del img
return bio.getvalue()
return ImageTk.PhotoImage(img)
filename = './model.jpg' #Erste Datei
asci_image = "./test.png "
image_elem = sg.Image(data=get_img_data(filename, first=True))
filename_display_elem = sg.Text(filename, size=(80, 3))
#Zum Zeitpunkt der Erstanzeige ist keine Konvertierung in ASC erforderlich
# './model.jpg'Kann wütend sein
# asci_image = tranfa_asci('./model.jpg', './test.png', 16)
asc_image_elem = sg.Image(data=get_img_data(asci_image, first=True))
# define layout, show and read the form
col = [image_elem, asc_image_elem]
col_read_file = [sg.InputText('Dateien auswählen', key='-INPUT-TEXT-', enable_events=True, ),
sg.FileBrowse('Lesen Sie die Datei', key='-FILE-',
file_types=(('JPEG-Datei', '*.jpg'), ('png', '*.png'),)),
sg.Button('Umwandlung')]
layout = [col_read_file,
[sg.Slider(range=(1,64),
key='-FONT-SIZE-',
default_value=16,
orientation='h',
)], col]
window = sg.Window('Lassen Sie es uns in ASCII-Kunst konvertieren', layout, return_keyboard_events=True,
location=(0, 0), use_default_focus=False)
# loop reading the user input and displaying image, filename
i = 0
while True:
# read the form
event, values = window.read()
print(event, values)
# perform button and keyboard operations
if event is None:
break
elif event == 'Umwandlung':
print(values['-INPUT-TEXT-'])
if os.path.isfile(values['-INPUT-TEXT-']):
#Muss sich in einem separaten Thread befinden, um animiert zu werden
sg.popup_animated(sg.DEFAULT_BASE64_LOADING_GIF, message='Laufen',text_color='black', background_color='white', time_between_frames=100)
asci_image = asci.tranfa_asci(values['-INPUT-TEXT-'], asci_image, int(values['-FONT-SIZE-']))
sg.popup_animated(image_source=None)
print('Ende der Konvertierung')
asc_image_elem.update(data=get_img_data(asci_image, first=True))
else:
error_massage = values['-INPUT-TEXT-'] + 'Ist nicht vorhanden'
sg.popup('Error', error_massage)
elif values['-FILE-'] != '':
print('FilesBrowse')
if os.path.isfile(values['-INPUT-TEXT-']):
image_elem.update(data=get_img_data(values['-INPUT-TEXT-'], first=True))
Das Verfahren ist wie folgt.
sg.InputText('Dateien auswählen', key='-INPUT-TEXT-', enable_events=True, ),
sg.FileBrowse('Lesen Sie die Datei', key='-FILE-', file_types=(('JPEG-Datei', '*.jpg'), ('png', '*.png'),)
Das Layout der Dateidiagnose.
Das erste Bild wird beim Start wie folgt angezeigt.
image_elem = sg.Image(data=get_img_data(filename, first=True))
Dateiname
enthält eine feste Bilddatei.
Ich benutze "get_img_data ()", um das Bild anzuzeigen. Diese Methode verwendet dieselbe Funktion wie im offiziellen Demo_Img_Viewer.
def get_img_data(f, maxsize=(600, 450), first=False):
"""Generate image data using PIL
"""
print("open file:", f)
img = Image.open(f)
img.thumbnail(maxsize)
if first: # tkinter is inactive the first time
bio = io.BytesIO()
img.save(bio, format="PNG")
del img
return bio.getvalue()
return ImageTk.PhotoImage(img)
Die entsprechende Datei wird mit dem Kissen geöffnet und die im PNG-Format gespeicherte Datei wird mit dem "ImageTk" des Kissens angezeigt.
PySimpleGUI ist ein Wrapper für tkinter, daher denke ich, dass eine seiner Stärken darin besteht, dass Sie andere Bibliotheken verwenden können, die wie tkinter erstellt wurden.
Der folgende Teil zeigt tatsächlich die gelesene Datei an.
image_elem.update(data=get_img_data(values['-INPUT-TEXT-'], first=True))
Die gelesene Datei wird angegeben. Jetzt verwende ich update ()
, um die Anzeige zu aktualisieren.
Stellen Sie die Größe der zu konvertierenden Schriftart mit dem Schieberegler ein
sg.Slider(range=(1,64),
key='-FONT-SIZE-',
default_value=16,
orientation='h',
)
Sie können den Wert des Schiebereglers unten erhalten.
event, values = window.read()
values['-INPUT-TEXT-']
Die Datei wird gelesen und in die konvertierte Datei "test.png " ausgegeben.
asci_image = asci.tranfa_asci(values['-INPUT-TEXT-'], "asci_image", int(values['-FONT-SIZE-']))
Die ASCII-Bilddatei "test.png " wird angezeigt.
asc_image_elem.update(data=get_img_data(asci_image, first=True))
Mit PySimpleGUI können Sie ganz einfach einen Bildverarbeitungs-Viewer erstellen, der ein Bild liest, Parameter hinzufügt und es konvertiert. In der offiziellen Demo gibt es Beispiele, die OpenCV außer Kissen verwenden. Es gibt auch ein Beispielprogramm, das die Tagesplanung verwendet, um Schwarzweißbilder einzufärben.
Recommended Posts