モブ沢工房

プログラミングとかLinux関連(特にOSSのグラフィックツール関連)とかレトロゲームとか3Dプリンタやら日曜大工等、色々。

python

Kritaのten brushesの設定ダイアログが動かなくなったので改造

なんか原因はよく分かりませんが、Krita4のten brushesの設定ダイアログがRuntimeError吐いて動作しない現象が再発。 前も起きてたんですがPPA版にしたとき直った気がしたんですがね… で、まぁ重い腰を上げて色々やってみるべぇ…ってやってみたんですがどう…

Kritaのpythonプラグインについてメモ・Palette編

さてkritaのpythonプラグインですが、Paletteオブジェクトも癖があります。 最も不可思議なのは Palette.numberOfEntries() メソッドが、必ず 実エントリの倍の数 を返してくるところ です。 例えば320エントリあるパレットであれば、numberOfEntriesは640を…

Kritaのpythonプラグインについてメモ・ManagedColor編 (追記あり)

最近PythonによるKritaのプラグインづくりにハマっているのですが、 これが中々面白い。 Scriptorという即スクリプトを試せる環境もあって、これが実に心強いのです。 だがしかしドキュメント的にはあまり整備されていない点が多いようです そこで一応ネット…

mypaint 2.0.0-alphaへの追従で四苦八苦

Mypaintの自作ブランチにupstreamのmergeを長期間怠っていたら、大変な作業量が待っていました…備忘録的に 目に付いた主な変更点 ビルドシステムがSConsからsetup.pyへ移行している scons debug=trueに相当するのは、python setup.py build --debug この結果…

python2のpropertyとタプルの分解で苦労した話

検索ワードが思いつかず苦労しました。アンパックというのですね。 foo, bar = (100, 200) みたいなやつ。 例えばこんなクラスがあったとします class _Node: def __init__(self, x=0.0, y=0.0): self._v = np.array( (x, y, 1) ) @property def x(self): re…

python-OpenCV2のfillPolyで苦労した話

python-opencv2にて、普通に [[x1, y1], [x2, y2], [x3, y3] ....] 的な配列を突っ込んだら、np.int32だろうが何だろうが以下のエラーが出続けた話。 OpenCV Error: Assertion failed (p.checkVector(2, CV_32S) >= 0) in fillPoly, file /build/opencv-L2vu…

systemdでstopした時にpythonのfinallyが呼ばれない問題について

systemdでsystemctl stop hoge.serviceすると、基本的にSIGTERM -> SIGKILLが送られてdaemonプロセスが終了します。 しかしながら、pythonのfinally節はSIGTERMで終了した場合は呼びだされません。 そのため、pythonでdaemonを作った時、finallyで必ず呼ばれ…

GtkSourceViewを表示専用にする

GtkSourceViewを表示専用にする、その方法が分からなかったのでメモ Gtk+3入門作者: ToshioCP発売日: 2017/06/06メディア: Kindle版この商品を含むブログを見る はいアフィ入りました〜w というか他のGTK関連書籍は正直10年いや20年前のもので役に立たないと…

SWIGオブジェクトから生のポインタを取り出すには

最近SWIGづいていますが… PythonのSWIG(SWIGのPythonか…?)ラッパーオブジェクトからポインタを取り出すにはどうすればいいのか? それも、自作のクラスオブジェクトでございます。 なんでこんなことをする必要があるのかというと、SWIG化クラス「foo」があ…

Gdk(pygi)でマウスカーソルを任意位置に動かすには

感動のあまりカキコ! 改造版mypaintのsizechangemode.pyから一部抜粋〜 def drag_start_cb(self, tdw, event): self._ensure_overlay_for_tdw(tdw) self._queue_draw_brush() # Storing original cursor position and some needed objects. dev = event.get…

SWIG & python でundefined_symbolが出る時

何か超久々ですがとりあえず… とりあえず以下、例として、 Flagtileというクラスがあるとします python用のtestlib2モジュールに組み込まれます。 SWIG, g++ともコンパイルは問題なく通る C++内では普通に使えている しかし、SWIGでPythonモジュールに組み込…

cgdbを用いてpython拡張モジュール(てか、mypaint)をデバッグする方法

これまた備忘録的に… 当然ながらgccとかg++はデバッグオプション(-g -O0) でビルド mypaintの場合はsconsを使っているため、SConstructに書いてあるようにdebugオプションを使う つまり、scons debug=true デバッグビルドができたらcgdb pythonとする b 関…

PyGiで謎のワーニングに対処する

今試作中のMypaint向けスタンプツールでポップアップメニューをgladeで作るように変更しました (以前はコードから作ってたけど、見通しが悪いので) それでいろいろ試行錯誤した結果、Gtk.ActionGroupでアクションを作って、このアクションからcreate_menu_…

MyPaintにPolyfilltoolを実装しています

MyPaint私家版にさらにPolyfilltoolを実装ッ!(途中) アイデアとしてはこうです。 「brushlibを弄ってポリゴンフィルを付けるのは面倒だが、pycairoで描いてそのサーフェスをgdk.pixbufに変換しさらにそれをmypaintのレイヤのメソッドload_surface_from_pix…

BeautifulSoup4で突然なんだかエスケープされるようになったので対処

あ…ありのまま 今 起こった事を話すぜ! 「おれは xml-rpcでfc2から取ってきた記事をbs4にかけたと 思ったら すべてのタグが<とかでエスケープされていた」 な… 何を言っているのか わからねーと思うが おれも 何をされたのか わからなかった… というわ…

私家版改造MyPaintがなんだかエライことになってきた件

機能つけすぎてわけわからんわ〜という感じになりつつあり… (^^; github.com ↑なんか比較的カッコいいリンクが作れたので、これで参ります。 当私家版MyPaintでは様々な機能を実験していますが、その中でもひたすらインクツールを改良しまくっています。いや…

mypaint 1.2にkrita風stabilizer(の簡易版)をつけてみるテスツ

(追記あり) mypaintにどうしてもKritaのstablizerを付けたかったのですが、とりあえずKritaのソースも読まず適当なものをつけてみたら思いの外、中々よいスタビライズ感があったのでここにメモしておきます。 なのであくまでkrita風なのですが、使ってみた感…

GIMPでアルファ継承(擬似クリッピングレイヤー)

スクリプトで実装という。 つまるところ単純にグループレイヤーの最下層のアルファ値でマスクを作り、その他の兄弟レイヤにマスクとして適用するというモノです。 最下層のレイヤを描き変え終わったら、このスクリプトを走らせてマスクを同期させる、という…

GIMPでG'MICのColorize(comic)向けレイヤ分割スクリプト

最近になってG'MICプラグインのColorize(comic)を知ったのですが、本当に凄いですね。 これで下塗りが楽になったので、ものすごい速度向上しました。 ちなみにワタクシのお絵かきブログにて備忘録的にメモしていたりして…で、そこで少しだけ愚痴っているよう…

Mypaint 1.2betaでinktoolのノードをキーボードから削除

inktool-なんと聞こえのよい言葉かー! というかMypaint 1.2 beta。入れてみました。レビューしたいところなのですがとりあえずそれはまた今度…ということで備忘録的に、キーボードからinktoolのノードを消せるようにしてみました。 mypaint 1.2からはinkツ…

gimpで「可視ピクセルからレイヤを得る」

久々にgimpを使ってみました。 kritaではモデファイア押下+マウスクリックで「カーソル直下の可視ピクセルが所属するレイヤをアクティブ」にすることができます。地味に便利。 しかしgimpでは…不可能では無い。移動ツールで「つかんだレイヤーまたはガイド…

続・OpenCV@Pythonでスキャナのゴミ取り(コマンドラインツール化)

コマンドラインツール化に伴い、前回より少し工夫してみました。 前回の最大の問題点は、主線の中にあるムラがゴミと判断される問題。 方針としては、ゴミよりは大きい、ある程度の大きさの領域(適当に600平方ピクセルとしました)にはcv2.pointPolygonTest…

OpenCVでスキャナのゴミ取りをやってみた

ふと一念発揮してスキャナのゴミ取りをOpenCVで自動化出来ないかと思い、やってみることにしました。 こんな実験にわざわざCで書くのもめんどいので、毎度ながらのPythonですw 対象は今描いているイカちゃんのイラストの線画にしました。 方法としては、find…

gimpの前景色と背景色が勝手に変わる現象について(小手先編)

お絵かきブログにかまけていた結果、5〜6月は全く更新していなかったのか…(愕然 いやまぁ別にどうということもないのですが… ところでgimpの前景色と背景色が勝手に変わる現象に悩まされています。 どうも設定ファイルが勝手に書き換わっている模様。 という…

先日作ったgimp用プラグイン・automate-workflow.pyを改造

以前作りましたgimp用python-fuプラグイン「automate-workflow.py」、自分で不要とか言ってみましたが実際使ってみると至極便利。 そんなわけでさらに改良を加えました。 今度の改良点は実にシンプルなもので、今まで/tmpに吐いていたエラーログを、gtkのMes…

gimpのpython-fuな自由変形プラグインを、さらに改造

先日作ったgimpのpython-fuな自由変形スプライト的プラグイン。 さらに改造して変貌しつつあります。 なんと!今回の改造では パス内の複数の四角形ストロークに対応 ソース(アクティブレイヤー)がレイヤグループの場合、レイヤグループのメンバをソースと…

gimpのpython-fuで作る四角形の自由変形プラグイン

昔、サターンというゲーム機があり(って別に解説は要りませんなw) 、その特徴が自由変形スプライトだった…と聞いております。プレイしたことはありますが開発環境など、触ったことは無いので詳しいことはわかりません。 それが確か、四角形の四頂点の位置を…

ぼくのかんがえたさいきょうのgimp用python-fuスクリプト「automate-workflow.py」

追記あり:恥ずかしながらpython-fuで別に登録しなくてもバッチ処理できることが判明したので、このスクリプトは意味が無くなってしまいました…(恥) はてなブログでは晒しませんが、オイラの趣味はお絵かきでございます。gimpでカキカキするのが楽しいのです…

potraceラッパースクリプト「mypotrace.py」

はじめに potraceというプログラムがありまして、これは「ビットマップをsvgなどのベクタ線画画像に変換する」ものなのですが、応用として「鉛筆で描いた絵をペン画風に自動クリンナップする」ような用途にも使えます。 このpotraceは実に素晴らしいプログラ…

gimp用、即座にガウスぼかしを行うためのプラグイン

ガウスぼかしというものがありますが、アレのピクセル数とかっていちいち調整するのが面倒ですよね。 ぼかしってマスクと組み合わせて可変形状のグラデみたいに使えますし、結構使いドコロが多いと思うのですが、そういう使い方だと、少なくして→多くして→ま…