Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Creating ASCII Art from an Image with Python 🐍

2025年09月26日に「Dev.to」が公開したITニュース「Creating ASCII Art from an Image with Python 🐍」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Pythonで画像をアスキーアートに変換するプロジェクトを紹介する。わずか数行のコードで画像処理、ファイルI/O、文字列操作を学べる初心者向けのチュートリアルだ。自分の画像をアスキーアートとしてテキストファイルに出力できる。

ITニュース解説

アスキーアートとは、画像や絵を、文字や記号の組み合わせで表現する独特な表現技法である。コンピュータがまだ画像をきれいに表示できなかった時代から、文字を組み合わせて絵を描く文化が育まれてきた。現在ではグラフィカルな表示が当たり前になったが、このアスキーアートはプログラミングの学習プロジェクトとして非常に人気があり、画像処理の基本的な考え方やファイルの入出力、文字列の操作といったシステムエンジニアにとって重要な基礎スキルを楽しく習得できる優れた題材となる。

このプロジェクトでは、Pythonプログラミング言語と「Pillow(ピロー)」という画像処理ライブラリを利用し、与えられたデジタル画像をアスキーアートに変換する。具体的には、任意の画像ファイルを入力として受け取り、最終的に文字の羅列で構成されたアスキーアートのテキストファイルを出力する一連の処理をPythonのコードで実装する。この過程で、画像をプログラムで開いたり、サイズを変更したり、色情報を変換したり、ピクセルごとの情報を取得して特定の文字に置き換えたり、そして最終結果を画面に表示したりファイルに保存したりする方法を学ぶことができる。これらはシステム開発におけるファイル操作やデータ処理の基礎に通じる重要なスキルである。

プログラムの冒頭に定義されているASCII_CHARSは、アスキーアートの絵を構成するために使用する文字のリストである。このリストの文字は、明るさの「暗い」ものから「明るい」ものの順に並べられている。例えば、「@」や「#」は濃い色を表し、「,」や「.」は明るい色を表す文字として使われる。画像内のピクセルの明るさに応じて、このリストの中から適切な文字が選ばれる仕組みである。

まず、画像ファイルを開くと、プログラムはそれを適切な形に変換していく。resize_image関数は、入力された画像のサイズを調整する役割を担う。アスキーアートは通常、横方向の文字数で表現されるため、ここでは画像の横幅をnew_widthという指定された値(デフォルトでは100文字)に固定する。元の画像の縦横比を保ちつつ、新しい横幅に合わせて適切な高さが計算され、画像がリサイズされる。これは、アスキーアートが見た目上、縦に伸びすぎたり横に潰れすぎたりするのを防ぐために重要だ。次に、grayify関数によって画像がグレースケール(白黒)に変換される。アスキーアートは文字の濃淡で表現されるため、元の画像の色情報は不要であり、それぞれのピクセルの明るさだけが重要となるため、この処理が必要になる。

リサイズされ、グレースケールに変換された画像は、いよいよアスキーアートの文字へと置き換えられる。pixels_to_ascii関数は、この変換の中核を担う。グレースケール画像では、各ピクセルは0(真っ黒)から255(真っ白)までの明るさの値を持つ。この関数では、画像からすべてのピクセルの明るさの値を取り出し、それぞれの明るさの値をASCII_CHARSリストのどの文字に対応させるかを決定する。具体的には、ピクセルの明るさの値(0-255)を25で割ることで、0から10までの11段階に分類し、それぞれの段階に対応するASCII_CHARSリストのインデックスを割り当てている。これにより、明るいピクセルには明るい文字(「.」など)、暗いピクセルには暗い文字(「@」など)が選ばれることになる。すべてのピクセルに対してこの処理を行い、選ばれた文字を順番に連結していくことで、一枚の長い文字列が生成される。これが、アスキーアートの元となる文字の羅列である。

これらの処理を統括するのがmain関数である。まず、main関数は引数として与えられた画像ファイルのパスを使って画像を開こうと試みる。もし指定されたパスが無効であるか、画像ファイルとして開けない場合は、エラーメッセージを表示して処理を中断する。これは、プログラムが予期せぬ入力に対して安全に動作するための基本的なエラーハンドリング(例外処理)の手法である。画像が正常に開かれたら、前述のresize_image関数とgrayify関数を順に呼び出し、画像を適切なサイズにリサイズし、グレースケールに変換する。その後、pixels_to_ascii関数を呼び出して、グレースケール画像からアスキー文字の長い文字列を生成する。

生成された文字列は、まだ改行が含まれていないため、そのまま表示すると非常に長い一行のテキストになってしまう。そこで、main関数内で画像の横幅を使って、この長い文字列を適切な位置で改行して整形する処理が行われる。元の画像の横幅に相当する文字数ごとに改行文字(\n)を挿入することで、視覚的に認識しやすいアスキーアートの形に整えられた文字列が完成する。最後に、この整形されたアスキーアート文字列を画面に表示し、同時にascii_image.txtという名前のテキストファイルに書き出して保存する。ファイルへの書き出しは、with open(...) as f:という構文で行われる。この構文を使うと、ファイル操作が安全に行われ、処理が完了した後に自動的にファイルが閉じられるため、ファイルの破損などを防ぐことができる。

このプログラムを実行するには、まずPythonがインストールされている環境で、Pillowライブラリをpip install Pillowコマンドでインストールする必要がある。その後、プログラムコードの中のmain("your_image.jpg")の部分を、実際にアスキーアートに変換したい画像ファイルのパスに置き換えて実行する。例えば、main("my_cat.png")のように記述する。プログラムが正常に実行されると、画面にアスキーアートが表示され、同じ内容がascii_image.txtファイルとして保存される。

このプロジェクトを通じて、プログラミング初心者は画像の読み込みから処理、そして結果の出力までの一連の流れを実践的に体験できる。画像データのピクセル単位での扱い方、数値データを文字データに変換するロジック、エラーへの対処、そしてファイルへの書き込みといった、システムエンジニアとして働く上で必須となる基本的なスキルと概念を楽しみながら学ぶことができるのだ。また、シンプルなコードで複雑な視覚表現を実現するPythonの強力さと手軽さを実感できる良い機会となるだろう。

関連コンテンツ

関連IT用語

関連ITニュース