Voici ce que vous pouvez lire cet article:
--Viewer pour sélectionner et afficher des images --Passez les paramètres pour le traitement d'image --Afficher l'image traitée
Pour une explication de base de PySimPleGUI, reportez-vous à Si vous utilisez Tkinter, essayez d'utiliser PySimpleGUI.
J'ai vu l'article Générer automatiquement l'art ASCII qui a fait l'image ci-dessus, et il était intéressant de la déplacer. Cependant, comme la taille de l'image et les caractères à poser étaient fixes, j'ai ajouté une interface utilisateur à cette partie. L'algorithme de conversion lui-même est emprunté à l'article original. Le fichier asci_art_transform.py est applicable. L'affichage de l'image lui-même est basé sur le [Demo_Img_Viewer] officiel (https://github.com/PySimpleGUI/PySimpleGUI/blob/master/DemoPrograms/Demo_Img_Viewer.py). Le fichier 08_asci_Img_.py est applicable.
Il est situé sur 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
"""
URL de référence; 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' #Premier fichier
asci_image = "./test.png "
image_elem = sg.Image(data=get_img_data(filename, first=True))
filename_display_elem = sg.Text(filename, size=(80, 3))
#Il n'est pas nécessaire de convertir en asc au moment de l'affichage initial
# './model.jpg'Peut être en colère
# 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('Sélectionnez les fichiers', key='-INPUT-TEXT-', enable_events=True, ),
sg.FileBrowse('Lisez le dossier', key='-FILE-',
file_types=(('fichier jpeg', '*.jpg'), ('png', '*.png'),)),
sg.Button('conversion')]
layout = [col_read_file,
[sg.Slider(range=(1,64),
key='-FONT-SIZE-',
default_value=16,
orientation='h',
)], col]
window = sg.Window('Convertissons-le en art ASCII', 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 == 'conversion':
print(values['-INPUT-TEXT-'])
if os.path.isfile(values['-INPUT-TEXT-']):
#Doit être dans un fil distinct pour animer
sg.popup_animated(sg.DEFAULT_BASE64_LOADING_GIF, message='Fonctionnement',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('Fin de la conversion')
asc_image_elem.update(data=get_img_data(asci_image, first=True))
else:
error_massage = values['-INPUT-TEXT-'] + 'N'existe pas'
sg.popup('Erreur', 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))
La procédure est la suivante.
sg.InputText('Sélectionnez les fichiers', key='-INPUT-TEXT-', enable_events=True, ),
sg.FileBrowse('Lisez le dossier', key='-FILE-', file_types=(('fichier jpeg', '*.jpg'), ('png', '*.png'),)
La mise en page du dossier de diagnostic.
L'image initiale s'affiche au démarrage comme suit.
image_elem = sg.Image(data=get_img_data(filename, first=True))
filename
contient un fichier image fixe.
--Référence: Officiel Description de l'élément d'image
J'utilise get_img_data ()
pour afficher l'image. Cette méthode utilise la même fonction que celle utilisée dans le [Demo_Img_Viewer] officiel (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)
Le fichier correspondant est ouvert à l'aide de l'oreiller, et celui enregistré au format png s'affiche à l'aide de l''Image Tk 'd'oreiller. --Référence: [Description du module ImageTk] de la référence officielle de l'oreiller (https://pillow.readthedocs.io/en/4.2.x/reference/ImageTk.html)
PySimpleGUI est un wrapper pour tkinter, donc je pense que l'une de ses forces est que vous pouvez utiliser d'autres bibliothèques créées comme tkinter.
La partie suivante affiche en fait le fichier lu.
image_elem.update(data=get_img_data(values['-INPUT-TEXT-'], first=True))
Le fichier lu est spécifié. Ici, nous utilisons ʻupdate () `pour mettre à jour l'affichage.
Définissez la taille de la police à convertir avec le curseur
sg.Slider(range=(1,64),
key='-FONT-SIZE-',
default_value=16,
orientation='h',
)
Vous pouvez obtenir la valeur du curseur ci-dessous.
event, values = window.read()
values['-INPUT-TEXT-']
Le fichier est lu et envoyé dans le fichier converti "test.png ".
asci_image = asci.tranfa_asci(values['-INPUT-TEXT-'], "asci_image", int(values['-FONT-SIZE-']))
Le fichier d'image d'art ASCII "test.png " sera affiché.
asc_image_elem.update(data=get_img_data(asci_image, first=True))
Avec PySimpleGUI, vous pouvez facilement créer une visionneuse de traitement d'image qui lit une image, ajoute des paramètres et la convertit. Dans la [Démo] officielle (https://github.com/PySimpleGUI/PySimpleGUI/tree/master/DemoPrograms), il y a des exemples utilisant OpenCV autre que l'oreiller. Il existe également un exemple de programme qui utilise la planification journalière pour colorer les images en noir et blanc.
Recommended Posts