xubuntuのPythonプログラムでpyinstallerを使う

Pythonプログラムを1つの実行形式のプログラムにするpyinstallerをxubuntuで使ってみた。

PythonプログラムはTkinterを使って絵画展などの出品作品に使うキャプションを作成するものである。一例を下に表示しておく:

キャプション

このPythonプログラムはwindows10でもexe化したことがあるので2つのOSでも比較にも興味があった。

xubuntuに新たにPythonの仮想環境を作りそこで作業をした

  • まずpyinstallerや最低限のパッケージをインストールした。
  • 仮想環境下で端末を立ち上げpyinstallerを実行した。

出来た実行形式のプログラムの大きさは4.6MBになった。win10では10MB程度だったので随分とコンパクトになった。

占有メモリーの大きさも調べてみた。win10ではタスクマネージャー->プロセスの画面のメモリー項目がらこのプログラム4は12.1MBのメモリーを喰っていることがわかった。一方xubuntuではコマンド

ps aux

を使った。結果は50.4MB。詳細をみるためにコマンド

pmap -x [pid]

を使った。フォントや動的ライブラリーが大きな要素を占めていることわかった。

xubuntuでgnome-calendarを使う

これもwin10を諦めてlinuxを使う計画の一環として出会った話題である。

Linuxにもカレンダーは幾つもある。最初に試みたのはMorgen。商用のソフトであるが無料版もあるという情報もあり使い始めたが実は無料版は廃止になっていた。

次にgnome-calendarに注目した。これを単体で使うことには何も問題ないが、win10の時と同じようにグーグルカレンダーと同期して使うには追加の作業が必要。

インストールしたのはgnome-calendar本体とgnome-online-accounts。後者のパッケージのインストールでgnome-control-centerも追加される。

この処理でアプリケーションメニューに「カレンダー」が現れる。この時点ではグーグルカレンダーとの同期は確立できていない。

これはgnome-control-centerで行う。これの起動は端末から以下のコマンド:

env XDG_CURRENT_DESKTOP=GNOME gnome-control-center

コントロールパネルの中の項目online-accountsを選択しこの設定画面を出す。この中にグーグルがあるのでそれを選択しカレンダーデータのみを同期させる設定をする。

xubuntuのアプリケーションメニューの「カレンダー」を起動する。同期が確立されていることが確認できる。

xubuntuのGIMPで2Lサイズの写真を印刷する

使っているプリンタはEpsonのEP-805AWである。

win10ではエプソンが提供しているEpsonPhoto+という大変に重宝なソフトを使って写真を印刷してきた。win10がこの10月末でサポートが切れるので、windowsを諦めてLinuxにしようと計画している。今日のテーマもその一環である。

2Lサイズ(127mmX178mm;アスペクト比=1.38)の写真はほどほどに細部も見えるしA4サイズほどインクを使わないので写真の推敲に適したサイズである。このサイズの写真(縁なし)をxubuntuのGIMPを使って印刷する。

使っているカメラはsonyのRX10M4でRawモードで撮影している。このRawモードで得られた画像は5466X3664ピクセルでアスペクト比=1.5であり、2Lサイズと比較すると若干横長である。

プリンタドライバー

初めにやったことはプリンタのドライバーのインストールである。幸いにしてこのプリンターのLinuxドライバーをエプソンが提供している(注意:エプソンのダウンロードサイトにはこのプリンタのドライバーとして2種類のドライバーが用意されているが、EP-805A シリーズと明記されて方をダウンロードすること)。このドライバーをインストールすると2Lなどの写真用紙が選択できる。

画像のインポート

次にGIMPに画像をインポートする。プルダウンメニュー「ファイル」->「新しい画像」から幅178mm高さ127mmの新規画像を作る(ミリメートル単位)。白い画像ができる。これが写真を貼る台紙になる。次にプルダウンメニュー「ファイル」->「レイヤーとして開く」から印刷したい画像をインポートする。プルダウンメニュー「レイヤー」->「レイヤーの拡大・縮小」で画像を台紙に綺麗に収まるようにする。今の場合画像のアスペクト比が1.5なので高さを台紙の高さ125mmにする。左右が台紙から飛び出す。プルダウンメニュー「ツール」->「変形ツール」->「移動」を使って画像を台紙にたいして動かし左右をトリムする(台紙の外にある部分は印刷されない)。

画像の印刷

プルダウンメニュー「ファイル」->「印刷」で印刷設定画面を出す。項目メニュー「全般」ではプリンタが選択されて」いることを確認する。項目メニュー「ページの設定」では用紙サイズ等の選択をする(なぜか選択窓には英語名がでる。)例えば「種類」->「epson photo glossy paper」,、「用紙のソース」->「Manual feed」(手差し)、用紙のサイズ」->「2L size」、「用紙の向き」->「横方向」。項目メニュー「画像の設定」ではフチなしの印刷をしたいので「余白を無視する」の欄にチェックを入れ、ボタン「既定値の読み込み」を押す。プレビュー画面に印刷結果が表示される。項目メニュー「拡張」では印刷の質(Quality)が設定できる。normal(普通)かquality(きれい)を選ぶ。またフチなしの印刷にしたいのでBorderlessでOnを選択する。最後に印刷ボタンを押す。

 

米ケ袋花桃2025

今年も米ケ袋の花桃が綺麗に咲いた。今日(5月5日)あたりが見納めかな。

写真を載せておく:

定番の一枚
空を背景に
散歩のワンちゃんと

そのほかの写真はここにある。

「遊動マルタンガール」を使う

先日「とまと」に乗ったときにこの「遊動マルタンガール」を使った。

この装置の写真はここにある。

「とまと」はすぐに頭を上げてしまうのでそれを防ぐことができる。装置をつけた「とまと」の走りは安定したものでとても乗り易かった。

「乗馬教本」(日本馬術連盟)の説明は「ウマが制御できないほど高く上げたり振ったりするのを防ぐ」また「騎乗者の手がどんなに動いても手綱は常に正しい方向から銜に到達するのを確実にするためのものである」とある。

マルタンガールには遊動マルタンガール(Running Malutingale)と固定マルタンガール(Standing Malutingale)がある。使ったのは前者である。

「折り返し」を使うことに批判的な意見をよく聞くが、それとは違う役割を「マルタン」はしているのかもしれない。

 

 

xubuntuのPython仮想環境でLibreOfficeを使う(エピローグ)

前回ではPython仮想環境で起動したLibreOfficeではそのマクロのためのAPSOがエラーで使えないという結果だった。

原因はunoモジュールなどのマクロに必須のモジュールがインポートできないことである。ubuntuなどのlinuxではこれらのモジュールはシステムワイドの領域にインストールするパッケージとして用意されていてPython仮想環境に直接インストールすることは困難になっている。

Python仮想環境はシステムワイドなPythonと隔離してPythonが使えることを理想としているように思われるが、ここでは次善の策としてシステムワイド用に用意されているパッケージを臨時的に使えるようにしてPython仮想環境のLibreofficeを起動させる方式をとった。

そのためにはPython仮想環境下でのターミナルエミュレータ

export PYTHONPATH=/usr/lib/python3/dist-packages

とシステムワイドのパッケージへのパスを通してやる。この下でLibreOfficeを起動させる。これでマクロの作成は問題なくできる。

この方式を採ると1つのPython仮想環境をシステムワイドな環境から切り離した理想的なPython仮想環境とLibreOffice のマクロ作成の環境とに切り換えて使うことができる。

RawTherapeeによる背景のぼかし

RawTherapeeがヴァージョン5.9から局所処理に使えるようになってその処理を時々使っている。今回は背景をぼかすことにつかった。

写真は蝋梅をアップで撮ったものであるが、背景のボケが甘く蝋梅がすこし沈んでいる。そこで背景のボケを少し強くしたい。ボケの処理は簡単にできるがそれを背景にのみに作用させたい。この処理をRawTherapeeの局所処理で行う。

オリジナル画像

まず処理の適用部分の切り出しをする。RawTherapeeの領域選択はアルゴリズム的である。適用部分のなかに典型的なスポットを選択する。そのスポットを参照点として各ピクセルの色空間上の距離を計算する。これが予め定めてある閾値より小さければそのピクセルは参照点と同類であるとする。そうでなければこのピクセルは処理範囲外とする。このようにして参照点と同類であるかどうかで処理領域を決める。

背景をぼかす領域の設定では画面全体を選択してぼかす処理をしたくない点を参照スポットとする。今の場合は中心にある蝋梅の花弁。

つまり背景をぼかす処理をするときにはその処理をしたくない領域をまず確定させる。次にその「リヴァース」をとる。これで領域が反転する。この反転した領域がぼかしをかけたい領域となる。

適用確認ボタン(ΔEのプレヴュー)がにオンなっていると、適用領域に半透明のマスクがかかる。適用領域が期待したものになるように閾値(実は複数個ある)を変えてみる。

このようにして得られた領域に適当なガウスぼかしを施した画像を以下に載せる:

背景ぼかしをした画像

 

xubuntuのPythonマクロにScriptForgeを使う

ScriptForgeはLibreOfficeをプログラム的に操作することを目的としたモジュール作成のためにLibreOfficeから提供される膨大なライブラリー群である。Pythonマクロ作成にはその一部であるクラスCreateScriptServiceを使う。

ScripyForgeはLibreOfficeのインストールと一緒にインストールされるがxubuntuを含むubuntuではシステムワイドなパッケージとして別個にインストールする:

sudo apt install python3-scriptfoge

またこのクラスを継承した各種ドキュメント用、インタフェース用のクラスが用意されてる。これらの説明はここにある。

ここではスプレッドシートCalcをPythonマクロで操作するために必要なそのサブクラスを使う。

このサブクラスで使える様々のメソッドの説明はここにある。

例題は「今開いているシートのセルA!に書かれている数値を読み込み、それに書かれていた数値に1を加えた数値を再度セルA1に書く出す」というものである:

# coding: utf-8
from __future__ import unicode_literals
from scriptforge import CreateScriptService
doc = CreateScriptService("Calc")
def increment_cell(args=None):
    value = doc.GetValue("~.A1")
    print(type(value))
    value += 1
    doc.SetValue("~.A1", value)
g_exportedScripts = (increment_cell, )

GetValue、SetValueが使ったメソッドで、引数の中の~はCalcで今開いているシートを指す。最後の行はこのモジュールでマクロとして登録する関数名をタプルで並べる。ここの例ではincrement_cellがそれである。

ScriptForgeなしでもマクロは書けるが、これを使った方がプログラムはすっきりする。