gpt4 book ai didi

pdf - 优化 Mathematica 生成的 eps/pdf 文件的大小

转载 作者:行者123 更新时间:2023-12-02 16:06:13 24 4
gpt4 key购买 nike

如何优化 Mathematica 生成的 eps 或 pdf 文件的大小?

文件大小通常比应有的大小大 50-100 倍(下面的示例)。对于某些应用程序(例如,将图形放在出版物中,甚至更多 - 将其放在大海报上),我需要在矢量图形中使用轴,因此对所有内容使用光栅图形对我来说并不是最佳选择。

每一个实用的解决方案(无论是在 Mathematica 中设置正确的选项,还是在其他应用程序中进行进一步转换)都将受到赞赏。

例如,以下代码生成 eps 图:

plot = ListDensityPlot[
Table[Random[], {100}, {100}],
InterpolationOrder -> 0]

Export["testplot.eps", plot]
Export["testplot.pdf", plot]

生成大小为 3.3MB 的 eps 文件和大小为 5MB 的 pdf 文件(在 Mac OS X 10.6 上的 Mathematica 7 上,如果有影响的话)。

为了进行比较,具有相同轴的 3x3 图具有 8kB (pdf) 到 20kB (eps)。100x100 点在 bmp 中为 30kB(在 png 中稍小一些)。

其他类型的绘图也存在同样的问题,重点是 ListPlot3D

最佳答案

您可能已经知道如何申请 Alexey's在他提供的链接中回答。但如果您在这里遇到麻烦,我将提供如何将该技术应用于 2D 图形。

我发现,如果您想创建一个好的绘图,您需要非常具体地了解 Mathematica。出于这个原因,正如您可能在我的帖子 Rasters in 3D 中注意到的那样我创建了一个指定所有选项的对象,以便 Mathematica 满意。

in = 72;
G2D = Graphics[{},
AlignmentPoint -> Center,
AspectRatio -> 1,
Axes -> False,
AxesLabel -> None,
BaseStyle -> {FontFamily -> "Arial", FontSize -> 12},
Frame -> True,
FrameStyle -> Directive[Black],
FrameTicksStyle -> Directive[10, Black],
ImagePadding -> {{20, 5}, {15, 5}},
ImageSize -> 5 in,
LabelStyle -> Directive[Black],
PlotRange -> All,
PlotRangeClipping -> False,
PlotRangePadding -> Scaled[0.02]
];

我应该在这里提到,您必须指定ImagePadding。如果您将其设置为all,您的 eps 文件将与 Mathematica 显示的不同。无论如何,我认为拥有这个对象可以让您更轻松地更改属性。

现在我们可以继续解决您的问题:

plot = ListDensityPlot[
Table[Random[], {100}, {100}],
InterpolationOrder -> 0,
Options[G2D]
]

Output

以下内容将轴和栅格分开,并将它们组合成结果:

axes = Graphics[{}, AbsoluteOptions[plot]];
fig = Show[plot, FrameStyle -> Directive[Opacity[0]]];
fig = Magnify[fig, 5];
fig = Rasterize[fig, Background -> None];
axes = First@ImportString[ExportString[axes, "PDF"], "PDF"];
result = Show[axes, Epilog -> Inset[fig, {0, 0}, {0, 0}, ImageDimensions[axes]]]

Output2

这里唯一的区别(目前我无法解释)是轴标签,它们有小数点。最后,我们导出它们:

Export["Result.pdf", result];
Export["Result.eps", result];

结果是 pdf 文件大小为 115 Kb,eps 文件大小为 168 Kb。

更新:

如果您使用 Mathematica 7,eps 文件将无法正确显示。您将看到的只是侧面黑色的主角。这是版本 7 中的一个错误。不过,这在 Mathematica 8 中得到了修复。

我之前提到过,我不知道为什么轴标签不同。 Alexey Popkov 对此提出了解决方案。要创建fig结果,请使用以下命令:

axes = Graphics[{}, FilterRules[AbsoluteOptions[plot], Except[FrameTicks]]];
fig = Show[plot, FrameStyle -> Directive[Opacity[0]]];
fig = Magnify[fig, 5];
fig = Rasterize[fig, Background -> None];
axes = First@ImportString[ExportString[axes, "PDF"], "PDF"];
result = Show[axes, Epilog -> Inset[fig, {0, 0}, {0, 0}, ImageDimensions[axes]]]

关于pdf - 优化 Mathematica 生成的 eps/pdf 文件的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7953955/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com