mieki256's diary



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


一応、ヘルプ表示も載せておきます。
> 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 をつけると動作が変わるようにしておいた。
  • --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 でインストールしないといけないようで…。

以上です。

過去ログ表示

Prev - 2021/07 - Next
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project