Difference between revisions of "GSoC 2008 UniConvertor and GraphicsMagick integration"

From Scribus Wiki
Jump to: navigation, search
m (Typos)
Line 2: Line 2:
 
Rationale
 
Rationale
 
---------
 
---------
Scribus is a serious DTP application and therefore has to deal with many
+
Scribus is a reputable DTP application and therefore has to deal with many
different fileformats. While it already supports quite a few formats many
+
different file formats. While it already supports quite a few formats, some
others are still lacking or incompletely supported. UniConverter which is
+
others are still not or incompletely supported. UniConverter, which is
 
"a universal vector graphics translator"[1] can help for vector formats
 
"a universal vector graphics translator"[1] can help for vector formats
and GraphicsMagick which is a branch of the famous ImageMagick does the
+
and GraphicsMagick, which is a branch of the well-known ImageMagick does the
 
same for raster formats[2].
 
same for raster formats[2].
  
Line 13: Line 13:
 
My motivation for doing this project is that I think it will be a huge benefit
 
My motivation for doing this project is that I think it will be a huge benefit
 
for Scribus and I like this kind of work (gluing two programs together). I did
 
for Scribus and I like this kind of work (gluing two programs together). I did
this last year with LaTeX and from the feedback I received it was a great
+
this last year with LaTeX and from the feedback I received, it was a great
 
success. So I want to do something similar this year and hope it will be as  
 
success. So I want to do something similar this year and hope it will be as  
 
good or even better than last time.
 
good or even better than last time.
Line 20: Line 20:
 
--------
 
--------
 
I'll write an import/export filter that uses UniConverter and GraphicsMagick to
 
I'll write an import/export filter that uses UniConverter and GraphicsMagick to
read and write all the formats supported by these programs.
+
read and write most of the formats supported by these programs.
  
 
Details
 
Details
Line 32: Line 32:
  
 
* Implementation
 
* Implementation
The import plugin will either call UniConverter directly and get "raw" commands
+
The import plug-in will either call UniConverter directly and get "raw" commands
 
to create the vector objects or it will use UniConverter to convert to an
 
to create the vector objects or it will use UniConverter to convert to an
 
intermediate format such as SVG and then read this format.
 
intermediate format such as SVG and then read this format.
 
The same applies to the export filter, but here it might be possible that some  
 
The same applies to the export filter, but here it might be possible that some  
of the feature supported by Scribus are not supported by the output format and
+
of the feature supported by Scribus are not supported by the output format,
so the user has to get a message.
+
so the user gets a warning.
  
 
* Existing work
 
* Existing work
The SVG plugin can serve as a base for the new import plugin.
+
The SVG plugin can serve as a base for the new import plug-in.
  
* Userinterface
+
* User interface
 
The list in File->Import gets pretty long, so it might be good to merge these
 
The list in File->Import gets pretty long, so it might be good to merge these
entries to a better interface, perhaps with autodetection of the fileformat and
+
entries to a better interface, perhaps with auto-detection of the file format and manual override.
manual override.
 
  
  
Line 51: Line 50:
  
 
* Previous experience
 
* Previous experience
I have used ImageMagick, the base of GraphicsMagick a lot. I customized the
+
I have used ImageMagick, the base of GraphicsMagick, a lot. I customized the
 
bash script based dvd-menu-tool dvdwizard[3] at a time when it was less powerful
 
bash script based dvd-menu-tool dvdwizard[3] at a time when it was less powerful
 
than today. I had to rewrite a lot of the graphics code which relies on  
 
than today. I had to rewrite a lot of the graphics code which relies on  
 
ImageMagick.
 
ImageMagick.
I've also a bit of experience with imageframe loaders, because I came across  
+
I also have a bit of experience with image frame loaders, because I came across  
this part of Scribus' code when working on my LaTeX frames project.
+
this part of the Scribus code when I was working on my LaTeX frames project.
  
 
* Implementation
 
* Implementation
As GraphicsMagick deals with raster graphics an import filter for image frames
+
As GraphicsMagick deals with raster graphics, an import filter for image frames
 
is required here. With libgraphicsmagic++, a C++ library for the GraphicsMagick  
 
is required here. With libgraphicsmagic++, a C++ library for the GraphicsMagick  
 
functions, the integration should be pretty easy.
 
functions, the integration should be pretty easy.
Line 66: Line 65:
 
The QT image file loaders can serve as a base.
 
The QT image file loaders can serve as a base.
  
* Userinterface
+
* User interface
No new userinterface is required, but a way to show previews for the new
+
No new user interface is required, but a way to show previews for the new
filetypes has to be found.
+
file types has to be found.
  
 
** Other changes **
 
** Other changes **
Line 78: Line 77:
 
-------------------
 
-------------------
 
By using these libraries it is no longer necessary to write a new filter for
 
By using these libraries it is no longer necessary to write a new filter for
each new fileformat, but we can profit from the formats added to shared
+
each new file format, but we can benefit from the formats added to shared
libraries. For example Inkscape[4] also uses UniConverter starting with version
+
libraries. For example Inkscape[4] also uses UniConverter since version
0.46 [5]. So new fileformat should be usable faster.
+
0.46 [5]. As a result, new file formats added to the external libraries should be usable in Scribus faster.
  
 
Use cases
 
Use cases
Line 88: Line 87:
 
Deliverables
 
Deliverables
 
------------
 
------------
- Import plugin for UniConverter
+
- Import plug-in for UniConverter
- Export plugin for UniConverter
+
- Export plug-in for UniConverter
- Import only plugin for GraphicsMagick (or integrated into the main code)
+
- Import only plug-in for GraphicsMagick (or integrated into the main code)
 
- Better structured "File->Import" menu if found to be required
 
- Better structured "File->Import" menu if found to be required
 
- Documentation
 
- Documentation
Line 101: Line 100:
 
   read documentation, get up to speed to begin working on their projects.
 
   read documentation, get up to speed to begin working on their projects.
  
  I can start coding at this point, as I am already familiar with the scribus
+
  I can start coding at this point, as I am already familiar with the Scribus
 
  development process.
 
  development process.
  
Line 117: Line 116:
  
 
  Around this time there will be some exams at university, so expect me to be
 
  Around this time there will be some exams at university, so expect me to be
  learing a bit more and coding a bit less. No exact dates are available yet.
+
  learning a bit more and coding a bit less. No exact dates are available yet.
  
 
* August 11: Suggested 'pencils down' date. Take a week to scrub code, write
 
* August 11: Suggested 'pencils down' date. Take a week to scrub code, write
Line 124: Line 123:
 
   Now the GraphicsMagick part should be completed too. The time lost with the
 
   Now the GraphicsMagick part should be completed too. The time lost with the
 
   exams should be no problem, as this part of the work should take much less
 
   exams should be no problem, as this part of the work should take much less
   time and I also spent the "Community Bonding Period" coding.
+
   time and I'll also use the "Community Bonding Period" for coding.
 
    
 
    
 
* August 18: Firm 'pencils down' date. Mentors, students and organization  
 
* August 18: Firm 'pencils down' date. Mentors, students and organization  

Revision as of 21:41, 28 March 2008

Rationale
---------
Scribus is a reputable DTP application and therefore has to deal with many
different file formats. While it already supports quite a few formats, some
others are still not or incompletely supported. UniConverter, which is
"a universal vector graphics translator"[1] can help for vector formats
and GraphicsMagick, which is a branch of the well-known ImageMagick does the
same for raster formats[2].

Motivation
----------
My motivation for doing this project is that I think it will be a huge benefit
for Scribus and I like this kind of work (gluing two programs together). I did
this last year with LaTeX and from the feedback I received, it was a great
success. So I want to do something similar this year and hope it will be as 
good or even better than last time.

Overview
--------
I'll write an import/export filter that uses UniConverter and GraphicsMagick to
read and write most of the formats supported by these programs.

Details
-------

** UniConverter **

* Previous experience
I've not worked with UniConverter before, so this information is based on
a short research only and the implementation details are likely to change.

* Implementation
The import plug-in will either call UniConverter directly and get "raw" commands
to create the vector objects or it will use UniConverter to convert to an
intermediate format such as SVG and then read this format.
The same applies to the export filter, but here it might be possible that some 
of the feature supported by Scribus are not supported by the output format,
so the user gets a warning.

* Existing work
The SVG plugin can serve as a base for the new import plug-in.

* User interface
The list in File->Import gets pretty long, so it might be good to merge these
entries to a better interface, perhaps with auto-detection of the file format and manual override.


** GraphicsMagick **

* Previous experience
I have used ImageMagick, the base of GraphicsMagick, a lot. I customized the
bash script based dvd-menu-tool dvdwizard[3] at a time when it was less powerful
than today. I had to rewrite a lot of the graphics code which relies on 
ImageMagick.
I also have a bit of experience with image frame loaders, because I came across 
this part of the Scribus code when I was working on my LaTeX frames project.

* Implementation
As GraphicsMagick deals with raster graphics, an import filter for image frames
is required here. With libgraphicsmagic++, a C++ library for the GraphicsMagick 
functions, the integration should be pretty easy.

* Existing work
The QT image file loaders can serve as a base.

* User interface
No new user interface is required, but a way to show previews for the new
file types has to be found.

** Other changes **

* Build system
The build system has to be updated to look for UniConverter and GraphicsMagick.

Benefits to Scribus
-------------------
By using these libraries it is no longer necessary to write a new filter for
each new file format, but we can benefit from the formats added to shared
libraries. For example Inkscape[4] also uses UniConverter since version
0.46 [5]. As a result, new file formats added to the external libraries should be usable in Scribus faster.

Use cases
---------
Importing all kinds of vector and raster formats.

Deliverables
------------
- Import plug-in for UniConverter
- Export plug-in for UniConverter
- Import only plug-in for GraphicsMagick (or integrated into the main code)
- Better structured "File->Import" menu if found to be required
- Documentation

Timeline
--------

* April 14: Accepted student proposals announced on the Google Summer of Code 
  home page. Community Bonding Period: Students get to know mentors, 
  read documentation, get up to speed to begin working on their projects.

 I can start coding at this point, as I am already familiar with the Scribus
 development process.

* May 26: Students begin coding for their GSoC projects;

 At this point I should have read the required documentation and probably the 
 basic functionality for UniConverter ready.

* July 7: Mentors and students can begin submitting mid-term evaluations.

 UniConverter should be fully working now and work on GraphicsMagick is started
 or about to be started.

* July 20: End of semester

 Around this time there will be some exams at university, so expect me to be
 learning a bit more and coding a bit less. No exact dates are available yet.

* August 11: Suggested 'pencils down' date. Take a week to scrub code, write
  tests, improve documentation, etc.
  
  Now the GraphicsMagick part should be completed too. The time lost with the
  exams should be no problem, as this part of the work should take much less
  time and I'll also use the "Community Bonding Period" for coding.
  
* August 18: Firm 'pencils down' date. Mentors, students and organization 
 administrators can being submitting final evaluations to Google.


Links
-----
[1] http://sk1project.org/modules.php?name=Products&product=uniconvertor
[2] http://www.graphicsmagick.org/
[3] http://dvdwizard.wershofen.net/
[4] http://www.inkscape.org
[5] http://wiki.inkscape.org/wiki/index.php/ReleaseNotes046