6

我想将我的 JPanel 中的图像导出为矢量图形文件,以便可以以高于屏幕的分辨率对其进行编辑和打印。本质上,我希望paint()使用将绘图命令保存到矢量图形文件中的目标 Graphics 来调用它的函数。

有什么好的,简单的方法可以做到这一点?推荐什么库?哪种矢量格式最好,为什么?

4

7 回答 7

7

查看Java EPS Graphics2D 包

许多 Java 程序使用 Graphics2D 在屏幕上绘制内容,虽然将输出保存为 png 或 jpeg 文件很容易,但将其导出为 EPS 以包含在文档或纸张中会有点困难。

这个包使整个过程变得非常简单,因为您可以像使用 Graphics2D 对象一样使用 EpsGraphics2D 对象。唯一的区别是所有实现的方法都会创建 EPS 输出,这意味着可以调整您绘制的图表的大小,而不会导致您在调整基于像素的图像(例如 JEPG 和 PNG 文件)大小时可能看到的任何锯齿状边缘。

于 2009-05-01T15:56:09.237 回答
6

Apache Batik将让您绘制到 Graphics2D 对象的专门实现,然后导出为可缩放矢量图形 (.svg) 文件。然后,您可以使用支持 SVG 的浏览器查看/处理/打印它(Firefox 会自然处理它,ISTR、IE 和其他人可以使用插件)。

请参阅SVGGraphics2D对象(此处记录的过程)

于 2009-05-01T15:46:26.810 回答
3

Pierre 提到的 Java EPS 看起来不错,但如果不是,您可能还想查看FreeHEP Vector Graphics。编写以允许在高能物理领域重用 Java,它包括一个矢量图形包,通过 Graphics2D 的实现完成。多年来,我们一直使用它非常成功地出口 EPS。

于 2009-05-01T17:29:51.727 回答
2

我可以推荐VectorGraphics2D库 (LGPL)。虽然它不支持 Graphics2D 的所有功能,但我成功地将它用于我的项目。它为各种矢量文件格式提供 java.awt.Graphics2D 的实现。它只是将所有绘制操作导出到 EPS、SVG 或 PDF 文件。

于 2010-11-01T11:26:30.863 回答
2

为具有相同需求的人提供的附加库:

这两个 GPLv3 都通过在JFreeChartOrson Charts中的广泛使用进行了很好的测试。

于 2015-09-29T13:54:09.407 回答
1

FreeHEP 似乎工作得很好,尽管它似乎不再被维护并且它的错误和论坛页面都消失了。只需几行,您就会得到一个弹出对话框,可以将任何组件保存为各种可扩展和常规图像格式。我们有一些具有挑战性的图像,使用 alpha 通道、旋转文本、由曲线界定的区域,并且它们保存得很好,使用 VectorGraphics2D 效果更好。

到目前为止,我看到的唯一问题是 jpeg 保存,我的所有图像都是黑色的。鉴于 png 可以工作,加上所有矢量模式,这对我们来说并不是很重要,但我相信这对某些人来说是个问题。

我必须添加这么多代码才能保存在所有这些模式中:

public static void showImage(Component comp) 
{
    try
    {
        ExportDialog export = new ExportDialog();
        export.showExportDialog( null, "Export view as ...", comp, "export" );
        System.err.println("Image save complete");

    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}

还必须添加一堆库 jar。

于 2014-02-05T21:33:14.603 回答
0

这基本上是不可能直接实现的,因为低级 java api 根据光栅(像素)工作,并且从不以矢量格式存储。(检查 java.awt.Graphics 的 API 以了解我的意思)。

有一些通用程序可以将光栅转换为矢量格式,这是我在快速搜索中找到的:http: //autotrace.sourceforge.net/index.html

因此,使用这样的程序,您可以将问题分成两个较小的问题:

  1. 将您的 JPanel 转换为位图或文件 ( http://www.jguru.com/faq/view.jsp?EID=242020 )
  2. 对文件运行自动跟踪。
于 2009-05-01T15:47:41.973 回答