2021/07/09(金) [n年前の日記]
#1 [python][gimp][cg_tools] gpl2aco.pyを書いてみた
GIMPパレットファイル(.gpl)を、Photoshopスウォッチ(色見本)ファイル(.aco)に変換するツールを Python で書いてみたので一応アップロード。まあ…使う場面はほとんど無いのではないかと思うのだけど…。Windowsユーザなら、
_Cyotek Color Palette Editor
を導入すれば変換できるし…。
ソースは以下。
_gpl2aco.py - Convert GIMP palette (.gpl) to Photoshop color swatch (.aco) - gist
一応、ヘルプ表示も載せておきます。
ソースは以下。
_gpl2aco.py - Convert GIMP palette (.gpl) to Photoshop color swatch (.aco) - gist
- python gpl2aco.py hoge.gpl hoge.aco で変換できる。
- 色名は、英数字(ASCII)のみサポート。
- Windows10 x64 20H2 + Python 3.9.5 64bit上で動作確認。
一応、ヘルプ表示も載せておきます。
> python gpl2aco.py -h usage: gpl2aco.py [-h] [--nonull] gpl_file aco_file Convert GIMP palette (.gpl) to Photoshop color swatch (.aco) positional arguments: gpl_file Input GIMP palette file (.gpl) aco_file Output Photoshop swatch file (.aco) optional arguments: -h, --help show this help message and exit --nonull Exclude null from color name
◎ 問題点。 :
問題点その1。.aco を
_aco2gpl
を使って .gpl に変換して、その .gpl を、この gpl2aco.py で .aco に変換してみても、最初の .aco とは微妙にRGB値が違ってしまって元の内容には戻ってくれない。
これは、.aco が各RGB値を 0-65535 で記録していて、.gpl が各RGB値を 0-255 で記録しているから、ではないのかなと…。.aco から .gpl への変換は不可逆というか、情報が失われてしまうので、情報が失われてしまった .gpl から .aco を生成してみても元には戻らない、ということだと思う。
問題点その2。.aco にはバージョン1とバージョン2があって、バージョン2は各色の色名を含めることができるのだけど、色名の文字列の持ち方がツールによって異なるようで、どのフォーマットに合わせたらいいのかよく分からなかった。
_Adobe Photoshop File Formats Specification
上記の文書によると、各ファイルに格納される文字列は、最後に NULL (0x0000) がついて、文字数には NULL の分も含まれるらしいのだけど。ツールによっては、最後に NULL がつかず、文字数も NULL を含まない状態で出力されるものがあるようで。どちらのフォーマットのほうが正しいのか分からなかったので、オプション --nonull をつけると動作が変わるようにしておいた。
これは、.aco が各RGB値を 0-65535 で記録していて、.gpl が各RGB値を 0-255 で記録しているから、ではないのかなと…。.aco から .gpl への変換は不可逆というか、情報が失われてしまうので、情報が失われてしまった .gpl から .aco を生成してみても元には戻らない、ということだと思う。
問題点その2。.aco にはバージョン1とバージョン2があって、バージョン2は各色の色名を含めることができるのだけど、色名の文字列の持ち方がツールによって異なるようで、どのフォーマットに合わせたらいいのかよく分からなかった。
_Adobe Photoshop File Formats Specification
上記の文書によると、各ファイルに格納される文字列は、最後に NULL (0x0000) がついて、文字数には NULL の分も含まれるらしいのだけど。ツールによっては、最後に NULL がつかず、文字数も NULL を含まない状態で出力されるものがあるようで。どちらのフォーマットのほうが正しいのか分からなかったので、オプション --nonull をつけると動作が変わるようにしておいた。
- --nonull をつけなければ、文字列の最後に NULL がつく。デフォルトはこの動作。
- --nonull をつけると、文字列の最後に NULL がつかない。
◎ 余談。 :
一応メモ。Python でバイナリデータを生成するなら struct モジュールを使うと楽、らしい。例えば、struct.pack(">H", value) で、ビッグエンディアンの unsigned short を生成できたりする。
_7.1. struct - バイト列をパックされたバイナリデータとして解釈する - Python 3.6.13 ドキュメント
コマンドラインオプションの解析は argparse モジュールを使うと楽。
_ArgumentParserの使い方を簡単にまとめた - Qiita
docopt というものもあるらしい。ヘルプメッセージを書くだけでコマンドラインオプション解析の指定ができてしまう。素晴らしい。
_Python のコマンドライン引数ライブラリまとめ - Qiita
_Pythonistaなら知ってるオプションパーサ - Qiita
ただ、docopt は標準で入ってるわけではなくて、pip でインストールしないといけないようで…。
_7.1. struct - バイト列をパックされたバイナリデータとして解釈する - Python 3.6.13 ドキュメント
コマンドラインオプションの解析は argparse モジュールを使うと楽。
_ArgumentParserの使い方を簡単にまとめた - Qiita
docopt というものもあるらしい。ヘルプメッセージを書くだけでコマンドラインオプション解析の指定ができてしまう。素晴らしい。
_Python のコマンドライン引数ライブラリまとめ - Qiita
_Pythonistaなら知ってるオプションパーサ - Qiita
ただ、docopt は標準で入ってるわけではなくて、pip でインストールしないといけないようで…。
[ ツッコむ ]
#2 [python] PY_PYTHONを指定しておいたとメモ
Windows版Python には、Python3 から py.exe というランチャーがついていて。py -2 と打てば Python2系が、py -3 と打てば Python3系が実行できたりするのだけど。
手元の環境、Windows10 x64 20H2 + Python 3.9.5 x64 で、py hoge.py と打って実行しようとしたら、importエラーが出ることに気が付いた。
とりあえず、バージョンを指定すると動くようになるっぽいので、ユーザ側の環境変数 PY_PYTHON に 3.9 を指定しておいた、とメモ。この状態なら py hoge.py も動作する…。なんでだろうなあ…。
手元の環境、Windows10 x64 20H2 + Python 3.9.5 x64 で、py hoge.py と打って実行しようとしたら、importエラーが出ることに気が付いた。
- py hoge.py : エラー
- python hoge.py : 動作する。
- py -3 hoge.py : 動作する。
- py -3.9 hoge.py : 動作する。
とりあえず、バージョンを指定すると動くようになるっぽいので、ユーザ側の環境変数 PY_PYTHON に 3.9 を指定しておいた、とメモ。この状態なら py hoge.py も動作する…。なんでだろうなあ…。
◎ 関連付けを確認。 :
DOS窓で以下を打てば確認できるっぽい?
.py は、C:\Windows\py.exe に関連付けられているように見える。
> assoc .py .py=Python.File > ftype Python.File Python.File="C:\Windows\py.exe" "%L" %*
.py は、C:\Windows\py.exe に関連付けられているように見える。
[ ツッコむ ]
#3 [windows] Windows10を21H1にアップグレードした
メインPCの Windows10 20H2 x64 を 21H1 にアップグレードした、とメモ。
更新時間は10分もかからなかったような気がする。
更新時間は10分もかからなかったような気がする。
[ ツッコむ ]
#4 [anime][neta] 女子中学生を失神させたらしいアニメについてなんだか考え込んでしまった
先日、「ゲッターロボアーク」というアニメを見ていたら、キャラデザが石川賢先生のソレに結構そっくりで感心してしまったのだけど。キャラデザを確認したら、本橋秀之さんだった。道理で…。あの方のキャラデザはスゴイから…。原作の絵柄の再現度がとんでもないわけで…。とある少女漫画の原作者がアニメ化された映像を見て、あまりに原作とそっくりだったから感動して泣き出してしまったという伝説があるほどで…。
さておき、本橋秀之さんのキャラデザと言えば、やはりゴッドマーズだよなと…。何せ劇場版を公開したら、映画館で女子中学生?が失神したという噂があるぐらいで。自分は未見なのだけど、たしかマーグの洗脳シーンで、という話だったっけか…。
ん? 洗脳シーン?
ちょっと待てよ。洗脳シーンというと、往々にして、なんだか画面がビカビカ光りそうなイメージがあるのだけど。まさか…。それって、ポケモンショック ―― 光過敏性発作で倒れたというオチだったりしないか…?
杞憂であればよいのだけど、万が一、ポケモンショックが原因で倒れていたのだとしたら、それはちょっと…マズイよな…。
自分達は、「女性ファンが会場で失神した」と聞くと、「ああ、感極まり過ぎて失神したのかなあ」などと迂闊にも決めつけて想像してしまうけど。もし、ポケモンショックが原因なら、それはちょっと…。いやまあ、その劇場版とやらは未見なので、洗脳シーンとやらが実際にどういう作りだったのか分からんのでアレだけど。
このあたり、アニメに限った話じゃないよなと。例えば、昭和の頃は、アイドルのコンサートで女性ファンが失神、なんて話もちょくちょく耳にした気もするのだけど。コンサート会場って、場合によっては照明がビカビカと激しく点滅しまくったりしていたのではないか、とも…。当時のアイドルが、「俺のコンサートでファンが失神しちゃったんだよねえ」なんて武勇伝のように思ってたら、それはちょっとマズイのかもしれない。倒れた原因がポケモンショックだとしたら、「ああ…それは…知らなかったとは言え、悪いことをしてしまった…」と反省すべき場面になってしまう…。
まあ、そのあたり、杞憂であってほしいのですけど。どうなんだろ。今となっては調べようもないよなあ…。
てなことを思ってしまったのでメモ。思考メモです。
さておき、本橋秀之さんのキャラデザと言えば、やはりゴッドマーズだよなと…。何せ劇場版を公開したら、映画館で女子中学生?が失神したという噂があるぐらいで。自分は未見なのだけど、たしかマーグの洗脳シーンで、という話だったっけか…。
ん? 洗脳シーン?
ちょっと待てよ。洗脳シーンというと、往々にして、なんだか画面がビカビカ光りそうなイメージがあるのだけど。まさか…。それって、ポケモンショック ―― 光過敏性発作で倒れたというオチだったりしないか…?
杞憂であればよいのだけど、万が一、ポケモンショックが原因で倒れていたのだとしたら、それはちょっと…マズイよな…。
自分達は、「女性ファンが会場で失神した」と聞くと、「ああ、感極まり過ぎて失神したのかなあ」などと迂闊にも決めつけて想像してしまうけど。もし、ポケモンショックが原因なら、それはちょっと…。いやまあ、その劇場版とやらは未見なので、洗脳シーンとやらが実際にどういう作りだったのか分からんのでアレだけど。
このあたり、アニメに限った話じゃないよなと。例えば、昭和の頃は、アイドルのコンサートで女性ファンが失神、なんて話もちょくちょく耳にした気もするのだけど。コンサート会場って、場合によっては照明がビカビカと激しく点滅しまくったりしていたのではないか、とも…。当時のアイドルが、「俺のコンサートでファンが失神しちゃったんだよねえ」なんて武勇伝のように思ってたら、それはちょっとマズイのかもしれない。倒れた原因がポケモンショックだとしたら、「ああ…それは…知らなかったとは言え、悪いことをしてしまった…」と反省すべき場面になってしまう…。
まあ、そのあたり、杞憂であってほしいのですけど。どうなんだろ。今となっては調べようもないよなあ…。
てなことを思ってしまったのでメモ。思考メモです。
[ ツッコむ ]
以上、1 日分です。