jml*_*pez 13 plot wolfram-mathematica image mathematica-8
这很可能是Mathematica 8.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}}
]
Run Code Online (Sandbox Code Playgroud)
这是我获得的屏幕截图:

首先要注意的是,最后两张图片的尺寸错误.这在某种程度上是好的,因为我对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
];
Run Code Online (Sandbox Code Playgroud)
我希望Export无花果作为具有高分辨率的透明背景的png文件.在这里,我总是尝试使用Mathematica.
Table[
Export[
"Res_" <> ToString[r] <> ".png",
Rasterize[fig, ImageResolution -> r, Background -> None],
Background -> None
], {r, {20, 40, 100, 300, 400, 500}}
]
Run Code Online (Sandbox Code Playgroud)
这是几个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}}]
Run Code Online (Sandbox Code Playgroud)

没有背景!!! :)好极了.但是我的图像尺寸发生了什么变化?分辨率正在增加,但图像尺寸开始减小.我现在真的一直在搞乱这个问题太久了.我希望你们中的一个能够对这个Mathematica漏洞有所了解,并且可以找到一个黑客,以获得高分辨率的透明背景PNG.如果你找到答案,请提及你们正在使用的Mathematica版本.
首先:ImageResolution导出时不要使用!这个有缺陷的选项在大多数情况下都是无用的,并且不会达到人们所期望的效果。它的工作方式类似于ImageSize.
相反,请使用的Magnify命令和Magnification选项Style。他们做的是我们想要得到的ImageResolution!
现在关于问题第一部分中显示的行为原因。是的,它发生了。是的,它依赖于机器。这是一个错误吗?是的,至少是一个很大的缺陷。完全出乎意料吗?至于我——不是。
问题的根源似乎是图形渲染实际上是由前端完成的,而后者在Cell将图形转换为光栅时使用默认设置。
In[1]:= Options[Cell, PageWidth]
Out[1]= {PageWidth -> WindowWidth}
Run Code Online (Sandbox Code Playgroud)
让我们尝试看看输出如何
Table[Rasterize[Style[x^2 + y^2, 40], Background -> None,
ImageResolution -> r], {r, {300, 400, 500, 600}}]
Run Code Online (Sandbox Code Playgroud)
查看笔记本窗口的不同运行时大小:
可以看到输出对笔记本窗口大小的明显依赖性。
解决方法是PageWidth直接传递到Cell:
Rasterize[
Cell[BoxData@ToBoxes@Style[x^2 + y^2, 40], PageWidth -> Infinity],
ImageResolution -> 600]
Run Code Online (Sandbox Code Playgroud)

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"]
Run Code Online (Sandbox Code Playgroud)
但它不允许指定透明背景。