tcl/tk でアイコンデータをスクリプトに埋め込む

 tkinterのタイトル横のアイコンをコードに埋め込む方法を参考にスクリプトにアイコンデータを埋め込んでみます。

 Icon rainbowのアイコンをベースにアイコン画像を作っています。Icon rainbow のライセンスには「素材のダウンロードや再配布(第三者がそのまま素材として使用する)できるような形での取り扱いを禁止します」となっているので、tcl/tk のスクリプトと別にアイコンファイルを添付するのはライセンスに違反する可能性があると思われます。

 しかし、スクリプト内に埋め込んでしまえば、第三者がそのまま素材として使用できる形とはならないので、アイコンデータを埋め込んだスクリプトの配布は大丈夫だと考えました。

アイコン画像データを文字列に変換する。

 画像データは、BASE64 でエンコードします。アイコン画像が ~/Pictures/icons/Radio.png にあるとし、結果をファイル(image.txt)に保存します。openssl コマンドを使いましたが、もちろん、base64 コマンドを使ってもいいです。

$ openssl enc -e -base64 -in ~/Pictures/icons/Radio.png -out image.txt

image.txt の内容は以下のようになりました。

iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+g
vaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH5QUMCA8F8YqpoQAABWVJ
REFUWMPFV2tMU2cYfs7pOac9baGn3ArKTQS1XBS8TbM5lSUm7o+JcTFsIWOOMHFm



oocB4IlL7bvUmjjS2c7fTbohS9Bl01mbu2PvAYA3QOPsX5OujkaC5/YBipQoWQKF
QoqIIQmJHrlOEZJCxmKQUEoSwch+MAyPSQKNKoDCvN4Fsj8zzZ4j4wTdsCpBNzxr
RIIc62wZZyY5IyRYXtAzZ1QEHjkYr82peekdTwwSAOB+evwfvSUw8ZlCdcAAAAAA
SUVORK5CYII=

スクリプトに埋め込む

 スクリプトに次のように記述します。

set icon_data "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+g
vaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH5QUMCA8F8YqpoQAABWVJ
REFUWMPFV2tMU2cYfs7pOac9baGn3ArKTQS1XBS8TbM5lSUm7o+JcTFsIWOOMHFm



oocB4IlL7bvUmjjS2c7fTbohS9Bl01mbu2PvAYA3QOPsX5OujkaC5/YBipQoWQKF
QoqIIQmJHrlOEZJCxmKQUEoSwch+MAyPSQKNKoDCvN4Fsj8zzZ4j4wTdsCpBNzxr
RIIc62wZZyY5IyRYXtAzZ1QEHjkYr82peekdTwwSAOB+evwfvSUw8ZlCdcAAAAAA
SUVORK5CYII="
image create photo app_ico -data $icon_data
wm iconphoto . app_ico

 画像データを文字列に変換した image.txt の内容は、改行も含めてペーストします。

 スクリプトのサイズは大きくなりますが、スクリプトとアイコンファイルを別に用意する必要がなくなります。

アイコンデータを埋め込む

 公開中のスクリプトは、アイコンデータを埋め込んだものに変更しました。古いものは公開中止です。

Memo

Posted by sirius