問題タブ [pycairo]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - カイロよりもPythonでベクターグラフィックを描画するための優れたライブラリはありますか?
...私はカイロに対して何かを持っているわけではありません-私は実際にそれが大好きです。特にMacにPythonバインディングをインストールするのは非常に困難です(OS Xへのpycairoのインストールに関するすべてのSOの質問を参照してください)。より良い選択肢はありますか?
編集:
もう少しコンテキストを説明するために、理想的には標準のインストールチャネルを使用して、簡単にデプロイできるWebサービスを作成しています。多くの展開プラットフォームでは、単純に使用できないpip
か、展開プロセスに複雑さが生じます。easy_install
さらに、誰でも簡単に仮想環境をセットアップして、ローカルマシン上のアプリケーションで開発を行えるようにしたいと思います。ここでも、インストールの容易さが重要なポイントです。
python - Python + Cairo + GTK/GDK ピクセル バッファの簡単なセットアップ
私自身の利益のために、そしておそらく教育目的で、Python と Cairo 用の pygame のような API を作成したいと考えています。しかし、私はそれを正確にパイゲームにしたくありません。代わりに、GTK/GDK を使用して 1 つ以上の画像を表示する半静的な描画プラットフォームにしたいと考えています。また、TiKZ (ラテックス パッケージ) の優れた API 原則を模倣したいと考えています。PyGame API は悪くありませんが、私は満足していません。特定の問題の 1 つは、すべてを (Cairo を使用して) pixbuf に描画することでウィンドウの更新を処理し、ウィンドウが覆われていないときに pixbuf を自動的に再描画するようにパッケージが欲しいことです。そうすれば、エンド プログラマはウィンドウの更新について心配する必要がなくなります。実際、エンド プログラマーは、単一のクラスや関数を記述する必要はなく、スマイリー フェイスを描画するための一連のコード行を記述するだけで済みます (たとえば)。グラフィックス ライブラリは、TkInter の場合のように、格納された形状オブジェクトのより長いリストを維持する必要もありません。(少なくとも、カイロが私の意図に反してそうしないことを願っています。)
ImageMagick と Postscript への出力で pycairo にいろいろ描画することに成功しました。だから私はpycairo自体で大丈夫です。
残念ながら、私が見つけた cairo/gtk/pycairo/pygtk のドキュメント --- 誰向けに書かれたものかはわかりませんが、私向けではありません。現時点では、私は Project Euler タイプのプログラマーであり、「5 つの最先端の超オブジェクト指向 API」タイプのプログラマーではありません。何をすべきかの明確な説明、および/または明確な例を見たいと思います。
わかりました。少なくとも少しは役に立ったので、投稿された1つの回答を受け入れました。しかし、一言で言えば、ここが本当のポイントです。ポイントは、Cairo を使用するなど、GDK で何かを描画するときに、 GDK が一時的なダブル バッファーを作成することです。公開イベントを処理するときは、すべてを再描画するだけであると予想されます。しかし、非常に複雑なイメージの場合、これは特に Python では時間がかかります。したがって、カイロがパーマネントに書き込むことができれば、はるかに良いでしょう一時的なものではなくダブル バッファーを使用すると、その永続的なダブル バッファーが GDK で公開されます。何人かの開発者が、この問題の解決策を望んでいました。なんらかの解決策があると思われるプロジェクトの 1 つに Google Chromium があります。たとえば Linux などの Google Chrome で、ウィンドウの露出が非常に大きいことに気づいたことがありますか? そこで、Chromium のソース コードを調べて、これが簡単にできるかどうかを確認します。
補遺: 特に「pixbufs」に言及して問題を混乱させたようです。pixbufs はあまり気にしません (また、質問のタイトルを変更しました)。私が本当に気にかけているのは、Cairo と GTK/GDK の間に、一時的なダブル バッファ ピクセル配列ではなく、永続的なダブル バッファ ピクセル配列を作成することです。これを行う最も簡単な方法は、GTK ウィンドウを Cairo サーフェスにし、ダブル バッファを別の Cairo サーフェスにすることです。私の質問でサンプルを求めたので、ここにいくつかあります:
すぐに生じたもう 1 つのトリッキーな問題は、これを WYSISWYG 描画環境にしたかったことです。これは、Python が描画を要求したものをすぐに描画し、アニメーションに拡張できます。ただし、ほとんどの GTK の例はそのように設定されていません。イベント処理は、どちらかを呼び出すまで延期されますgtk.main()
。raw_input()
(または、Python では、GTK イベント キューも何らかの形でフラッシュすることを発見して驚きました。)イベント コントロールを GTK に渡す代わりの方法について、Python の例を使用した適切な説明を見つけました。最も簡単な解決策であり、おそらく私が採用する解決策は、これを使用して、必要なときにいつでもイベント バッファーをフラッシュすることです。
最後にもう 1 つ、ピクセル バッファーとイベント バッファーをフラッシュする必要があります。それを行う1つの方法のように見えますwindow.queue_draw()
python - py2cairo のインストールに失敗しました。「カイロ」をチェックしています >= 1.10.0 : 見つかりません
MacPorts の 32 ビット Python 2.7 (python.org から) と cairo 1.10.2 を使用して、OS X 10.5 に PyCairo (tarball ソースから) をインストールしようとしています。だから私は「py2cairo」をインストールしています。私が実行するpython ./waf configure
と、私は得る
ここにカイロファイルがあります...
しかし、どのディレクトリをどのパラメータに渡すのですか? これらは cairo ライブラリの指定には関係ないようです:
python - vector matplotlib プロットと pycairo 図面を同じ pdf ファイルに描画する
Matplotlib と Pycairo を使用して PDF レポート (まだスケッチ段階) を生成しています。設計オプションとして、また Pycairo スキルの演習として、ReportLabs を意図的に避けています。
現在、plt.get_current_fig_manager().canvas
プロットをラスターとして挿入するために使用していますが、それを変更して、優れた印刷とおそらくそれほど大きくないファイルサイズのベクトルのみの PDF を取得したいと考えています。
私の作業コードは次のとおりです。
問題は、このスクリプトから matplotlib を使用して、ラスターではなく最終的な pdf でベクトル プロットを取得するにはどうすればよいかということです。
または、別の言い方をすれば、Pycairo と Matplotlib のベクトル データを同じ PDF 宛先ファイルに「混在」(書き込む) ことは可能ですか?
python - pycairoの中心を中心にテキストを回転させます
コミュニティ。
ここには多くの回答、インターネット上のマニュアル、チュートリアル、リファレンスがあり、この質問についてはさらに多くの情報があることを知っています。また、線形代数の知識が必要であることも知っています。しかし、すべての理論を理解し、実際に演習を解決する時間について考えると、頭が吹き飛ばされて、最も単純なことを行うことができなくなります:(
テキストをレンダリングする前に、テキストを中心に回転させる方法を少し簡単に知っている場合は、教えてください。
今のところ私は持っています:
しかし、私の手紙はそれ自身の周りを回転していません。それはちょうど右側に落ちるようなものです :( 自分のコードが正しくないことはわかっています。変換を見逃しているのかもしれませんが、それを正しくする方法がわかりません。
更新:残念ながら、テキストは翻訳の影響を受けないため、
とまったく同じになります
そして、新しい表面や何か(グラフィックプロセッサの新しいレイヤーなど)を作成せずに、その中心でテキストを回転させる方法がわかりません:(
python - igraphにpycairoをインストールする際の何が問題になっていますか?
ここの指示に従って、 pycairo をwinにインストールし、igraphでプロットを使用できるようにしました
私はpython 2.7 pycairo 1.8.10を持っています
上記のリンクに書かれているのと同じ番号の dll ファイル、次に書かれたテストを使用しましたが、次のメッセージが表示されました。
エラーが発生したため、写真またはビデオを表示できません。エラー コード: 0x800706ba
ファイルに保存しようとすると、次のエラーも表示されます。
次のエラーが発生します。
トレースバック (最新の呼び出しが最後): ファイル ""、1 行目、
ファイル "C:\Program Files (x86)\Python27\lib\site-packages\igraph\drawing__init__.py"、438 行目、プロット
結果.保存()
ファイル「C:\Program Files (x86)\Python27\lib\site-packages\igraph\drawing__init__.py」、299 行目、保存
self._surface.write_to_png(fname) を返す
IOError: 出力ストリームへの書き込み中にエラーが発生しました
なぜこれが機能しないのですか?
python - Windows に PyCairo (Cairo for Python) をどのようにインストールしますか?
今日の午後、Windows に PyCairo をインストールするための簡単なチュートリアルを探すのに何時間も費やしました。
Cairo プロジェクト自体は Windows バイナリを維持していないため、別の場所 (例: http://ftp.gnome.org/pub/GNOME/binaries/win32/pycairo/ ) からダウンロードする必要があります。
また、MSVC は明らかに PyCairo のサポートされているコンパイラではないという事実によって、プロセスは明らかにさらに複雑になります (ただし、ソース パッチは単純です)。このバグ レポートを参照してください。
https://www.libreoffice.org/bugzilla/show_bug.cgi?id=22940
WindowsにPyCairoをインストールするためのチュートリアルを推奨できますか?
python - gtk.DrawingArea で公開イベントを「手動で」呼び出す
データ視覚化用の小さなツールを作成しています。GUI は Pygtk で作成されており、非常にシンプルです。ユーザーがファイル名を入力した後、「計算」ボタンを押して出力を確認できます。出力は pycairo によってレンダリングされ、gtk.DrawingArea に表示されます。
アプリケーションは次のように動作します。 ボタンが押されると、ファイルが処理され、そのコンテンツが特別なクラスに保存されます。このクラスはカスタム コンテナーです。GUI と共にインスタンス化され、空または塗りつぶされます。DrawingArea の公開イベントは、コンテナーを読み取ってそのコンテンツを描画する描画関数にリンクされています。コンテナーが空である限り、DrawingArea は空のままですが、calc がクリックされてファイルが読み込まれた後、DrawingArea はビジュアルで満たされるはずです。
問題は次のとおりです。 DrawingArea の更新を除いて、すべて正常に動作します。手動で公開を呼び出す方法がわかりません。calc を押した後、ウィンドウのサイズを変更して結果を確認する必要があります。
より具体的には、チュートリアルからこのコードをコピーしましたが、パラメーター イベントを自分で提供する方法がわかりません。
python - Gtk.DrawingAreaまたはCairoパターンの内容をディスク上の画像に保存します
Cairoイメージサーフェスを使用する小さなPyGIプロジェクトがあります。これをサーフェスパターンでスケーリングし、Gtk.DrawingAreaでレンダリングします。
拡大縮小したバージョンをPNGファイルに書き込みたいのですが。Surface.write_to_png()を使用して元のサーフェスから書き込もうとしましたが、元の(つまり、スケーリングされていない)サイズでしか書き込めないため、そこでスタックします。
次に、レンダリングされた画像をGtk.DrawingAreaからフェッチしてディスクに書き込むことができると思いましたが、PyGIでそれを行う方法がわかりません(これはGTK+2でのみ可能であるようです-gtk.DrawingAreaを保存してくださいファイル)。だから私は自分のスケーリングされた画像をディスクに書き込む方法を見つけようとしています。
サーフェスを作成し、スケールアップしてレンダリングするコードは次のとおりです。
そして、これがPNGファイルに表面を書き込むためのコードです:
したがって、サーフェスを書き込むと、スケーリングされていない画像が作成され、cairo.SurfacePatternにも書き込みメソッドはありません。
私の最後の手段は、gtk.DrawingAreaでレンダリングされたスケーリングされた画像をフェッチし、それをGtkPixbuf.Pixbufまたは新しいサーフェスに配置して、それをディスクに書き込むことです。pixbufアプローチはGTK+2で機能するように見えましたが、GTK+3では機能しませんでした。
では、スケーリングされた画像をディスクに書き込む方法を知っている人はいますか?
image - Pycairoで透明PNGを出力する方法は?
これが私のコードです:
ご覧のとおり、このPNGに白いテキストを描画していますが、背景はデフォルトで不透明な黒になっています。白いテキストだけが表示されるようにpngを透明にするにはどうすればよいですか?