image – 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, -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
];

我希望将fig导出为具有高分辨率透明背景的png文件.这是我的笨蛋尝试与总是错误的数学.

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

这是几个png文件的屏幕截图.

所有这些都出来了预期的分辨率:).但是我的透明背景怎么了?我已经通过我的代码指定了很多次背景 – >没有,但这不想工作.我环顾了网路,发现了这一点:

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}}]

没有背景!很好但是,我的图像的尺寸怎么了?分辨率正在上升,但图像尺寸开始下降.我已经真的搞砸了这个问题太久了.我希望你们中的一个能够将这个数学模型转化成这个数学错误,并且可以找到一个黑客来实现高分辨率的透明背景PNG.请提及您正在使用的数学版本,如果您找到答案.

首先:导出时不要使用ImageResolution!这个bug选项在大多数时候都是无用的,不能做任何事情.它可以作为ImageSize的模拟.

而是使用Style的Magnify命令和Magnification选项.他们做我们想要从ImageResolution!

现在关于问题的第一部分中显示的行为的原因.是的,它发生.是的,它是机器依赖的.这是一个bug吗?是的,至少有很大的缺陷.它完全意外吗?至于我 – 不是.

似乎问题的根源在于渲染图形真的是由FrontEnd做出的,后者在将图形转换成栅格时使用了默认设置.

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}}]

看看笔记本窗口的不同运行时大小:

enter image description here

可以看到输出对笔记本电脑窗口大小的明显依赖.

解决方法是将PageWidth直接传递给单元格:

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

附:此外.当ImageResolution按预期工作时,我知道的唯一的情况是带有“AllowRasterization”的PDF导出 – > True:

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

但是它不允许指定透明背景.

相关文章
相关标签/搜索