まず第一に、グレースケールをシミュレートするという問題があります。式は次のとおりです:
1 |
Gray = 0.2126 × R + 0.7152 × G + 0.0722 × B |
##これで扱いやすくなります。もちろん、RGB モードでは、256x256x256 の色範囲が 256 のグレースケール範囲に変換されますが、文字は依然として 1 対 1 対応ではありません。この問題は、1 つの文字を複数のグレースケールに対応させることで解決できます。
最初に次のような PIL ライブラリをインストールすることを忘れないでください。
Python 2 の場合は、
pip install PIL を実行します。
Python 3 の場合は、
pip installpillow を実行します。
コードに直接進みましょう:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| from PIL import Image
#设置显示的字符集
ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")
WIDTH = 130
HEIGHT = 50
def get_char(r,g,b,alpha = 256):
if alpha == 0:
return ' '
length = len(ascii_char)
gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)
unit = (255.0 + 1)/length
return ascii_char[int(gray/unit)]
if __name__ == '__main__':
img = "E:/WindowsDocuments/G7/Desktop/1.png"
im = Image.open(img)
im = im.resize((WIDTH,HEIGHT), Image.NEAREST)
txt = ""
for i in range(HEIGHT):
for j in range(WIDTH):
txt += get_char(*im.getpixel((j,i)))
txt += '\n'
print(txt)
|
ファイルに出力したい場合は、定義部分
OUTPUT = 'output.txt' に保存したいファイル名を追加し、最後に
# と記述します。
##1
2
with open(OUTPUT, 'w') as f:
f.write(txt) |
|
ついに、これが得られました:
以上がPythonを使って写真をキャラクター絵に変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。