[PYTHON] Erstellen Sie mit PySimpleGUI einen Bildverarbeitungs-Viewer

Folgendes können Sie in diesem Artikel lesen:

image.png

--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.

Überprüfungsumgebung

Auslösen

image.png

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.

Wo soll der Code abgelegt werden?

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))


Über die Verarbeitung

Das Verfahren ist wie folgt.

  1. Öffnen Sie den Dateidialog und laden Sie die zu konvertierende Datei
  2. Wählen Sie die Größe der zu konvertierenden Schriftart aus
  3. Speichern Sie das konvertierte Bild in ASCII-Grafik
  4. Laden Sie das konvertierte Bild und zeigen Sie es auf dem Ergebnisbildschirm an

Öffnen Sie den Dateidialog und laden Sie die zu konvertierende Datei

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.

2. Wählen Sie die Größe der zu konvertierenden Schriftart aus

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-']

3. Speichern Sie das konvertierte Bild in ASCII-Grafik

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-']))

4. Laden Sie das konvertierte Bild und zeigen Sie es auf dem Ergebnisbildschirm an

Die ASCII-Bilddatei "test.png " wird angezeigt.

asc_image_elem.update(data=get_img_data(asci_image, first=True))

Zusammenfassung

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

Erstellen Sie mit PySimpleGUI einen Bildverarbeitungs-Viewer
Erstellen Sie den Image Viewer mit Tkinter
Bildverarbeitung mit MyHDL
Bildverarbeitung mit Python
Bildverarbeitung mit PIL
Erstellen Sie eine Bildkompositions-App mit Flask + Pillow
Erstellen Sie ein Bild mit Zeichen mit Python (Japanisch)
Bildverarbeitung mit Python (Teil 2)
Bildverarbeitung mit PIL (Pillow)
Erstellen Sie eine Umgebung mit virtualenv
Erstellen Sie eine API mit Django
Bildverarbeitung mit Python (Teil 1)
Bildverarbeitung mit Python (3)
[Python] Bildverarbeitung mit Scicit-Image
Schneiden Sie ein Bild mit Python aus
Die Bildverarbeitung mit Python 100 klopft an die Binärisierung Nr. 3
Erstellen Sie eine Altersgruppe mit Pandas
100 Bildverarbeitung mit Python Knock # 2 Graustufen
Versuchen Sie, mit angr + bingraphvis einen Ausführungspfaddifferenz-Viewer zu erstellen
[Python] Ich habe einen Bildbetrachter mit einer einfachen Sortierfunktion erstellt.
Grundlagen der binärisierten Bildverarbeitung durch Python
Bildverarbeitung mit Python 100 Knock # 10 Medianfilter
Erstellen einer Bildaufteilungs-App mit Tkinter
Erstellen Sie mit Python + PIL ein Dummy-Image.
100 Bildverarbeitung mit Python Knock # 8 Max Pooling
Erstellen Sie schnell eine Excel-Datei mit Python #python
Bildverarbeitung mit Python & OpenCV [Tonkurve]
Bildverarbeitung mit Python 100 Knock # 12 Bewegungsfilter
Erstellen Sie mit Django Updateview einen Update-Bildschirm
[Python] Erstellen Sie schnell eine API mit Flask
Zeichnen mit Matrix-Reinventor von Python Image Processing-
Verarbeiten Sie Bilder in Python ganz einfach mit Pillow
Generieren Sie eine add-in-fähige Excel-Instanz mit xlwings
[Golang] Erstellen Sie ein Docker-Image mit Github-Aktionen
Erstellen Sie eine englische Wort-App mit Python
Die Bildverarbeitung mit Python 100 führt zu einem durchschnittlichen Pooling von # 7
Versuchen Sie, ein Bild mit Entfremdung zu erzeugen
Leichte Bildverarbeitung mit Python x OpenCV
Bildverarbeitung mit Lambda + OpenCV (graue Bilderzeugung)
Bildverarbeitung mit Python 100 Knock # 9 Gauß-Filter
Erstellen Sie mit cx_Freeze eine aktualisierbare MSI-Datei
[Bildverarbeitung] Posterisierung
XavierNX beschleunigt die OpenCV-Bildverarbeitung mit GPU (CUDA)
Python-Bildverarbeitung
Erstellen Sie eine App, die Schüler mit Python errät
Erstellen eines Hintergrundbilds mit Tupfen mit der Python-Bildbibliothek
Bildverarbeitung von Grund auf mit Python (5) Fourier-Transformation
So beschneiden Sie ein Bild mit Python + OpenCV
Bildverarbeitung von Grund auf mit Python (4) Konturextraktion
Bildverarbeitung mit Python Environment Setup für Windows
Bildverarbeitung 100 Schläge ①
Rollback, wenn beim Stoff ein Fehler auftritt
Erstellen Sie schnell einen API-Server mit Python + Falcon
Ich möchte ein Bild mit Lollipop in WebP konvertieren
Erstellen Sie mit Python + Flask einen animierten lokalen GIF-Server
Hinweise zur HDR- und RAW-Bildverarbeitung mit Python
Erstellen Sie eine Bilddatei mit PIL (Python Imaging Library).