2017-07-16 14 views
1

私はしばらくの間この問題に悩まされていました。基本的に、私はsvg画像の束を持っています。 svgファイル内の各「子」には、ピクセル値のラベルが付けられています。現在のところ、この値の数は非常に少なく、すべてがrgb(0.0、0.0、0.0)、rgb(1.0,1.0,1.0)... rgb(9.0,9.0,9.0)というラベルが付けられています。ピクセルのピクセル値を変更せずにsvgをpngに変換する

これらの画像をpng形式に変換する必要があります。さらに重要なことに、ピクセル値のマッピングを1対1にする必要があります。基本的には、svgファイルに値rgb(0.0、0.0、0.0)を持つすべてのピクセルは、pngファイル(またはさらに良いL(x))に値rgb(x、x、x)を持つ必要があります。 svgファイルのrgb(1.0,1.0,1.0)は、pngファイル(またはさらに良いL(y))のrgb(y、y、y)に変換する必要があります。これは本質的に私の仕事の根底にある真理であるため、この1対1のマッピングは私のアプリケーションのためのディグリーカーです。

単にコンソールに書き込むことにより:

convert test.svg test.png 

は、私が欲しいものを私に与えるものではありません。値のヒストグラムを調べると、10の代わりに248の固有値があるように見えますが、大部分のピクセルがほんの数ピクセルしかないにもかかわらず、それは私には良いことではありません。

は誰もが知っています:

  • をこれを行うことができます。
  • これはどのように行うことができます。

私は今までPythonのcairosvgのような他のライブラリを使ってみましたが、それはさらに悪くなるようです。はい、私はsvgとpngが完全に異なるフォーマットであることを知っています。

SVG:https://drive.google.com/open?id=0B_vhcDz1zxeYeGVDSnhfeWplOWs

PNG:SVGおよびPNGファイルを追加明確化のため

https://drive.google.com/open?id=0B_vhcDz1zxeYUnYzZUtIUmVqVWM

は、Pythonでファイルを開くには、248個のユニークな画素値は、一方が、存在すると思われます4(背景+ 3つの記号)のみでなければなりません。

ありがとうございます!

+0

「子供」*、「L」、「x」、「*」の種類について抽象的に話すのではなく、少し具体的で実際にファイルを表示する必要があると思います* svg'ファイルにはピクセルがありません。 –

+0

テストファイルを見ることなく、スケーリング効果が見られるのは、PNGピクセルがSVGデータポイントから補間されていることだけです。 –

+0

公正なポイント、私はsvgファイルと対応するpngファイルを追加しました。 @MarkSetchell – TheRevanchist

答えて

2

あなたのご要望はあまり意味がありません。あなたのサンプルSVGファイルは、白と黒(rgb(255.0, 255.0, 255.0))の2種類しかありません。では、この10色のアイデアはどこから来たのですか?

また、SVG標準では、ベクトル形状をピクセルに変換する方法を正確に指定していません。 SVGレンダラ間には微妙な違いがあります。

ピクセルの中央を通過するベクトル形状のエッジは、灰色のピクセルを生成することに注意してください。これはアンチエイリアシングと呼ばれます。エッジにスムーズな外観を与えるように設計されています。そして、それがあなたが期待しているよりも多くのピクセル値を見ている理由だと思います。


おそらく、アンチエイリアスを無効にする方法が必要なのでしょうか?一部の変換プログラムには、これを行うオプションがあります。しかし、いくつかのSVG変換プログラムは、この属性をサポートしていない可能性

<ns0:svg ...(snip)... shape-rendering="crispEdges"> 

:別の方法として、あなたのファイルのルート<svg>タグにshape-rendering属性を追加してみてくださいすることができます。しかし、ほとんどのブラウザでそれを試してみると、動作することがわかります。

アンチエイリアスをオフにして生成された出力は、それほど良好ではありません。しかしおそらくあなたの目的のために、あなたはそれを気にしません。


はまた、おそらくあなたは、グレーの10個の特定のレベルにアンチエイリアスを制限しながら、ビットマップにSVGを変換する方法を知っている欠けていますか? Imagemagickはこれを可能にします。私はImagemagickユーザーではありませんが、-mapパラメータを使用してパレットイメージを渡すことによって、特定のカラーパレットを使用するようimagemagickに指示することができます。

+0

データセット全体で、私は10色(黒の9色、背景色は白色)を使用します。画像上にアップロードしました.4種類の色があります(白いものと黒いものがそれぞれ1つずつあります)。もちろん、3つの黒いものは人間の目に見分けがつきませんが、ファイルを配列として開くと値が異なります。 アンチエイリアスを使用しましたが、何も変更されませんでした。 – TheRevanchist

+0

コントロール-F 塗りつぶし= "RGB(2.0、2.0、2.0)" 塗りつぶし= "RGB(3.0、3.0、3.0)" 塗りつぶし= "RGB(9.0、9.0、9.0)" 、あなたは見つけるでしょう他の3色。 – TheRevanchist

+0

また、 'rgb()'の色の値は整数であることに注意してください。レンダラーの中には、 '2.0 'のような小数点をサポートしていないレンダラーもあります。クロム。 –

関連する問題