Экспорт JPanel в векторную графику - PullRequest
4 голосов
/ 01 мая 2009

Я хотел бы экспортировать изображение из моего JPanel в файл векторной графики, чтобы его можно было редактировать и печатать с разрешением выше экрана. По сути, я хочу, чтобы его функция paint() была вызвана с целевой графикой, которая сохраняет команды рисования в файл векторной графики.

Какой хороший, простой способ сделать это? Какие библиотеки рекомендуются? Какой векторный формат будет лучшим и почему?

Ответы [ 7 ]

6 голосов
/ 01 мая 2009

Посмотрите на Пакет Java EPS Graphics2D .

Многие Java-программы используют Graphics2D для рисования чего-либо на экране, и хотя выходные данные легко сохранить в виде файла png или jpeg, их немного сложнее экспортировать в виде EPS для включения в документ или бумагу.

Этот пакет делает весь процесс чрезвычайно простым, потому что вы можете использовать объект EpsGraphics2D, как если бы это был объект Graphics2D. Единственное отличие состоит в том, что все реализованные методы создают выходные данные EPS, что означает, что размер нарисованных диаграмм можно изменять, не приводя к каким-либо неровным краям, которые вы можете видеть при изменении размеров пиксельных изображений, таких как файлы JEPG и PNG.

5 голосов
/ 01 мая 2009

Apache Batik позволит вам рисовать в специализированной реализации объекта Graphics2D, а затем экспортировать в файл масштабируемой векторной графики (.svg). Затем вы можете просмотреть / обработать / распечатать его, используя браузер с поддержкой SVG (Firefox будет обрабатывать его наивно, ISTR, IE и другие могут использовать плагины).

См. Объект SVGGraphics2D (документированный процесс здесь )

2 голосов
/ 01 мая 2009

Java EPS, упомянутый Пьером, выглядит хорошо, но если это не так, вам также может понравиться FreeHEP Vector Graphics . Написанный для повторного использования Java в области физики высоких энергий, он включает пакет векторной графики, выполненный посредством реализации Graphics2D. Мы использовали его для успешного экспорта EPS в течение ряда лет.

1 голос
/ 29 сентября 2015

Дополнительные библиотеки для людей с таким же требованием:

Оба эти GPLv3 и хорошо протестированы путем широкого использования в JFreeChart и Орсоновских диаграммах .

1 голос
/ 01 ноября 2010

Я могу порекомендовать библиотеку VectorGraphics2D (LGPL). Хотя он не поддерживает все функции Graphics2D, я успешно использовал его для своего проекта. Он предоставляет реализации java.awt.Graphics2D для различных форматов векторных файлов. Он просто экспортирует все операции рисования в файлы EPS, SVG или PDF.

0 голосов
/ 06 февраля 2014

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();
    }
}

Есть несколько библиотечных фляг, которые также должны быть добавлены.

0 голосов
/ 01 мая 2009

это в принципе невозможно напрямую, так как низкоуровневый Java API работает в терминах растра (пикселей) и никогда не сохраняется в векторном формате (Проверьте API java.awt.Graphics, чтобы понять, что я имею в виду).

есть какая-то программа общего назначения, которая конвертирует растровые в векторные форматы, это я нашел в быстром поиске: http://autotrace.sourceforge.net/index.html

Итак, с помощью такой программы вы можете разделить вашу проблему на две меньшие задачи:

  1. преобразовать JPanel в растровое изображение или файл (http://www.jguru.com/faq/view.jsp?EID=242020)
  2. запустить автотрассировку для файла.
...