51 lines
No EOL
2 KiB
Python
51 lines
No EOL
2 KiB
Python
from PIL import Image, ImageDraw, ImageFont
|
|
import numpy as np
|
|
|
|
def generer_images_ascii(taille_cellule, font_path="arial.ttf", font_size=14):
|
|
caracteres_ascii = "@%#*+=-:. "
|
|
images_ascii = {}
|
|
font = ImageFont.truetype(font_path, font_size)
|
|
|
|
for caractere in caracteres_ascii:
|
|
image = Image.new('L', taille_cellule, "black")
|
|
draw = ImageDraw.Draw(image)
|
|
w, h = draw.textsize(caractere, font=font)
|
|
draw.text(((taille_cellule[0]-w)/2, (taille_cellule[1]-h)/2), caractere, fill="white", font=font)
|
|
images_ascii[caractere] = np.array(image)
|
|
|
|
return images_ascii
|
|
|
|
def comparer_cellule_avec_ascii(cellule, images_ascii):
|
|
scores = {}
|
|
for caractere, image_ascii in images_ascii.items():
|
|
difference = np.abs(cellule - image_ascii)
|
|
score = np.mean(difference)
|
|
scores[caractere] = score
|
|
return min(scores, key=scores.get)
|
|
|
|
def charger_image_et_convertir_ascii(chemin, taille_cellule=(8, 8), font_path="arial.ttf", font_size=14):
|
|
image = Image.open(chemin)
|
|
image = image.convert('L')
|
|
largeur, hauteur = image.size
|
|
pixels = np.array(image)
|
|
images_ascii = generer_images_ascii(taille_cellule, font_path, font_size)
|
|
resultat = ""
|
|
|
|
for i in range(0, hauteur, taille_cellule[1]):
|
|
for j in range(0, largeur, taille_cellule[0]):
|
|
cellule = pixels[i:i+taille_cellule[1], j:j+taille_cellule[0]]
|
|
if cellule.shape[0] != taille_cellule[1] or cellule.shape[1] != taille_cellule[0]:
|
|
continue
|
|
caractere = comparer_cellule_avec_ascii(cellule, images_ascii)
|
|
resultat += caractere
|
|
resultat += '\n'
|
|
|
|
return resultat
|
|
|
|
# Exemple d'utilisation
|
|
chemin_image = "chemin/vers/votre/image.jpg"
|
|
taille_cellule = (8, 8) # Ajustez selon les besoins
|
|
font_path = "arial.ttf" # Ajustez le chemin vers la police si nécessaire
|
|
font_size = 14 # Ajustez la taille de la police si nécessaire
|
|
resultat_ascii = charger_image_et_convertir_ascii(chemin_image, taille_cellule, font_path, font_size)
|
|
print(resultat_ascii) |