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

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

有帮助吗?

解决方案

查看 Java EPS Graphics2D软件包

  

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

     

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

其他提示

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

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

皮埃尔提到的Java EPS看起来不错,但如果不是,你可能也想看看 FreeHEP矢量图形。编写为允许在高能物理领域中重用Java,它包括一个矢量图形包,通过Graphics2D的实现完成。多年来我们一直用它来出口EPS非常成功。

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

为有相同需求的人提供的额外图书馆:

这两个 GPLv3 都经过广泛使用的测试 自由图表奥森图表.

FreeHEP似乎工作得很好,虽然它似乎不再维护,但它的bug和论坛页面已经消失。只需几行,您就可以获得一个弹出式对话框,可以将任何组件保存为各种可伸缩和常规图像格式。我们有一些具有挑战性的图像,使用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。

这基本上不可能直接实现,因为低级java api在光栅(像素)方面起作用,并且永远不会以矢量格式存储。 (检查java.awt.Graphics的API,看看我的意思)。

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

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

  1. 将您的JPanel转换为位图或文件( http:// www。 jguru.com/faq/view.jsp?EID=242020
  2. 在文件上运行autotrace。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top