問題タブ [librsvg]

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.

0 投票する
1 に答える
2621 参照

javascript - バウンディングボックスを使用せずにsvgパスのディメンションを取得する

svgパスのサイズを取得してdivに表示する方法はありますか?ベジェ曲線に関しては、Webkitでバグがあるため、バウンディングボックスはオプションではありません。私はsvg-editの変更を行っています:https ://code.google.com/p/svg-edit/

これは私が現在使用しているものです。

残念ながら、バウンディングボックスは信頼できません。bbox以外のアイデアはありますか?

0 投票する
0 に答える
873 参照

javascript - javascriptを使用して重複するsvgパスを1つのパスに結合します

javascriptを使用して、2つの重複するsvgパスを1つの統合された単一パスに結合する方法はありますか?

0 投票する
1 に答える
510 参照

svg - Poilu raphael ブール演算 (和、減算) と SVG 編集の統合

私はsvg-edit、より具体的にはMark McKays Method draw: https://github.com/duopixel/Method-Drawの修正を行っています。

私が見つけたこの Raphael ライブラリを使用したい: https://github.com/poilu/raphael-booleanこれにより、キャンバス内のパスでブール (セット) 操作を実行できます。

これで、エディター内に関数を起動するボタンを実装しました。

さて、ボタンをクリックすると、エディターは楕円で結合された (結合された) パスを返すはずではありませんか?

または私はこれを間違っていますか?

var paper = Raphael("canvas", 250, 250); で何かを変更する必要があると考えています。svg-edit はキャンバスに別の名前を使用しているため、行ですが、どうすればよいかわかりません。

私はこれに苦労してきたので、どんな助けも深く感謝します.

更新: このライブラリは、複数オブジェクトの溶接、自己交差、およびその他の多くのケースを処理できません。2 つの単純なオブジェクトに対して操作を実行する場合にのみ機能します。これは当面の質問とは直接関係ないかもしれませんが、とにかく言及するのが賢明だと思いました.

SVG 要素に対するブール演算を探している場合は、この質問を参照してください: SVG パスに対するブール演算

0 投票する
2 に答える
205 参照

libxml2 - libxml2 が原因で librsvg がクラッシュしますか?

SVG 画像のビットマップとしてのレンダリングをサポートしたいと考えています。librsvg を使用しています。これまでのところ、うまく機能し、Cairo を使用して描画します。万歳! しかし、私は問題に遭遇しました:

Windows Explorer に似たコントロールがあります。たとえば、ディレクトリ内のファイルのサムネイル サイズのイメージを作成するため、製品を拡張して SVG のサムネイルを生成できます。

バックグラウンド スレッドを使用してサムネイル画像を生成するため、動作中に UI がフリーズすることはありません。コードは長い間本番環境にあるため、同時実行の問題に関する限り問題はありません。しかし、メイン スレッド以外のスレッドから rsvg_handle_new() が呼び出されると、アクセス違反が発生するようです。

スタック トレースを見ると、クラッシュは libxml2 (librsvg の依存関係) で xmlSetGlobalState() で発生しているように見えます。問題はここで報告されているものと同じよう です。 . 可能であれば、ライブラリの使用をメイン スレッドに制限しますが、メイン スレッドからサムネイルを生成するこの既存のアーキテクチャにこだわっています。

RsvgHandleの作成中にlibrsvgによって呼び出されるように見える最初のメインスレッドでxmlInitParser()を呼び出すことを提案するhttp://www.xmlsoft.org/threads.htmlを見つけました(私は思います)。

それが本当に libxml2 の問題なのか、librsvg が libxml2 を使用する方法の問題なのか、それとも私が librsvg を使用しようとしている方法の問題なのか、私にはわかりません。

libxml2 または librsvg の専門家はいますか?

0 投票する
1 に答える
757 参照

svg - アニメーション用の SVG でのテキストのスケーリングに関する問題

私は SVG を使用してビデオ アニメーションを生成し、一連の画像を作成してそれをビデオ ファイルに変換しています。必要な効果の 1 つは、テキストをスムーズにパン/ズームできるようにすることです。テキストを含むグラフィック コンテキストに変換を適用して、これを実行しようとしています。各フレームには、縮尺/平行移動のわずかな変化があります。この手法は、静止画像に適しています。しかし、テキスト用ではありません。私が見ているのは、あなたが期待するような滑らかな効果ではありません。フレームからフレームへのテキストの特定のぎくしゃく/きらめきがあります。これは、フォント レンダリング ルールが変換後に適用されているかのようです (変換前ではありません)。

質問: テキストでスムーズなスケール/パン効果を実現するにはどうすればよいですか?

1 フレームの例:

これが私の言いたいことを示すビデオクリップです: http://www.youtube.com/watch?v=TrEjDeGlPhA&list=UUfWuDb3rpD5OInqUpNivjdA&index=1

または、ゼロから作成することもできます。これらのフレームを生成し、デモ用の AVI ファイルを作成する小さな Java プログラムを作成しました (Linux、mencoder、rsvg-convert が利用可能であると仮定します)。

そして、このスクリプトを実行します:

0 投票する
1 に答える
2635 参照

c++ - C/C++ を使用して SVG ファイルを開いて編集する

図を作成するために SVG 図形を使用する必要があるエディターを開発しています。SVG を開いて表示するには、librsvg を使用します。これは実際にはかなり優れていますが、SVG を編集するのではなくレンダリングするのにのみ役立ちます。

形状のプロパティにアクセスして、その値 (幅、サイズ) を変更したいと考えています。

カイロを使用して画面に描画しますが、形状のサイズを変更するのと同じではないため、カイロのスケール機能を使用したくありません。

Win32 で C++ ビルダー XE3 を使用しています。

そのために使用できる優れた C/C++ ライブラリを知っている人はいますか?

ご協力いただきありがとうございます。

0 投票する
1 に答える
336 参照

pinvoke - 非推奨の「rsvg_pixbuf_from_file_at_size」が、非推奨の方法 (カイロ) よりも高速/効率的なのはなぜですか?

C# と P/Invoke を使用して GDK ライブラリにアクセスしています。私の目標は、一連の SVG ファイルをラスター イメージ (具体的には png) に変換することであり、GDK ライブラリを使用することが最も信頼性が高く正確なようです。

Gnome/Cairo のドキュメントを読んだ後、これを達成するための 2 つの基本的なアプローチを見つけました。これらのアプローチの 1 つは非推奨の関数を使用し、もう 1 つは使用しません。

最初のアプローチは推奨されていませんが、間違いなくより単純でわかりやすいもので、基本的には次のようになります。

非推奨ではない2 番目の方法では、Cairo サーフェスをセットアップしてレンダリングし、ファイルに保存します。基本的には次のようになります。

これらのアプローチはどちらも機能しているようです-正しいラスター画像出力を生成します(ただし、一連の操作を並行して実行しようとすると、「カイロの方法」にはいくつかのバグがあります-メモリが不足してしまいます)。

私の質問は次のとおりです。古い/非推奨の方法 ( rsvg_pixbuf_from_file_at_size)が新しい/Cairo の方法よりも著しく速いのはなぜですか? 私のテストでは、最初のアプローチが全面的に高速であることが示されています (1 つのファイル/複数のファイル、標準の C# ForEach/Parallel.ForEach)。

たとえば、16 個の入力ファイル (出力サイズが 6000x4200) で並列処理がない場合、最初のアプローチは ~2:15.89 秒かかります。2 番目のアプローチでは、約 2:37.95 かかります。並列処理 (Parallel.Foreach が私の P/Invoke コードを呼び出します) でも、結果は似MaxDegreesOfParallelismています。デフォルトに設定すると、非推奨のアプローチで 30.7 秒、Cairo アプローチで 36.95 秒かかります。

Cairo もかなり多くのメモリを使用しているようです。さらに、Cairo は変換ごとにより多くのリソースを使用するだけでなく、RAM のすべてを使用しないようにする方法も知らないようです。たとえば、入力ファイルの数を (16 から) 720 に増やし、Parallel.ForEach ループを使用すると、空き RAM が 0 MB になり、システムが停止します (最終的に、デバッグ プロセスは終了します)。 、そして私のシステムは戻ってきます...しかし、それは1分ほどロックアップします)。

私の質問に対する簡単な答えは、非推奨のアプローチを使用することですが、なぜ非推奨なのですか? カイロのアプローチは、何らかの点で優れていますか?

誰かが私のコードをもっと見たい場合は、お知らせください。追加します。投稿したコードを関連するビット (実際の P/Invoke コードであり、それを呼び出す C# コードではありません) だけに切り詰めようとしました。