こんにちは、みなさん!最近はPythonを駆使して、色々なことを実現できることに魅了されています。
この度は、PNGやJPEG形式の画像ファイルをICO形式に変換できる小規模なGUIアプリケーションを開発してみました。これは、ウェブサイトのファビコン作成や、デスクトップアプリケーションのアイコンを自分好みに変えたい時に便利なツールです。
この記事が皆さんのお役に立てば嬉しいです。
私の利用環境は以下となります。
Windows11
Visual Studio Codeでファイル作成
PNGとJPEGファイルをicoファイルに変えるGUI

icoファイルに変えるGUIのコードを公開します。
使用するライブラリ
Tkinter
GUIアプリケーションを作成するためのライブラリ。
PIL(Pillow)
.icoファイルに変換するために使用する画像系のライブラリ
icoファイルに変えるPythonのコード
コマンドプロンプトを使って、必要なパッケージをインストールします。
pip install pillowPythonのコードはこちら
import tkinter as tk
from tkinter import filedialog
from PIL import Image
def convert_to_ico():
file_path = filedialog.askopenfilename(filetypes=[("Image files", "*.png;*.jpg;*.jpeg")])
if file_path:
img = Image.open(file_path)
ico_path = filedialog.asksaveasfilename(defaultextension=".ico", filetypes=[("Icon files", "*.ico")])
if ico_path:
img.save(ico_path, format="ICO")
# GUI
root = tk.Tk()
root.title("Image to ICO Converter")
btn = tk.Button(root, text="iconファイル作成", command=convert_to_ico)
btn.pack(pady=20)
root.mainloop()
icoファイルに変えるPythonスクリプトの流れ
このコードは以下のように動作します。
- “Convert Image to ICO” ボタンをクリックすると、ファイルダイアログが開きます。
- PNG、JPG、またはJPEGファイルを選択します。
- .ico形式で保存する場所と名前を選択します。
- 選択した画像が.icoファイルに変換され保存されます。
Pythonコードの解説
それでは1つずつ上からコードを見ていきましょう。
import tkinter as tk
from tkinter import filedialog
from PIL import Imagefrom tkinter import Tk, filedialog:
Tkinter「ティーケーインター」はPythonの標準ライブラリの一つで、簡単なデスクトップアプリケーションを作成するためのものです。この名前は、Tk GUIツールキットに対するPythonの「インターフェース(interface)」であることを示しています。
Tkはウィンドウフレームを作成するクラスです。
filedialogはファイルを選択するダイアログボックスを表示するためのモジュールです。
import Tk, filedialogというのは全てtkinter というモジュールにあります。
from PIL import Image
PIL(Python Imaging Library)は画像処理に関する多くの機能を提供しています。このコードでは、特にImageクラスを使用して画像のリサイズや保存を行っています。
- PIL: ライブラリ(Python Imaging Libraryのフォーク)
- Image: モジュール(PIL ライブラリの一部)
def convert_to_ico()
次はこちらのコードを見ていきましょう。
def convert_to_ico():
file_path = filedialog.askopenfilename(filetypes=[("Image files", "*.png;*.jpg;*.jpeg")])
if file_path:
img = Image.open(file_path)
ico_path = filedialog.asksaveasfilename(defaultextension=".ico", filetypes=[("Icon files", "*.ico")])
if ico_path:
img.save(ico_path, format="ICO")def convert_to_ico():
この行はconvert_to_icoという名前の関数を定義しています。この関数が呼び出されると、指定された画像ファイル(PNG、JPG、JPEG形式)をICOファイルに変換します。
filedialog.askopenfilename(filetypes=[(“Image files”, “.png;.jpg;*.jpeg”)])
この行は、Tkinterのfiledialogモジュールのaskopenfilename関数を使用しています。この関数は、ファイルを開くダイアログボックスを表示し、ユーザーが選択したファイルのパスを返します。
filetypesオプションで、どの種類のファイルが選択できるかを指定しています。
askopenfilenameはプログラミングの文脈では通常、”ask-open-file-name”として読みます。それぞれの単語を個別に読むのが一般的です。
- “ask”(エスク): 「尋ねる」という意味。
- “open”(オープン): 「開く」という意味。
- “file”(ファイル): 「ファイル」という意味。
- “name”(ネーム): 「名前」という意味。
if file_path
このif文は、file_pathが空でない(ユーザーが何らかのファイルを選択した)場合に、以下のコードブロックを実行します。
img = Image.open(file_path)
この行は、Pillow(PIL)ライブラリのImage.openメソッドを使用して、選択された画像ファイルを開きます。
filedialog.asksaveasfilename(defaultextension=”.ico”, filetypes=[(“Icon files”, “*.ico”)])
この行もfiledialogを使用していますが、asksaveasfilename関数は、保存先とファイル名を指定するダイアログボックスを表示します。defaultextension=”.ico”は、保存するファイルのデフォルトの拡張子を.icoに設定します。
if ico_path
このif文は、ico_pathが空でない(ユーザーが保存先を選択した)場合に、以下のコードブロックを実行します。
img.save(ico_path, format=”ICO”)
この行は、Pillowのsaveメソッドを使用して、指定されたico_pathにICOファイルとして画像を保存します。format=”ICO”で、保存するファイルの形式がICOであることを指定します。
次はこちらのコードを見ていきましょう。
# GUI
root = tk.Tk()
root.title("Image to ICO Converter")
btn = tk.Button(root, text="iconファイル作成", command=convert_to_ico)
btn.pack(pady=20)
root.mainloop()
この部分はTkinterでのGUI(Graphical User Interface、グラフィカルユーザーインターフェース)の作成に関するコードです。以下に各行について詳しく説明します。
root = tk.Tk()
この行で、Tkinterの主要なウィンドウ(トップレベルウィンドウ)を作成しています。Tkクラスのインスタンスを作ることで、新しいウィンドウを画面に表示できます。このウィンドウは、他のTkinterウィジェット(ボタン、ラベルなど)を配置するためのコンテナとなります。
root.title(“Image to ICO Converter”)
この行で、Tkinterウィンドウのタイトルを設定しています。この例では、ウィンドウのタイトルバーに”Image to ICO Converter”と表示されます。
btn = tk.Button(root, text=”iconファイル作成”, command=convert_to_ico)
この行で、新しいボタンウィジェットを作成しています。tk.ButtonはTkinterでボタンを作成するためのクラスです。
- root: このボタンが所属する親ウィンドウ(またはフレーム)です。
- text=”Convert Image to ICO”: ボタンに表示するテキストです。
- command=convert_to_ico: ボタンがクリックされたときに実行する関数を指定しています。この例では、convert_to_ico関数が実行されます。
btn.pack(pady=20)
この行で、packジオメトリマネージャを使用してボタンをウィンドウに配置しています。pady=20は、ボタンの上下に20ピクセルの余白を追加することを指定しています。
root.mainloop()
この行は、Tkinterのイベントループを開始します。このループは、ユーザーからの入力イベント(ボタンクリック、キーボード入力など)を待ち受けて、適切な処理(コールバック関数の呼び出しなど)を行います。この行が実行されると、プログラムはウィンドウが閉じられるか、何らかの方法でmainloop()が終了するまで、ユーザーの操作を待ち続けます。
最後に
Pythonスクリプトを私自身の備忘録として記事にまとめました。同じような情報を探している方々に少しでもお役に立てましたら嬉しいです。
本ページで公開しているコードは、バグやセキュリティ上の問題がないかは十分に確認されていません。
このコードを使用する際は自己責任でお願いします。
もし何か問題点や改善点を発見された場合は、お問い合わせフォームを通じてお知らせいただけると幸いです。

