前の関連記事:LibreOffice5(39)ProtocolHandler Addon Javaのxcuファイルを出力するPythonスクリプト
bytetoimage.py:バイト列の十六進数文字列を画像に戻すPythonスクリプト
ByteToImage/bytetoimage.py at 5703e44f16db3d5f40b936e4fcd42379eabf6387 · p--q/ByteToImage
12行目の辞書dicに出力したいファイル名をキー、値にAddons.xcuの十六進数を入れて実行するとimagesフォルダにbmp画像が出力されます。
binasciiモジュールとimghdrモジュールを使っているのでLibreOfficeのバンドルPythonだけでは実行できません。
imagetobyte.py:画像をバイト列の十六進数文字列にするPythonスクリプト
ByteToImage/imagetobyte.py at 5703e44f16db3d5f40b936e4fcd42379eabf6387 · p--q/ByteToImage
bytetoimage.pyとは逆にimagesフォルダにある画像ファイルをバイト列の十六進数文字列として出力します。
これもbinasciiモジュールとimghdrモジュールを使っているのでLibreOfficeのバンドルPythonだけでは実行できません。
topng.py:画像をpng形式に変換する
ByteToImage/topng.py at 5e46c9a3f1b60b31eb4ee977399418c02116a7ce · p--q/ByteToImage
topng.pyはimagesフォルダにある画像ファイルをpng形式にしてOutputフォルダに出力します。
これはPILモジュールが必要なのでAnacondaのPythonインタープリターで実行しています。
bmptopng.py:LibreOfficeのAddons.xcu用のbmpファイルをpng形式に変換する
ByteToImage/bmptopng.py at 5703e44f16db3d5f40b936e4fcd42379eabf6387 · p--q/ByteToImage
ProtocolHandler Addon Javaについてくるアイコン画像は背景となる透明に相当する部位はマゼンダ色になっています。
bmptopng.pyはそのマゼンダ色を透過色にしてpngファイルに変換します。
これはimagemagickのconvertコマンドを使っているのでimagemagickのインストールが必要です(linuxBean14.04(73)matplotlibでアニメーションのグラフ参照)。
Addons.xcuのImageIdentifierのノードは削除
Images for Toolbars and Menus - Apache OpenOffice Wiki
Extensions/Addons - ...?
これらを読むとWriting UNO components examplesのProtocolHandler Addon JavaのAddons.xcuは時代遅れの仕様のようです。
ImageIdentifierを使うのは古い仕様のようですので、p--q/ProtocolHandlerAddonPythonでこのノードを削ってみましたが、動作に問題はありませんでした。
ProtocolHandlerAddonPython/Addons.xcu at faa53674e573bac0d8d8346bceb8c3c1606dcb48 · p--q/ProtocolHandlerAddonPython
Addons.xcuの%origin%にはoxtファイルまでのパスが代入される
Images for Toolbars and MenusとExtensions/Addons - ...?で%origin%について書いてあることが違うように思えたのでメニュー項目に%origin%を入れてみました。
vnd.sun.star.expand:$UNO_USER_PACKAGES_CACHE/uno_packages/lu24835f2wwmb.tmp__/ProtocolHandlerAddonPython.oxt
これが%origin%に入っていました。
vnd.sun.star.expand:$UNO_USER_PACKAGES_CACHE以下のパスはLibreOffice5(8)oxtファイルをzip圧縮するときは最初の階層に注意で見たようにインストールされているoxtファイルが展開されているパスと同一です。
ということで%origin%はoxtファイル内の最上層の階層と同じパスになります。
どうしてImages for Toolbars and MenusとExtensions/Addons - ...?で違うことが書いてあるように見えたのかはAddon toolbar icon (View topic) • Apache OpenOffice Community Forumの相談者のoxtをダウンロードしてみてわかりました。
単にNetBeansのOpenOffice拡張機能プラグインではAddons.xcuを深い階層にいれてあっただけのようです。
バイト列の十六進数文字列の代わりにpngファイルを使う
なぜか画像が表示されず四苦八苦しました。
原因はImageBigHCURLノードの値が空白なことでした。
valueノードの値が空白のImageBigHCURLノードを削除するとアイコンが表示されました。
ただハイコントラスト(HC)の画像が表示されてしまいます。
なのでHCの画像はもうAddons.xcuには含めないことにしました。
ProtocolHandlerAddonPython2/Addons.xcu at 26f410e22ce19a33bf65f561383fe3ff1d08e143 · p--q/ProtocolHandlerAddonPython2
このAddons.xcuでうまくいきました。
pngファイルをoxtファイル内のiconsフォルダに入れています。
ProtocolHandlerAddonPython2/step3createXCUs.py at 26f410e22ce19a33bf65f561383fe3ff1d08e143 · p--q/ProtocolHandlerAddonPython2
Addons.xcuを出力するPythonスクリプトです。
参考にしたサイト
Pythonのimghdrライブラリで画像の種類を判別する方法 | 遍歴プログラマ日記
標準ライブラリにあるimghdrの使用例。
Images for Toolbars and Menus - Apache OpenOffice Wiki
ツールバーやメニューに表示させるアイコンの設定方法。HCURLを指定すると表示されませんでした。
Extensions/AddonsMenu - ...?
既存のメニューに項目を挿入する方法も紹介されています。
Pillow(Python Imaging Library)のインストールと簡単なサンプルコード | mwSoft
anaconda3ではPILがすでに含まれていました。
Imagemagickの使い方日本語マニュアル – 日本語のマニュアルが少ない画像加工ツールImageMagickの使い方を、初心者の方にも解りやすいよう詳しく丁寧に解説しています。
imagematickはSynapticパッケージマネージャでインストールしました。
png - Set transparent background using ImageMagick and commandline prompt - Stack Overflow
imagematickのconvertコマンドで特定の色を透明に変換する方法。
【備忘録】Pythonにおけるアンダースコア"_"の役割について - Qiita
タプルから受け取った使わない変数を_にするとPyDevでエラーと言われなくなりました。
0 件のコメント:
コメントを投稿