Cet article présente principalement l'exemple de conversion d'images en peintures de personnages en Python. L'éditeur pense que c'est plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence. Venez jeter un œil avec l'éditeur.
La peinture de personnages est vraiment intéressante. La peinture de personnages est générée en remplaçant les pixels de l'image par des personnages.
Mais les pixels ont des couleurs différentes. Comment encoder des pixels de couleurs différentes en caractères correspondants ?
Méthode de conversion :
Convertir les images couleur en images en niveaux de gris
Selon la profondeur de couleur Valeurs RVB (plage de valeurs de 0 à 255, où 0 est noir et 255 est blanc)
Implique votre jeu de caractères préféré
Selon la séquence du jeu de caractères et la longueur du jeu de caractères, la valeur RVB est codée dans le caractère correspondant.
RVB
Le mode couleur RVB est basé sur trois canaux de couleur : rouge (R), vert (V) et bleu (B). . RVB représente les couleurs des trois canaux rouge, vert et bleu. Cette norme inclut presque toutes les couleurs que la vision humaine peut percevoir.
Normalement, les RVB ont chacun 256 niveaux de luminosité, exprimés numériquement de 0, 1, 2... jusqu'à 255. Notez que même si le nombre le plus élevé est 255, 0 est également l'une des valeurs, il y a donc 256 niveaux au total.
Image en niveaux de gris
L'image en niveaux de gris fait référence à une image qui contient uniquement des informations sur la luminosité et ne contient pas d'informations sur la couleur, tout comme les photos en noir et blanc que nous voyons habituellement : la luminosité De l’obscurité à la lumière, le changement est continu.
Par conséquent, pour représenter une image en niveaux de gris, la valeur de luminosité doit être quantifiée. Il est généralement divisé en 256 niveaux de 0 à 255, dont 0 est le plus sombre (complètement noir) et 255 est le plus clair (complètement blanc). Dans la méthode d'expression de la couleur, en plus du RVB, la formule de conversion du RVB dans les images couleur en valeur de gris Gray est :
#在PIL中,从模式“RGB”转换为“L”模式(灰度模式) Gray = 0.299R+0.587G+0.114B
Par exemple, nous utilisons des minuscules Anglais 26 Alphabet comme jeu de caractères. La capacité du jeu de caractères est de 26 (la largeur de l'intervalle de valeur correspondant à un caractère = 256/longueur du jeu de caractères)
La largeur de l'intervalle ici est 256/26=9,8),
La relation correspondante entre gris et jeu de caractères :
Caractères correspondants à l'intervalle de gris
[0.0, 9.8)这|a [9.8, 19.6)|b [19.6, 29.4)|c ...|... [225.6, 235.4]|x [235.4, 245.2]|y [245.2, 255.0]|z
Fonction de conversion RVB
char_string = 'abcdefghijklmnopqrstuvwxyz' def rgb2char(r, g, b): length = len(char_string) gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b) # 每个字符对应的gray值区间宽度 unit = (256.0 + 1) / length # gray值对应到char_string中的位置(索引值) idx = int(gray / unit) return char_string[idx]
Prétraitement
Si la taille est trop grande ou trop petite, le dessin du personnage ne peut pas être reconnu lorsque nous ouvrons le txt déposer. Vous devez donc d'abord ajuster la taille de l'image à la taille appropriée. Notez ici que vous pouvez modifier le coefficient delta du coefficient de mise à l'échelle selon vos besoins
from PIL import Image #预处理(将图片尺寸压缩,并转为灰度图) def preprocess(img_path,delta=100): img = Image.open(img_path) # 获取图片尺寸 width, height = img.size # 获取图片最大边的长度 if width > height: max = width else: max = height # 伸缩倍数scale scale = max / delta width, height = int(width / scale), int(height / scale) img = img.resize((width, height)) return img
Convertir l'image en caractère
Lire l'image selon Les coordonnées obtiennent le tuple RVB de ce pixel et sont codées sous forme de caractères
def img2char(img_obj, savepath): txt = '' width, height = img_obj.size # 获取像素点的rgb元组值,如(254, 0, 0),并将其转化为字符 for i in range(height): line = '' for j in range(width): line += rgb2char(*img_obj.getpixel((j, i))) txt = txt + line + '\n' # 保存字符画 with open(savepath, 'w+', encoding='utf-8') as f: f.write(txt) img_obj = preprocess(img_path) img2char(img_obj, savepath)
Insérer une image
Changez char_string et transformez l'effet souhaité
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!