13

これはMathematica8.0.1や他のバージョンのバグである可能性が高いです。次のことを試してみましょう。

Table[
 Export[
  "Res_" <> ToString[r] <> ".png", Rasterize[
  Style[x^2 + y^2, 40],
  Background -> None,
  ImageResolution -> r
 ],
 Background -> None],
 {r, {20, 40, 100, 300, 400, 500, 600}}
]

これは私が入手したもののスクリーンショットです:

出力

最初に気付くのは、最後の2つの画像のサイズが間違っていることです。300以上の解像度で満足しているので、ある程度問題ありません。今これを見てください:

in = 72;
G3D = Graphics3D[AspectRatio -> 0.925, Axes -> {True, True, True}, 
  AxesEdge -> {{-1, -1}, {1, -1}, {-1, -1}}, AxesStyle -> Directive[10, Black],
  BaseStyle -> {FontFamily -> "Arial", FontSize -> 12}, Boxed -> False,
  BoxRatios -> {1, 1, 1}, LabelStyle -> Directive[Black], 
  ImagePadding -> All, ImageSize -> 5 in, PlotRange -> All,
  PlotRangePadding -> None, TicksStyle -> Directive[10], 
  ViewPoint -> {2, -2, 2}, ViewVertical -> {0, 0, 1}, Background -> None
];
surf = Show[
  Graphics3D[Sphere[{0, 0, 0}, 1], Background -> None, 
  AxesLabel -> {"x", "y", "z"}], Options[G3D]
];
fig = Show[surf, AxesStyle -> Directive[Opacity[0]], 
  Background -> None
];

Export背景が透明で高解像度のpngファイルとしてイチジクしたいです。いつもバグのあるMathematicaを使った私の足の不自由な試みがここにあります。

Table[
  Export[
    "Res_" <> ToString[r] <> ".png",
    Rasterize[fig, ImageResolution -> r, Background -> None],
    Background -> None
  ], {r, {20, 40, 100, 300, 400, 500}}
]

これがいくつかのpngファイルのスクリーンショーです。

画像

それらのすべては期待された解像度で出てきました:)。しかし、私の透明​​な背景はどうなりましたか?私は自分のコードで何度も指定しましたが、Background -> Noneこれは機能したくありません。私はウェブを見回しました、そして私はこれを見つけました:

http://forums.wolfram.com/mathgroup/archive/2009/Feb/msg00943.html

このアイデアを使用してみましょう。

bgImage = Image[ConstantArray[{0, 0, 0, 0}, Reverse[ImageDimensions[fig]]], 
  ColorSpace -> "RGB"];
compImage = ImageCompose[bgImage, fig];
Table[Export["Res_" <> ToString[r] <> ".png", 
  Rasterize[compImage, ImageResolution -> r, Background -> None], 
  Background -> None], {r, {20, 40, 100, 300, 400, 500}}]

画像

背景なし!!! :) 素晴らしい。しかし、私の画像のサイズはどうなりましたか?解像度は上がっていますが、画像サイズが小さくなり始めています。私は本当に長い間この問題をいじっています。皆さんの一人がこのMathematicaのバグに光を当て、高解像度の透明な背景PNGを実現するためのハックを見つけられることを願っています。答えが見つかったら、皆さんが使用しているMathematicaのバージョンを教えてください。

4

2 に答える 2

4

まず、ImageResolutionエクスポートするときは使用しないでください。このバグのあるオプションは、ほとんどの場合役に立たず、期待できることを行いません。のアナログとして機能しImageSizeます。

代わりに、のMagnifyコマンドとMagnificationオプションを使用してStyleください。彼らは私たちが得たいことをしますImageResolution

さて、質問の最初の部分で示された行動の理由について。はい、起こります。はい、それはマシンに依存します。バグですか?はい、少なくとも大きな欠陥です。それは完全に予想外ですか?私はそうではありません。

問題の原因は、グラフィックスのレンダリングが実際にはフロントエンドによって行われ、フロントエンドがCellグラフィックスをラスターに変換するときにデフォルト設定を使用していることにあるようです。

In[1]:= Options[Cell, PageWidth]
Out[1]= {PageWidth -> WindowWidth}

どのように出力されるか見てみましょう

Table[Rasterize[Style[x^2 + y^2, 40], Background -> None, 
  ImageResolution -> r], {r, {300, 400, 500, 600}}]

ノートブック ウィンドウのさまざまな実行時のサイズを調べます。

ここに画像の説明を入力

出力がノートブックのウィンドウ サイズに明らかに依存していることがわかります。

PageWidth回避策は、に直接渡すことCellです:

Rasterize[
 Cell[BoxData@ToBoxes@Style[x^2 + y^2, 40], PageWidth -> Infinity], 
 ImageResolution -> 600]

ここに画像の説明を入力


PSさらに。私が知っている唯一のケースは、次のImageResolutionような PDF エクスポート"AllowRasterization"->Trueです。

First@ImportString[
  ExportString[Plot3D[Sin[x + y^2], {x, -3, 3}, {y, -2, 2}], "PDF", 
   "AllowRasterization" -> True, ImageResolution -> 200], "PDF"]

ただし、透明な背景を指定することはできません。

于 2011-06-14T13:14:26.653 に答える
0

エラーの範囲を追跡する目的で、Windows XP で Mathematica 7.0.1 から取得した画像を次に示します。

Table[Export["Res_" <> ToString[r] <> ".png", 
  Rasterize[Style[x^2 + y^2, 40], Background -> None, 
   ImageResolution -> r], 
  Background -> None], {r, {20, 40, 100, 300, 400, 500, 600}}]

20:ここに画像の説明を入力

40:ここに画像の説明を入力

100:ここに画像の説明を入力

300:ここに画像の説明を入力

400:ここに画像の説明を入力

500:ここに画像の説明を入力

600:ここに画像の説明を入力


球体を使用した最初の方法で取得した出力は、2 番目の方法で取得した出力と一致するように見えます。つまり、透明な背景ですが、サイズが異なります。リクエストがあれば、これらの出力をアップロードします。

于 2011-06-13T05:11:21.280 に答える