アスキーアートをプログラミング言語のPythonで作ってみた

アスキーアートって何

プログラミングとアートを融合させたい場合に、手っ取り早く表現できるのはこれ。
アスキーアートですね。
まずはご覧ください。

アスキーアートをChatGPTに聞いてみた

今となっては懐かしいアートですが、アスキーアートを知らない人もいると思うので、どんなものかと。
今時のChatGPTに聞いてみました。
以下、回答です。

**********ChatGPT曰く

アスキーアートとは、テキスト文字だけで描かれたアートのことを指します。文字の種類や大きさを調整することで、テキストの視覚的なレイアウトを作り出すことができます。

アスキーアートは、最初のパーソナルコンピュータが普及した1970年代に登場しました。
当時、コンピュータのグラフィック能力は限られており、画像を描くのにテキスト文字を使用することが一般的でした。

この技術は、コンピュータ画面上でプログラムが実行されている間、テキスト文字を使って遊び心のあるイラストを作ることができるという魅力的なアイデアを生み出しました。

アスキーアートは、様々な形式で表現されます。単純な絵文字から、詳細な3Dモデルまで、どんなものでも表現できます。

一部のアスキーアーティストは、手動でアートを作成することもありますが、多くの場合、画像変換ツールやオンラインアプリケーションを使用して、元の画像をテキストで置き換えます。

***********だそうです。

はい、わかりましたか?

アスキーアートをプログラミング言語Pythonで描いてみる

簡単に言うと、アスキーアートてのは、いわゆるテキストで絵やロゴを描いていくってやつです。

アートとしての面白さと、プログラミングの楽しさを感じられるのが、このアスキーアート。

特にプログラミングを始めてみたいけど、数字の羅列や計算とかは面倒だなーって人には、何か面白い結果が出るこのアスキーアートはおすすめです。

アスキーアートを作る

それでは、今回はアスキーアートを作るわけですが、以下のコードをgoogle colabへ貼り付けて、実行します。
ちなみに言語はPython3です。


from PIL import Image
from PIL import Image, ImageDraw

# アスキーアートに変換する画像ファイルのパス
IMAGE_PATH = “/content/○○○.jpg”

# アスキーアートに使用する文字列
ASCII_CHARS = [“@”, “#”, “S”, “%”, “?”, “*”, “+”, “;”, “:”, “,”, “.”]

# アスキーアートの横幅(文字数)
WIDTH = 80

# 画像を開く
image = Image.open(IMAGE_PATH)

# 画像をグレースケールに変換
image = image.convert(“L”)

# 画像のサイズを縮小
width, height = image.size

aspect_ratio = height / width
new_width = WIDTH
new_height = int(WIDTH * aspect_ratio * 0.46)
image = image.resize((new_width, new_height))

# 画像をアスキーアートに変換
pixels = image.getdata()
characters = “”.join([ASCII_CHARS[pixel // 25] for pixel in pixels])
art = “\n”.join([characters[i:(i + new_width)] for i in range(0, len(characters), new_width)])

# アスキーアートを表示
print(art)

# ファイルにアスキーアートを書き込む
with open(“/content/○○○.txt”, “w”) as f:
f.write(art)

# ファイルが保存されたことを確認
import os
if os.path.exists(“/content/○○○.txt”):
print(“アスキーアートをファイルに保存しました。”)
else:
print(“アスキーアートの保存に失敗しました。”)

 

設置した画像を元に、テキストファイルにアスキーアートを描いてくれるものです。

ところが、このテキストファイルに描くやつだと、大きさの関係で人間にはちょっとわかりづらいんですね。

そこで、テキストファイルを画像に変換するコードがこれです。

from PIL import Image
from PIL import Image, ImageDraw

# テキストファイルを開く
with open(‘/content/○○○.txt’, ‘r’) as f:
text = f.read()

# 画像サイズを指定する
width, height = 500, 600

# 画像オブジェクトを作成する
img = Image.new(‘RGB’, (width, height), color = (255, 255, 255))

# テキストを描画するためのオブジェクトを作成する
draw = ImageDraw.Draw(img)

# テキストを画像に描画する
textwidth, textheight = draw.textsize(text)
x = (width – textwidth) / 2
y = (height – textheight) / 2
draw.text((x, y), text, fill=(0, 0, 0))

# 画像を保存する
img.save(‘/content/○○○.jpg’)

 

このコードもgoogle colabへ貼り付けて実行してみましょう。

お次は上記の2つのコードを1個にまとめた方が使い勝手がよろしいかと思い、コードを合体させました。
それがこちら。

from PIL import Image
from PIL import Image, ImageDraw

# アスキーアートに変換する画像ファイルのパス
IMAGE_PATH = “/content/kei001.jpg”

# アスキーアートに使用する文字列
ASCII_CHARS = [“@”, “#”, “S”, “%”, “?”, “*”, “+”, “;”, “:”, “,”, “.”]

# アスキーアートの横幅(文字数)
WIDTH = 80

# 画像を開く
image = Image.open(IMAGE_PATH)

# 画像をグレースケールに変換
image = image.convert(“L”)

# 画像のサイズを縮小
width, height = image.size

aspect_ratio = height / width
new_width = WIDTH
new_height = int(WIDTH * aspect_ratio * 0.46)
image = image.resize((new_width, new_height))

# 画像をアスキーアートに変換
pixels = image.getdata()
characters = “”.join([ASCII_CHARS[pixel // 25] for pixel in pixels])
art = “\n”.join([characters[i:(i + new_width)] for i in range(0, len(characters), new_width)])

# アスキーアートを表示
print(art)

# ファイルにアスキーアートを書き込む
with open(“/content/○○○.txt”, “w”) as f:
f.write(art)

# ファイルが保存されたことを確認
import os
if os.path.exists(“/content/○○○.txt”):
print(“アスキーアートをファイルに保存しました。”)
else:
print(“アスキーアートの保存に失敗しました。”)

# テキストファイルを開く
with open(‘/content/○○○.txt’, ‘r’) as f:
text = f.read()

# 画像サイズを指定する
width, height = 500, 600

# 画像オブジェクトを作成する
img = Image.new(‘RGB’, (width, height), color = (255, 255, 255))

# テキストを描画するためのオブジェクトを作成する
draw = ImageDraw.Draw(img)

# テキストを画像に描画する
textwidth, textheight = draw.textsize(text)
x = (width – textwidth) / 2
y = (height – textheight) / 2
draw.text((x, y), text, fill=(0, 0, 0))

# 画像を保存する
img.save(‘/content/○○○.jpg’)

 

アスキーアートをプログラミング言語のPythonで作ってみたのまとめ

google colabで動作確認済みです。いろいろいじって遊んでみてください。
アスキーアートに使う文字を変えてみるとか、画像の大きさを変えてみるとか。
自分に合ったコードに改造してみてください。

改造して動かしていくと、どんどん腕が上がっていきます。
当然、わからないところやエラーが出たりしますが、そんな時はググったり、チャトッたり(別名GPTったり)なんかで解決していきましょう。

アート系が好きな人、ちょっと変わったプログラミングをしてみたいって方はぜひ!

*******************

Follow me!

PAGE TOP