如何解决Mathematica:带有PNG的透明背景
| 这很可能是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}}
]
这是我获得的屏幕截图:
首先要注意的是,最后两张图片的尺寸错误。因为我对300或更高的分辨率感到满意,所以在某种程度上还可以。现在来看这个:
in = 72;
G3D = Graphics3D[AspectRatio -> 0.925,Axes -> {True,True,True},AxesEdge -> {{-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,Background -> None
];
surf = Show[
Graphics3D[Sphere[{0,0},1],AxesLabel -> {\"x\",\"y\",\"z\"}],Options[G3D]
];
fig = Show[surf,Axesstyle -> Directive[Opacity[0]],Background -> None
];
我希望将“ fig”图2设为具有高分辨率的透明背景的png文件。这是我总是bug脚的Mathematica的la脚尝试。
Table[
Export[
\"Res_\" <> ToString[r] <> \".png\",Rasterize[fig,ImageResolution -> r,Background -> None
],500}}
]
这是一些png文件的屏幕显示。
所有这些都以预期的分辨率给出:)。但是我的透明背景怎么了?我已经通过代码Background -> None
指定了很多次,但这并不起作用。我在网上浏览时发现:
http://forums.wolfram.com/mathgroup/archive/2009/Feb/msg00943.html
让我们使用这个想法。
bgImage = Image[ConstantArray[{0,Reverse[ImageDimensions[fig]]],ColorSpace -> \"RGB\"];
compImage = ImageCompose[bgImage,fig];
Table[Export[\"Res_\" <> ToString[r] <> \".png\",Rasterize[compImage,500}}]
没有背景!!! :)太好了。但是我的图像大小发生了什么?分辨率提高,但是图像尺寸开始减小。我真的已经很久没有解决这个问题了。我希望你们中的一些人可以弄清楚这个Mathematica错误,并且可以找到一个破解程序,以实现具有高分辨率的透明背景PNG。如果找到答案,请提及你们正在使用的Mathematica版本。
解决方法
首先:导出时请勿使用
ImageResolution
!这种越野车选项在大多数情况下是无用的,并且无法满足人们的期望。它类似于ImageSize
。
而是使用Magnify
命令和Style
的Magnification
选项。他们做了我们想从ImageResolution
得到的东西!
现在,关于问题的原因已在问题的第一部分中显示。是的,它发生了。是的,它与机器有关。是虫子吗?是的,至少存在很大的缺陷。它完全出乎意料吗?至于我-不是。
问题的根源似乎是图形渲染实际上是由FrontEnd进行的,而FrontEnd在将图形转换为栅格时使用默认设置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,PageWidth -> Infinity],ImageResolution -> 600]
附言此外。当ImageResolution
正常工作时,我知道的唯一情况是使用ѭ19PDF的PDF导出:
First@ImportString[
ExportString[Plot3D[Sin[x + y^2],{x,-3,3},{y,-2,2}],\"PDF\",\"AllowRasterization\" -> True,ImageResolution -> 200],\"PDF\"]
但是它不允许指定透明背景。
, 为了跟踪错误的程度,以下是我从Windows XP上的Mathematica 7.0.1获取的图像
Table[Export[\"Res_\" <> ToString[r] <> \".png\",Rasterize[Style[x^2 + y^2,Background -> None],{20,40,100,300,600}}]
20:
40:
100:
300:
400:
500:
600:
我为使用球形的第一种方法获得的输出似乎与您通过第二种方法获得的输出匹配。也就是说,背景是透明的,但是大小不同。如果需要,我将上传这些输出。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。