Экспорт JPanel в векторную графику
-
03-07-2019 - |
Вопрос
Я хотел бы экспортировать изображение из моей JPanel в файл векторной графики, чтобы его можно было редактировать и печатать с разрешением выше экранного.По сути, я хочу, чтобы его paint()
функция, вызываемая с целевой графикой, которая сохраняет команды рисования в файл векторной графики.
Какой хороший, простой способ сделать это?Какие библиотеки рекомендуется использовать?Какой векторный формат был бы лучшим и почему?
Решение
Ознакомьтесь с пакетом Java EPS Graphics2D .
Многие Java-программы используют Graphics2D для рисования чего-либо на экране, и хотя выходные данные легко сохранить в виде файла png или jpeg, их немного сложнее экспортировать в виде EPS для включения в документ или бумагу. р>
Этот пакет делает весь процесс чрезвычайно простым, потому что вы можете использовать объект EpsGraphics2D, как если бы это был объект Graphics2D. Единственное отличие состоит в том, что все реализованные методы создают выходные данные 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.
Дополнительные библиотеки для людей с такими же требованиями:
- для SVG, JFreeSVG в http://www.jfree.org/jfreesvg/
- для PDF, OrsonPDF в http://object-refinery.com/orsonpdf/index.html
Оба они GPLv3 и хорошо протестированы благодаря широкому использованию в JFreeChart и Диаграммы Орсона.
FreeHEP, похоже, работает довольно хорошо, хотя, похоже, он больше не поддерживается и его страницы ошибок и форумов исчезли. С помощью всего лишь нескольких строк вы получаете всплывающее диалоговое окно, в котором можно сохранить любой компонент в различных масштабируемых и обычных форматах изображений. У нас есть несколько сложных изображений, использующих альфа-канал, повернутый текст, области, ограниченные кривыми, и они отлично сохраняются, намного лучше с 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();
}
}
Также необходимо добавить несколько библиотечных фляг.
в принципе, это невозможно напрямую, так как низкоуровневый java api работает в терминах растра (пикселей) и никогда не сохраняется в векторном формате.(Проверьте API java.awt.Graphics, чтобы понять, что я имею в виду).
есть несколько программ общего назначения, которые преобразуют растровые форматы в векторные, это та, которую я нашел при быстром поиске:http://autotrace.sourceforge.net/index.html
итак, используя такую программу, вы можете разделить свою проблему на две более мелкие проблемы:
- преобразуйте вашу JPanel в растровое изображение или файл (http://www.jguru.com/faq/view.jsp?EID=242020)
- запустите автоматическую трассировку файла.