我想将我的JPanel中的图像导出到矢量图形文件中,以便以高于屏幕的分辨率进行编辑和打印。基本上我希望使用目标图形调用其paint()
函数,该图形将绘图命令保存到矢量图形文件中。
这样做的好方法是什么?建议使用哪些库?哪种矢量格式最好,为什么?
答案 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都通过JFreeChart和Orson 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
所以,使用这样的程序,您可以将问题分成两个较小的问题: