Вопрос

Я хотел бы экспортировать изображение из моей 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.

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

Оба они 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

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

  1. преобразуйте вашу JPanel в растровое изображение или файл (http://www.jguru.com/faq/view.jsp?EID=242020)
  2. запустите автоматическую трассировку файла.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top