将JPanel导出为矢量图形

时间:2009-05-01 15:40:18

标签: java swing graphics awt vector-graphics

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

这样做的好方法是什么?建议使用哪些库?哪种矢量格式最好,为什么?

7 个答案:

答案 0 :(得分:6)

查看The Java EPS Graphics2D package

  

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

     

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

答案 1 :(得分:5)

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

请参阅SVGGraphics2D对象(记录的流程here

答案 2 :(得分:2)

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

具有相同要求的人员的附加库:

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

答案 5 :(得分:0)

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。

答案 6 :(得分:-1)

这基本上不可能直接实现,因为低级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。